Das Logo-Turtle-Graphics-Module ermöglicht Graphik-Freaks die Befehle, die die Turtle in LOGO steuern, in Basic oder anderen Programmiersprachen zu verwenden. Das Programm stellt somit eine echte Alternative zu der absoluten Positionierung dar. Bei der Emulation erscheint keine Turtle auf dem Screen, aber die Resultate sind identisch.
Das Programm ist zur Steuerung einer Turtle ausgelegt, aber durch Indizierung einiger Variablen lassen sich beliebig viele verwalten. Der „Befehlsatz“ des Programms wurde mit den „Graphikbewegungen“ des ST-Logo abgeglichen.
Die Proceduren PD, PE, PU, PX ermöglichen eine komfortablere Programmierung, aber auf Kosten der Geschwindigkeit (da nur ein Befehl in der Proc steht), deshalb sollte man ggf. auf den Aufruf der Procs verzichten und stattdessen z.B. PEN=0 statt @PU schreiben. Gleiches gilt für SETX und SETY.
Die Initialisierungsroutine muß immer am Anfang stehen, denn dort wird in Abhängigkeit von der Auflösung die Home-Position festgelegt.
Die Turtle wird dort hingesetzt und nach Norden ausgerichtet.
Normalerweise reicht eine Turtle aus, man kann aber durch kleine Änderungen z.B. 4 Turtles wie in ATARI-(XL)-Logo steuern; dazu dimensioniert man die Variablen heading, pen, xcor und ycor und führt zusätzlich eine Variable für die aktive Turtle ein.
BACKWARD :N <=> @BK(N)
FORWARD :N <=> @FD(N)
HEADING <=> ? HEADING
HOME <=> @HOME
LEFT :G <=> @LT(G)
PENDOWN <=> @PD PEN=1
PENERASE <=> @PE COLOR 0
PENREVERSE <=> @PX GRAPHMODE 3
PENUP <=> @PU PEN=0
?POS <=> ? XCOR,YCOR
RIGHT :G <=> @RT(G)
SETHEADING :G <=> HEADING=G
SETPAN [319 99] <=> HX=319 ; HY=99
SETPOS [10 0] <=> XCOR=10 ; YCOR=0
SETX :N <=> @SETX(N) LINE xcor,ycor,xcor+n,ycor
SETY :N <=> @SETX(N) LINE xcor,ycor,xcor,ycor+n
?XCOR <=> ? XCOR
?YCOR <=> ? YCOR
Befehle, die emuliert werden
' --------------------------------
' Turtle Graphics Module
'
' GFA-Basic Version 1.8
'
' $7C4 THE BYTESHIFTER
'
' (c) MAXON Computer GmbH 1988
' --------------------------------
' INITIALIZATION
res=XBIOS(4)
IF res=0 OR res=1
hy=99
ELSE
hy=199
ENDIF
IF res=1 OR res=2
hx=319
ELSE
hx=159
ENDIF
xcor=hx
ycor=hy
'
' DEFAULTS
'
heading=0
pen=1
GOTO demo
' --------------------------------
PROCEDURE bk(x)
LOCAL h,x1,x2,y1,y2
h=((heading+180) MOD 360)/180*PI
x2=xcor+INT(x*SIN(h)+0.5)
y2=ycor-INT(x*COS(h)+0.5)
IF pen=1
x1=xcor
y1=ycor
LINE x1,y1,x2,y2
ENDIF
xcor=x2
ycor=y2
RETURN
' --------------------------------
PROCEDURE fd(x)
LOCAL h,x1,x2,y1,y2
h=heading/180*PI
x2=xcor+INT(x*SIN(h)+0.5)
y2=ycor-INT(x*COS(h)+0.5)
IF pen=1
x1=xcor
y1=ycor
LINE x1,y1,x2,y2
ENDIF
xcor=x2
ycor=y2
RETURN
' ---------------------------------
PROCEDURE home
xcor=hx
ycor=hy
heading=0
RETURN
' ---------------------------------
PROCEDURE lt(x)
heading=(360+heading-(x MOD 360)) MOD 360
RETURN
' ---------------------------------
PROCEDURE pd
pen=1
RETURN
' ---------------------------------
PROCEDURE pe
COLOR 0
RETURN
' ---------------------------------
PROCEDURE pu
pen=0
RETURN
' ---------------------------------
PROCEDURE px
GRAPHMODE 3
RETURN
' ---------------------------------
PROCEDURE rt(x)
heading=(heading+x) MOD 360
RETURN
' ---------------------------------
PROCEDURE setx(x)
IF pen=1
LINE xcor,ycor,xcor+x,ycor
ENDIF
ADD xcor,x
RETURN
' ----------------------------------
PROCEDURE sety(x)
IF pen=1
LINE xcor,ycor,xcor,ycor+x
ENDIF
ADD ycor,x
RETURN
' =================================
demo:
SETCOLOR 0,0,0,0
DEFTEXT 1,4,0,8
TEXT 15,hy-32,"TO ENJOY THE DEMO..."
DEFTEXT 1,20,0,28
TEXT 0,hy,650,"FASTEN YOUR SEAT BELT !"
t=TIMER+600
REPEAT
UNTIL t=TIMER
SETCOLOR 0,7,7,7
SETCOLOR 0,0,0,0
CLS
FOR i=1 TO 9
FOR j=1 TO 4
@fd(60)
@lt(90)
NEXT j
@rt(40)
NEXT i
' ---------------
CLS
@home
FOR i=1 TO 18
FOR j=1 TO 6
@fd(70)
@rt(60)
NEXT j
@rt(20)
NEXT i
' ---------------
CLS
@home
FOR i=10 TO 200 STEP 4
@fd(i)
@rt(135)
NEXT i
' ---------------
FOR i=77 TO 298 STEP 17
CLS
@home
FOR j=2 TO 5
FOR k=10 TO 150 STEP j
@fd(k)
@lt(i)
NEXT k
NEXT j
NEXT i
' ---------------
CLS
@home
DEFLINE 3
FOR i=10 TO 1000 STEP 4
@fd(i)
@rt(130)
NEXT i
@home
DEFLINE 0
COLOR 0
FOR i=10 TO 1000 STEP 4
@fd(i)
@rt(130)
NEXT i
SETCOLOR 0,7,7,7
' ----------------
CLS
COLOR 1
f=20
g1=25
g2=g1*2
t=8
m=2^(t-1)-1
r=0
txt$="WINTER..."
DEFLINE 3
@tree
txt$="SPRING..."
DEFLINE 1
@tree
txt$="SUMMER..."
r=1
@tree
' ----------------
CLS
@home
pen=1
g=0
WHILE g<10000
@fd(15)
@rt(g)
ADD g,34
WEND
TEXT 259,350,"ANY KEY TO EXIT"
' ----------------
REPEAT
UNTIL INKEY$>""
' ----------------
PROCEDURE tree
x=hx-LEN(txt$)*4
DEFTEXT 1,4,0,6
TEXT x,300,txt$
'
@home
@bk(50)
@fd(50+f)
@lt(g1)
FOR i=0 TO m
b$=BIN$(i)
l=LEN(b$)
IF l>0
t$=STRING$(t-l,"0")+b$
ELSE
t$=b$
ENDIF
@home
@lt(g1)
FOR j=1 TO t
IF MID$(t$,j,1)="0"
@rt(g1)
pen=0
@fd(f)
pen=1
@v
ELSE
@lt(g1)
pen=0
@fd(f)
pen=1
@v
ENDIF
NEXT j
IF r=1
@w
ENDIF
NEXT i
RETURN
' ------------------
PROCEDURE v
@lt(g1)
@fd(f)
@bk(f)
@rt(g2)
@fd(f)
@bk(f)
@lt(g1)
RETURN
' -------------
PROCEDURE w
DEFLINE 1,0,0,1
@lt(g1)
pen=1
@fd(f)
pen=0
@bk(f)
@rt(g2)
pen=1
@fd(f)
pen=0
@bk(f)
@lt(g1)
DEFLINE 1,0,0,0
RETURN