C 64
Listing des Monats

Turtle-Grafik – Die schnelle Schildkröte

Turtle-Grafik ist eine Spracherweiterung, die es in sich hat. Vollständig in Maschinensprache geschrieben stellt sie einige Befehle zur Verfügung, mit denen Sie komfortabel sehr schnell Bilder erzeugen können.

In sekundenschnelle ist dieses Bild aufgebaut
Text und Grafik können gleichzeitig auf dem Bildschirm erscheinen

Wenn Sie dieses Programm abtippen, werden Sie keinen Ärger mit den vielen DATAs bekommen. Haben Sie einen falschen Wert eingegeben, weist Sie die eingebaute Prüfsummenroutine auf die fehlerhafte Zeile hin und listet sie am Bildschirm. Bitte halten Sie sich daher an die Zeilennumerierung. Nach der Eingabe sollten Sie das Programm speichern und erst dann starten. Wenn alles ok ist, empfehle ich Ihnen, das Demoprogramm (Listing 2) einzugeben. Es vermittelt Ihnen einen sehr guten Eindruck von den Fähigkeiten der Grafikerweiterung. Doch nun zur Turtle-Grafik selbst.

Das Programm ermöglicht die Programmierung von hochauflösender Grafik in Basic mit neuen leistungsfähigen Befehlen.

Wird das Programm gestartet, meldet es sich mit: TURTLE GRAPHICS BY PETER MENKE 38911 BASIC BYTES FREE

Nun sind alle Funktionen und Befehle des Programms fest in Basic eingebettet und bleiben bis zum Ausschalten erhalten.

Das Programm unterstützt die Programmierung zweier voneinander völlig unabhängiger Bildschirme:

  1. Den normalen Textbildschirm
  2. Den Grafikbildschirm auf dem die hochauflösende Grafik erscheint.

Zwischen den beiden Bildschirmen können Sie mit der Funktionstaste F1 hin- und herschalten. Der neue Befehl HIRES1 schaltet den Grafik-Bildschirm ein (HIRES 0 = ausschalten).

Im folgenden die Befehle im Einzelnen

HIRES1 hi, ra

Die Angaben für Hintergrund und/oder Randfarbe sind nicht unbedingt notwendig, die alten Farben werden dann beibehalten.

CLEAR

Dieser Befehl löscht den gesamten Grafikbildschirm.

REVERS

Dieser Befehl invertiert den gesamten Grafikbildschirm.

COLOR pu, hi, ra

Die Farben der hochauflösenden Grafik werden neu definiert (pu = Punktfarbe). Wie beim HIRES-Befehl können auch hier die Angaben für hi und/oder ra entfallen.

GSAVE »Name«, Gerätenummer

Speichert eine erzeugte Grafik ab.

GLOAD »Name«, Gerätenummer

Lädt eine vorher gespeicherte Grafik in den Computer.

Wenn Sie den Grafikbildschirm einschalten, sehen Sie in der Mitte des Bildschirms einen blinkenden Punkt: Den Grafikcursor (oder »Turtle«, zu deutsch »Schildkröte«),

Durch Bewegen dieses Grafikcursors können Sie Linien auf dem Bildschirm zeichnen.

DEG wi

Bestimmt die Bewegungsrichtung der Turtle. Acht Richtungen sind möglich (»wi« kann Werte zwischen 0 und 7 annehmen).

    2
  3   1
4   *   0
  5   7
    6

MOVEx

Move bewegt die Schildkröte um x Punkte.

Der HIRES-Befehl positioniert den Grafikcursor automatisch auf die Bildschirmmitte. Der eingestellte Winkel ist 0. Außerdem wird Modus 0 eingeschaltet (siehe MODE).

LTURN x (x max.=255)

Dreht den Grafikcursor um x Einheiten nach links.

RTURN x (x max.=255)

Dreht den Grafikcursor um x Einheiten nach rechts.

PLOT x-cor, y-cor

Setzt den Grafikcursor auf eine bestimmte Bildschirmposition. Die obere linke Ecke des Bildschirms hat die Koordinaten 0,0; die rechte untere 319,199.

MODE m (m max 4)

Bei den Befehlen MOVE und PLOT kennt das Programm 4 Modi.

  1. Punkt setzen
  2. Punkt löschen
  3. Punkt invertieren
  4. nichts verändern

Normalerweise ist Modus 0 eingeschaltet. Mit dem MODE-Befehl läßt sich dies ändern.

Gleichzeitige Darstellung von Text und Grafik

Das Programm teilt den Bildschirm in einen Text- und in einen Grafikteil.

Betätigt man bei eingeschaltetem Grafikbildschirm die F3-Taste, so wird im unteren Teil des Bildschirms der untere Teil des normalen Textbildschirms eingeblendet.

Bei nochmaligem Betätigen dieser Taste wird das »Textfenster« wieder ausgeblendet.

WINDOW 1

Schaltet Textfenster ein.

WINDOW 0

Schaltet Textfenster aus.

Mit der Taste F5 wird der Cursor (der normale) in die obere linke Ecke des Textfensters gebracht. Dies entspricht der HOME-Taste für den gesamten Bildschirm. Die F5-Taste läßt sich ebenso programmieren wie die HOME-Taste, das heißt mit PRINT ”(F5)” (auf dem Bildschirm erscheint ein reverses Grafikzeichen) läßt sich der Cursor in die obere linke Ecke des Textfensters bringen.

JOYSTICK ve

(ve=Verzögerung. Mit ve = 0 malt man am schnellsten, mit ve = 255 am langsamsten.)

Dieser Befehl erlaubt das Zeichnen von Bildern mit dem Joystick (Port 2). Mit dem Joystick kann der Grafikcursor bewegt werden. Druckt man gleichzeitig den Feuerknopf, wird entsprechend dem eingestellten Modus ein Punkt gesetzt, gelöscht etc. Nun können beliebige Bilder gezeichnet werden, solange, bis mit der F7-Taste mit der Programmabarbeitung fortgefahren wird.

LPEN

Dieser Befehl erlaubt das Zeichnen von Bildern mit dem Lightpen (Port 1). Ini Prinzip gilt das gleiche wie beim JOYSTICK-Befehl, nur daß hier statt des Feuerknopfes die CTRL-Taste beziehungsweise der Knopf am Lightpen benutzt wird. Man verläßt den Lightpenmodus mit F7.

Alle Befehle können unabhängig vom Einschaltzustand des Grafikbildschirms angewendet werden. Sie lassen sich auch wie normale Basic-Befehle abkürzen.

Die Funktionen und Anwendungen des Programms und seiner Befehle sind sehr gut in dem Programm »TURTLE DEMO« demonstriert (Listing 2).

(Peter Menke/gk)

Das Programm beginnt mit Titel und Autorenanschrift. Das GOSUB in Zeile 260 dient nur zur Suche von Syntax-Fehlern in den DATA-Zeilen. Im Programmteil »Variable« ab Zeilennummer 290 wird der Variablen AN die Startadresse des Maschinenprogramms zugewiesen, der Variable ZI die Endadresse. In NA$ steht der Programmname. Die eigentliche Einleseroutine (ab Zeile 350) funktioniert folgendermaßen: Es werden in einer Schleife die ersten 16 Zahlen aus einer jeden DATA-Zeile gelesen und in den Speicher gePOKEt. Gleichzeitig wird aus den gelesenen Daten eine Prüfsumme gebildet. Diese Summe wird mit der letzten Zahl in der DATA-Zeile verglichen, dies ist die richtige Prüfsumme. Unterscheiden sich die beiden Zahlen, so wurde ein Tippfehler gemacht und die fehlerhafte Zeile wird vom Programm automatisch geLI-STet. Außerdem wird geprüft, ob eine Zeile vergessen wurde (Zeile 517-520) und ob die Anzahl der Daten richtig ist (Zeile 530-537). Zusätzlich wird noch getestet, ob die gelesene Zahl auch zwischen 0-255 liegt (Zeile 391). Ist dies nicht der Fall, wird eine Fehlermeldung ausgegeben (Zeile 503-505). Ursache ist wahrscheinlich ein Kommafehler. Wurde kein Fehler gefunden, so fragt das Programm, ob es sich selbst abspeichern soll (davon sollte bei der ersten Benutzung des Programms unbedingt Gebrauch gemacht werden, Zeile 546-580). Danach wird das Maschinenprogramm gestartet (Zeile 590-610). Trotz der Prüfsummen ist ein Fehler in den DATAs nicht völlig ausgeschlossen. Vertauschungen werden zum Beispiel nicht bemerkt. Solche Fehler sind jedoch sehr unwahrscheinlich.

Diese Art der Überprüfung von DATA-Werten sollten Sie sich genau ansehen. Sie erleichtert der Redaktion und vor allem den Lesern die Eingabe und Überprüfung großer Zahlenkolonnen. Falls Sie uns Programme einschicken wollen, dann nehmen Sie sich doch auch bitte etwas Zeit und fügen eine komfortable Prüfroutine in Ihre Programme ein.

Programmierung

  1. Speicheraufteilung:

    Das Video-RAM steht ab $0400. Der Hires-Speicher wurde hinter $CC00 gelegt, das Hires-Farb-RAM nach C800. Das Programm selbst beginnt bei $C000 und endet bei $C88B. Programmvariable liegen im Bereich vor $CC00.

  2. Die Belegung der Funktionstasten wird durch ein »Anzapfen« des Interrupt ermöglicht. Die Funktion PRINT ”(fs)” wird durch Verändern der BSOUT-Routine erreicht.
  3. Das Textfenster:

    Wie Sie wissen, wird das Bild auf dem Fernseher (Monitor) durch einen Elektronenstrahl erzeugt, der den Bildschirm zeilenweise von oben nach unten abfährt. Der VIC bietet nun die Möglichkeit bei einer bestimmten Zeilenposition einen Interrupt auszulösen. Diese Fähigkeit des VIC wird ausgenutzt. In der dann ausgeführten Interruptroutine wird zwischen Hires- und Textmodus hin und her geschaltet, so daß der Bildschirm in ein Text und ein Grafikfenster eingeteilt wird.

  4. Die neuen Befehle:

    Es gibt zahlreiche Möglichkeiten, neue Basic-Befehle zu implementieren. Anzapfen der

    1. CHRGET-Routme (DOS 5.1)
    2. Eingabe-Warteschleife (Toolkits)
    3. Interpreterschleife (beschrieben im 64 Intern)

    Die drei Möglichkeiten haben jedoch alle große Nachteile: Sie sind alle entweder zu langsam (1. und 3.), die Befehle lassen sich nur im Direktmodus anwenden (2.) oder sie können nicht abgekürzt werden. Deshalb wurden die Befehle mit sehr komplexen Routinen voll als Tokens integriert. Aus diesem Grund wurde die Interpreterschleife, die Routine zur Umwandlung in Interpretercode und die Routine zur Rückumwandlung in Klartext verändert. Die Vorteile dieser Arbeitsweise sind, daß sich die neuen Befehle wie normale Basic-Befehle anwenden lassen und daß nur minimale Geschwindigkeitsverluste bei der Ausführung von Basic-Programmen in Kauf genommen werden müssen. Ähnliche Methoden verwenden übrigens auch professionelle Basic-Erweiterungen, wie zum Beispiel Simons Basic.

    Ein solches »Anzapfen« von Betriebssystem- und Basic-Routinen wird beim C 64 durch zahlreiche Sprungvektoren ermöglicht, die verändert werden können. Dies ist leider nicht bei allen Computern so gut möglich. Die hier benutzten Vektoren sind:

Name: Adresse in dezimal:
Interrupt-Vektor : 788/789
NMI-Vektor : 792/793
BRK-Vektor : 790/791
Bsout-Vektor : 806/807
Vektor für Umwandlung in Interpretercode : 772/773
Vektor für Umwandlung in Klartext : 774/775
Vektor für Basic-Befehl ausführen (Interpreterschleife) : 776/777

Das Wissen über die Programmierung des Programms ist für dessen Anwendung nicht nötig. Doch nun viel Spaß mit Turtle Grafik.

(Peter Menke/gk)
AN = Anfangsadresse des Maschinenprogramms
ZI = Endadresse des Maschinenprogramms
NA$ = Programmname beim Abspeichern
GE = Geräteadresse beim Abspeichern
X = eingelesener DATA-Wert
S = Speicherstelle, in die X gePOKEt wird
Z = aktuelle DATA-Zeilennummer
PR = errechnete Prüfsumme
I = Variable der FOR/NEXT-Einleseschleife
Benutzte Variable
20 print"{clr}{down}{down}    {CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}
30 print"    {CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}
40 print"    {CBM-B}{CBM-B}                           {CBM-B}{CBM-B}
50 print"    {CBM-B}{CBM-B}                           {CBM-B}{CBM-B}
60 print"    {CBM-B}{CBM-B}     turtle graphics       {CBM-B}{CBM-B}
70 print"    {CBM-B}{CBM-B}     EEEEEEEEEEEEEEE       {CBM-B}{CBM-B}
100 print"    {CBM-B}{CBM-B}                           {CBM-B}{CBM-B}
110 print"    {CBM-B}{CBM-B}   entwickelt 8.1984 von   {CBM-B}{CBM-B}
120 print"    {CBM-B}{CBM-B}                           {CBM-B}{CBM-B}
130 print"    {CBM-B}{CBM-B}                           {CBM-B}{CBM-B}
140 print"    {CBM-B}{CBM-B}   p e t e r  m e n k e    {CBM-B}{CBM-B}
150 print"    {CBM-B}{CBM-B}                           {CBM-B}{CBM-B}
160 print"    {CBM-B}{CBM-B}        griftweg 4         {CBM-B}{CBM-B}
170 print"    {CBM-B}{CBM-B}    2212 brunsbuettel      {CBM-B}{CBM-B}
190 print"    {CBM-B}{CBM-B}                           {CBM-B}{CBM-B}
200 print"    {CBM-B}{CBM-B}                           {CBM-B}{CBM-B}
210 print"    {CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}
220 print"    {CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}
230 print"{down}{down}         bitte taste druecken"
240 get a$:if a$=""then240
250 print"{clr}"
260 gosub1000
270 :
280 :
290 rem **variable**
300 an=49152
301 zi=51360
310 na$="turtle gr."
320 :
330 :
340 :
350 rem **** einleseroutine ****
360 s=an:z=1000
370 fori=1to16:read x
390 ifx=-100then530
391 ifx<0orx>255then503
400 gosub515:pokes,x
410 s=s+1:pr=pr+x:next
440 :
460 read x:if pr=x then pr=0:z=z+10:goto 370
470 print"{down}{down}pruefsummenfehler in zeile"z
475 print"{down}pruefsumme der zeile"z":"pr:print
480 print"richtige pruefsumme:"x:print:print
490 print"{down}list"z-10"-"z"{up}{up}";:poke631,13:poke198,1
500 end
501 :
502 :
503 print"datenfehler in zeile"z
504 print"es wurde versucht"x"zu poken."
505 goto490
510 :
511 :
512 :
515 print"{home}{down}{down}  zeile:"z" speicherstelle:"s
516 print"{down}  eingelesener wert:    {left}{left}{left}{left}"x
517 if z>=peek(63)+256*peek(64) then return
518 print"{down}{down}{down}data-zeile fehlt!!"
519 print"oder zeilennummern der data-zeilen nicht"
520 print"in zehner abstaenden":end
521 :
522 :
523 :
530 if s=zi then 539
531 print"{down}{down}{down}datenanzahl ist falsch":print:print"das waere richtig :";zi-an
532 print:print"ihre datenanzahl :";s-an
537 end
539 print"{down}{down}keinen fehler gefunden !{down}"
540 print"abspeichern (j/n) ?"
550 get a$:if a$="n" then 590
560 if a$<>"j" then 550
570 input"geraeteadresse (1=datasette/8=disk)";ge
580 save na$+"(c)pm",ge
590 print"{down}zum start eine beliebige                taste druecken
600 get a$:if a$="" then 600
610 sysan
630 :
640 :
650 :
1000 data 120,032,063,193,088,032,163,193,032,223,193,169,028,133,254,169,2085
1010 data 192,133,255,032,097,192,032,068,166,076,116,164,147,017,017,017,1721
1020 data 029,029,084,085,082,084,076,069,032,071,082,065,080,072,073,067,1080
1030 data 083,190,190,029,029,066,089,032,080,069,084,069,082,032,077,069,1270
1040 data 078,075,069,190,190,029,029,051,056,057,049,049,032,066,065,083,1168
1050 data 073,067,032,066,089,084,069,083,032,070,082,069,069,017,017,190,1109
1060 data 191,160,000,177,254,201,191,240,012,201,190,208,002,169,013,032,2241
1070 data 210,255,200,208,238,096,173,025,208,141,025,208,016,029,173,018,2223
1080 data 208,201,250,176,011,032,204,193,169,250,141,018,208,076,188,254,2579
1090 data 032,185,193,169,217,141,018,208,076,188,254,173,013,220,088,165,2340
1100 data 204,208,033,169,032,044,017,208,240,026,206,252,203,208,021,169,2240
1110 data 007,141,252,203,173,241,203,072,169,002,141,241,203,032,118,195,2393
1120 data 104,141,241,203,165,212,208,030,165,216,208,026,165,203,205,255,2747
1130 data 203,240,019,141,255,203,201,064,240,012,201,004,240,011,201,005,2240
1140 data 240,029,201,006,240,048,076,049,234,173,017,208,041,032,240,009,1843
1150 data 032,204,193,032,017,194,076,230,192,032,185,193,076,230,192,173,2251
1160 data 017,208,041,032,240,246,173,026,208,041,001,240,006,032,017,194,1722
1170 data 076,230,192,032,254,193,162,021,160,000,024,032,240,255,076,230,2177
1180 data 192,072,138,072,152,072,169,127,141,013,221,172,013,221,048,012,1835
1190 data 032,163,253,032,024,229,032,063,193,108,002,160,076,114,254,032,1767
1200 data 204,193,169,004,141,136,002,169,118,141,020,003,169,192,141,021,1823
1210 data 003,169,033,141,024,003,169,193,141,025,003,169,048,141,022,003,1287
1220 data 169,193,141,023,003,169,011,141,254,203,169,001,141,253,203,141,2215
1230 data 252,203,169,000,141,026,208,169,134,141,004,003,169,196,141,005,1961
1240 data 003,169,043,141,008,003,169,197,141,009,003,169,084,141,006,003,1289
1250 data 169,197,141,007,003,169,103,141,038,003,169,199,141,039,003,032,1554
1260 data 249,195,096,162,032,160,000,169,224,133,255,132,254,152,145,254,2612
1270 data 136,208,251,230,255,202,208,246,096,169,056,141,024,208,169,148,2747
1280 data 141,000,221,173,017,208,009,032,141,017,208,096,169,021,141,024,1618
1290 data 208,169,151,141,000,221,173,017,208,041,223,141,017,208,096,169,2183
1300 data 204,133,255,160,000,132,254,162,004,173,253,203,010,010,010,010,1973
1310 data 013,254,203,145,254,136,208,251,230,255,202,208,246,096,169,217,3087
1320 data 141,018,208,173,017,208,041,127,141,017,208,169,001,141,026,208,1844
1330 data 096,169,000,141,026,208,096,166,122,202,232,142,242,203,162,255,2462
1340 data 142,251,203,142,250,203,238,250,203,174,250,203,189,127,194,240,3259
1350 data 033,016,243,238,251,203,172,242,203,136,200,185,000,002,141,249,2514
1360 data 203,232,189,127,194,056,237,249,203,240,239,201,128,240,019,076,2833
1370 data 038,194,174,242,203,189,000,002,240,007,201,058,240,188,232,208,2416
1380 data 244,096,174,242,203,173,251,203,024,105,208,157,000,002,232,200,2514
1390 data 185,000,002,157,000,002,240,218,232,200,208,244,076,082,194,200,2240
1400 data 072,073,082,069,211,077,079,086,197,067,076,069,065,210,087,073,1593
1410 data 078,068,079,215,080,076,079,212,077,079,068,197,068,069,199,082,1726
1420 data 069,086,069,082,211,076,084,085,082,206,082,084,085,082,206,067,1656
1430 data 079,076,079,210,071,076,079,065,196,071,083,065,086,197,074,079,1586
1440 data 089,083,084,073,067,203,076,080,069,206,072,069,076,208,000,239,1694
1450 data 194,205,197,095,195,084,199,073,196,118,196,147,197,163,197,128,2584
1460 data 198,144,198,165,198,036,199,223,198,161,199,059,200,053,199,032,2462
1470 data 158,183,224,000,240,054,032,121,000,240,040,032,253,174,032,158,1941
1480 data 183,224,016,144,003,076,106,195,142,254,203,032,223,193,032,121,2147
1490 data 000,240,016,032,253,174,032,158,183,224,016,144,003,076,106,195,1852
1500 data 142,032,208,032,185,193,032,249,195,076,174,167,032,121,000,240,2078
1510 data 037,032,253,174,032,158,183,224,016,144,003,076,106,195,142,033,1808
1520 data 208,032,121,000,240,016,032,253,174,032,158,183,224,016,144,003,1836
1530 data 076,106,195,142,032,208,032,017,194,032,204,193,076,174,167,208,2056
1540 data 012,032,163,193,032,223,193,076,174,167,162,014,044,162,011,032,1690
1550 data 204,193,076,055,164,096,173,241,203,201,003,240,248,174,246,203,2720
1560 data 138,074,074,041,254,168,185,015,196,141,244,203,185,016,196,141,2271
1570 data 245,203,138,041,007,024,109,244,203,141,244,203,173,247,203,041,2466
1580 data 248,141,243,203,173,244,203,133,252,024,169,224,109,245,203,133,2947
1590 data 253,024,165,252,109,243,203,133,252,165,253,109,248,203,133,253,2998
1600 data 173,247,203,041,007,073,007,170,189,065,196,160,000,120,162,052,1865
1610 data 134,001,174,241,203,240,008,224,001,240,014,224,002,240,019,017,1982
1620 data 252,145,252,169,055,133,001,088,096,073,255,049,252,145,252,076,2293
1630 data 227,195,081,252,145,252,076,227,195,169,000,141,248,203,141,241,2793
1640 data 203,141,240,203,169,160,141,247,203,169,100,141,246,203,096,000,2662
1650 data 000,064,001,128,002,192,003,000,005,064,006,128,007,192,008,000,800
1660 data 010,064,011,128,012,192,013,000,015,064,016,128,017,192,018,000,880
1670 data 020,064,021,128,022,192,023,000,025,064,026,128,027,192,028,000,960
1680 data 030,001,002,004,008,016,032,064,128,032,235,183,224,200,176,035,1370
1690 data 165,021,201,001,144,008,208,027,165,020,201,064,176,021,120,142,1684
1700 data 246,203,165,020,141,247,203,165,021,141,248,203,088,032,118,195,2436
1710 data 076,174,167,076,106,195,032,158,183,224,004,144,003,076,106,195,1919
1720 data 142,241,203,076,174,167,032,023,194,166,122,160,004,132,015,189,2040
1730 data 000,002,141,249,203,041,240,201,208,208,006,173,249,203,076,232,2432
1740 data 196,173,249,203,016,007,201,255,240,062,232,208,226,201,032,240,2741
1750 data 055,133,008,201,034,240,086,036,015,112,045,201,063,208,004,169,1610
1760 data 153,208,037,201,048,144,004,201,060,144,029,132,113,160,000,132,1766
1770 data 011,136,134,122,202,200,232,189,000,002,056,249,158,160,240,245,2336
1780 data 201,128,208,048,005,011,164,113,232,200,153,251,001,185,251,001,2152
1790 data 240,054,056,233,058,240,004,201,073,208,002,133,015,056,233,085,1891
1800 data 208,141,133,008,189,000,002,240,223,197,008,240,219,200,153,251,2412
1810 data 001,232,208,240,166,122,230,011,200,185,157,160,016,250,185,158,2521
1820 data 160,208,180,189,000,002,016,190,076,009,166,032,115,000,041,240,1624
1830 data 201,208,240,009,032,121,000,032,237,167,076,174,167,032,121,000,1817
1840 data 041,015,010,168,185,208,194,133,167,185,207,194,133,166,032,115,2153
1850 data 000,108,166,000,016,052,201,255,240,048,036,015,048,044,141,249,1619
1860 data 203,041,240,201,208,208,038,173,249,203,041,015,170,232,132,073,2427
1870 data 160,255,200,185,127,194,016,250,202,208,247,200,185,127,194,048,2798
1880 data 006,032,071,171,076,123,197,076,239,166,076,243,166,173,249,203,2267
1890 data 076,036,167,032,158,183,224,008,144,003,076,106,195,142,240,203,1993
1900 data 076,174,167,208,037,162,032,169,224,133,255,160,000,132,254,120,2303
1910 data 169,052,133,001,177,254,073,255,145,254,136,208,247,230,255,202,2791
1920 data 208,242,169,055,133,001,088,076,174,167,076,109,195,032,138,173,2036
1930 data 032,247,183,166,020,240,008,032,236,197,198,020,076,211,197,166,2229
1940 data 021,240,006,198,021,198,020,208,234,076,174,167,173,240,203,240,2419
1950 data 029,201,002,240,034,201,004,240,039,201,006,240,044,201,001,240,1923
1960 data 010,201,003,240,015,201,005,240,020,208,027,032,047,198,032,093,1572
1970 data 198,076,118,195,032,067,198,032,047,198,076,118,195,032,056,198,1836
1980 data 032,067,198,076,118,195,032,093,198,032,056,198,076,118,195,173,1857
1990 data 246,203,240,067,206,246,203,096,173,246,203,201,199,176,056,238,2999
2000 data 246,203,096,173,248,203,208,009,173,247,203,240,042,206,247,203,2947
2010 data 096,173,247,203,208,003,206,248,203,206,247,203,096,173,248,203,2963
2020 data 208,009,238,247,203,208,003,238,248,203,096,174,247,203,232,224,2981
2030 data 064,176,004,142,247,203,096,173,237,203,208,003,076,106,195,096,2229
2040 data 032,158,183,138,024,109,240,203,041,007,141,240,203,076,174,167,2136
2050 data 032,158,183,142,249,203,173,240,203,056,237,249,203,041,007,141,2517
2060 data 240,203,076,174,167,032,158,183,224,016,176,048,142,253,203,032,2327
2070 data 223,193,032,121,000,240,034,032,253,174,032,158,183,224,016,176,2091
2080 data 027,142,254,203,032,223,193,032,121,000,240,013,032,253,174,032,1971
2090 data 158,183,224,016,176,006,142,032,208,076,174,167,076,106,195,120,2059
2100 data 169,052,133,001,162,032,160,000,132,254,132,166,169,224,133,255,2174
2110 data 169,160,133,167,177,254,145,166,136,208,249,230,255,230,167,202,3048
2120 data 208,242,169,055,133,001,088,032,212,225,162,000,160,192,134,254,2267
2130 data 169,160,133,255,169,054,133,001,169,254,032,216,255,169,055,133,2357
2140 data 001,076,174,167,032,212,225,169,000,133,185,162,000,160,224,032,1952
2150 data 213,255,076,174,167,208,026,160,000,185,128,194,240,016,016,007,2065
2160 data 041,127,032,210,255,169,013,032,210,255,200,076,057,199,076,174,2126
2170 data 167,076,109,195,032,158,183,224,000,240,006,032,254,193,076,174,2119
2180 data 167,032,017,194,076,174,167,072,165,154,201,003,208,008,104,201,1943
2190 data 135,240,006,076,022,231,076,213,241,142,249,203,166,212,208,027,2447
2200 data 166,216,208,023,152,072,169,021,133,214,169,000,133,211,032,108,2027
2210 data 229,104,168,174,249,203,169,135,024,088,096,174,249,203,076,022,2363
2220 data 231,032,158,183,232,142,239,203,169,001,141,237,203,165,203,201,2740
2230 data 003,208,008,169,000,141,237,203,076,174,167,169,000,141,238,203,2137
2240 data 173,000,220,041,001,208,009,032,047,198,032,034,200,238,238,203,1874
2250 data 173,000,220,041,002,208,009,032,056,198,032,034,200,238,238,203,1884
2260 data 173,000,220,041,004,208,009,032,067,198,032,034,200,238,238,203,1897
2270 data 173,000,220,041,008,208,009,032,093,198,032,034,200,238,238,203,1927
2280 data 173,238,203,208,168,032,011,200,076,173,199,173,241,203,072,169,2539
2290 data 002,141,241,203,032,118,195,032,047,200,032,118,195,104,141,241,2042
2300 data 203,096,173,000,220,041,016,208,226,032,118,195,076,047,200,172,2023
2310 data 239,203,162,100,202,208,253,136,208,248,096,240,003,076,109,195,2678
2320 data 165,203,201,003,208,003,076,174,167,173,020,208,056,233,050,144,2084
2330 data 239,201,200,176,235,141,246,203,173,019,208,056,233,035,144,224,2733
2340 data 010,141,247,203,144,007,201,064,176,214,169,001,044,169,000,141,1931
2350 data 248,203,173,141,002,041,004,240,012,032,118,195,032,093,198,032,1764
2360 data 118,195,076,064,200,173,241,203,072,169,002,141,241,203,032,118,2248
2370 data 195,032,118,195,104,141,241,203,076,064,200,255,255,255,255,249,2838
63000 data -100:return
Listing Turtle-Grafik
0 rem t u r t l e   d e m o
1 rem by peter menke
2 :
3 hires 1,0,0:color15:clear
4 :
10 rem roboter-kopf
20 plot 120,160
30 deg 2:move 10
40 deg 0:move 30
50 deg 2:move 10
55 deg 4:move 40
60 deg 2:move 100
65 deg 0:move 100
70 deg 6:move 100
90 deg 4:move 40
100 deg 6:move 10
110 deg 0:move 30
120 deg 6:move 10
121 :
122 rem linkes ohr
130 plot 110,105
140 deg 4:move 15
150 deg 2:move 30
160 deg 0:move 15
161 :
162 rem rechtes ohr
170 plot 210,105
180 deg 0:move 15
190 deg 2:move 30
200 deg 4:move 15
201 :
202 rem mund
210 plot 130,120
220 deg 6:move 10
230 deg 0:move 60
240 deg 2:move 10
241 :
242 rem nase
250 plot 152,100
260 deg 0:move 16
270 deg 3:move 8
280 deg 4:move 1
290 deg 5:move 8
291 :
292 rem linkes auge
293 plot 130,60:deg 0
295 fort=1to4
300 move 15
310 rturn2
320 next
330 :
340 rem rechtes auge
350 plot 190,60:deg 6
360 fort=1to4
370 move 15
380 rturn 2
390 next
400 :
410 window 1:print"{clr}{f5}         t u r t l e    d e m o"
420 print"{down}             by peter menke"
430 fori=0to4000:next
440 window 0
450 :
460 :
461 rem spirale
470 hires 1,2,2:color 0:clear:plot 160,100
480 fori=1to66
490 lturn 1
500 move i
510 next
511 fori=1to1000:next
520 :
530 :
540 rem viereck-spiralen
541 clear:color1
550 hires 1,2,2:fori=1to200step2
560 rturn 2:move i:next
561 plot 160,100
570 fori=1to195step2
580 lturn 2:move i:next
590 plot 160,100
600 fori=1to195
610 rturn 2:move i:next
620 :
630 :
640 rem muster
641 hires1,5,5:clear:color0
650 fori=1to45
660 forx=0to7
670 rturnx
671 move i
680 nextx
700 next
710 :
720 hires1,5,5
730 fori=1to45
740 forx=0to7
750 lturnx
761 movei
780 nextx
790 next
800 fori=1to2000:next
810 :
820 :
830 rem pyramiden
840 hires1,6,6:clear:color15
850 fori=1to33
860 forx=0to7
870 deg x
871 move i
880 nextx
900 next
910 :
930 fori=1to33
940 forx=0to7
950 deg 7-x
961 move i
980 nextx
990 next
991 fori=1to8:trap
992 forx=1to500:next
993 next
1000 :
1010 :
1011 rem inverses muster
1020 hires7,7:color 0:clear
1030 fory=1to4:hires 1:else 2
1040 fori=1to100
1050 move i
1060 forx=1to7
1070 lturn x:movex:nextx,i,y
1080 :
1090 :
1111 rem strich-muster
1120 hires1,8,8:color 0:clear
1130 fory=1to4:hires 1:else2
1140 fori=1to45
1150 move i
1160 forx=1to10
1170 rturn x:move x:nextx,i,y
1181 :
1182 :
1183 rem joystick zeichnen
1184 hires 1,10,10:color0:clear
1185 window1
1186 print"{clr}{f5}    joystick-zeichnen (port 2)"
1187 print"    weiter mit f7"
1188 joystick5
1189 :
1190 :
1191 rem lightpen zeichnen
1192 hires 1,1,1:color0:clear
1193 window1
1194 print"{clr}{f5}    lightpen-zeichnen (port 1)"
1195 print"    weiter mit f7"
1196 graphic
1197 :
1198 :
1200 rem zufall
1210 hires 1:clear:color 1,9,9
1220 window 1
1230 print"{clr}{f5}zufallsmuster
1240 print"schluss mit run/stop-taste
1250 deg rnd(1)*8:move 1:goto1250
Demo-Programm zur Turtle-Grafik
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →