Ein drumherum Update von mir, über das Basic und seine Eigenheiten mit dem Datentype Real. Ach wäre es schön, wenn Integer nicht nur bei FOR TO NEXT verwendet würde.
Schleifen sind damit extrem schnell im Vergleich zu Real. Leider sind in der Hauptschleife von BD nur IF THEN nötig und die sind extrem lahmmmmm im Vergleich zu FOR. Das liegt natürlich an den Datentype Real, der deutlich langsamer ist. Bei PEEK und POKE ergibt Real gar keinen Sinn, aber selbst da wird intern mit Real gerechnet. Man kann sogar solchen einen Unsinn schreiben A=53280.999:POKE A,1. Kurz noch, es gibt das Binäre verschieben mit << >>, das auch langsamer als * oder / ist hmmmm.
Aber zurück zu IF THEN und die viel schnellere Alternative dazu.
Hier mal eine Zeile der Abroll-Routine -> Stein/Diamant.
Im Bench benötigt eine Schleife von 10000 ca. 1,95 Sekunden und mit FGOTO nur 1,34. Und das auch nur, weil ich hier den Punkt verwenden kann, sonst wäre IF noch langsamer. Man könnte jetzt einfach FGOTO verwenden und gut ist, aber der arme Drachen müsste sich Tage und Nächte lang in den Code einlesen. Und sich durch eine Wüste von DIM Feldern kämpfen, um Zeilennummern anzulegen oder zu ändern.
Mit FGOTO würde das in etwas so aussehen.
- 20 O=O+1:FGOTO A(PEEK(O)) : REM Hauptschleife
- 30 FGOTO B(PEEK(O+40)) : REM Stein (liegt) unten
- 40 FGOTO C(PEEK(O+39)) : REM Stein (liegt) links unten
- 50 FGOTO D(PEEK(O+41)) : REM Stein (liegt) rechts unten
- 60 FGOTO C(PEEK(O-1 )) : REM Stein (liegt) links
- 70 FGOTO D(PEEK(O+1 )) : REM Stein (liegt) rechts
- 80 POKE O,.:POKE O-1,14:GOTO 20 : REM Stein (liegt) links bewegen -> Stein fallend
- 90 POKE O,.:O=O+1:POKE O,14:GOTO 20 : REM Stein (liegt) rechts bewegen -> Stein fallend
Für den fallenden Stein werden nochmal drei DIM Felder benötigt. Bei den anderen aktiven Objekten kommen nochmal unzählig Felder dazu. Man könnte dann sogar die Zeilen im Programm so legen, das die häufig ausgeführten Zeilen möglich oben im Programm liegen. Allein die Sprünge für jedes Feld zu definiert, damit jedes Objekt richtig behandelt wird, kostet viel Zeit und besonders viel, wenn sich ein Fehler eingeschlichen hat.
Jetzt die Frage IF THEN belassen oder DIM und damit Drachen in den Wahnsinn treiben mit A(0)=20:A(1)=20. Übrigens, jedes Feld hat eine Dimension von (52), das sind viele Sprünge, die man eintragen muss. Aber allein das Entfernen von ON GOTO durch FGOTO führte zu ein spürbares Speedup, obwohl jetzt hohe Zeilennummern benutzt werden. Mit Einser schritte von 0 ab sollte für ein weiteres Speedup sorgen, aber das ist erst beim fertigen Spiel sinnvoll.