116 lines
2.8 KiB
Plaintext
116 lines
2.8 KiB
Plaintext
' Turtle Graphics Library by Angelo Rosina 1995
|
|
' Ported to Freebasic by Angelo Rosina 2007
|
|
'
|
|
'(RIGH and LEF because RIGHT and LEFT are reserved keywords, of course)
|
|
|
|
Declare Sub LEF (gradi As Integer)
|
|
Declare Sub SETCOL (C As Integer)
|
|
Declare Sub SETSIZE (C As Integer)
|
|
Declare Sub RIGH (gradi As Integer)
|
|
Declare Sub FORW (passi As Integer)
|
|
Declare Sub BACK (passi As Integer)
|
|
Declare Sub TURTLE (numero As Integer)
|
|
Declare Sub UP ()
|
|
Declare Sub DOWN ()
|
|
Declare Sub DTurtle ()
|
|
|
|
Dim Shared As Integer graph, dimen, angulo, N, dis, su, pasos
|
|
Dim Shared As Integer colore(10), figura(5000,10), figura2()
|
|
Dim Shared As Long X(10), Y(10)
|
|
Dim Shared As String comando
|
|
|
|
Sub BACK (passi As Integer)
|
|
pasos = passi
|
|
comando = "d " & Str(passi)
|
|
DTurtle
|
|
comando = ""
|
|
pasos = 0
|
|
End Sub
|
|
|
|
Sub DOWN
|
|
su = 0
|
|
End Sub
|
|
|
|
Sub DTurtle Static
|
|
Dim As Integer rifa, lavora, XX, YY, scher(), FX, FY
|
|
Dim As String R
|
|
|
|
If rifa = 0 Then rifa = 1: Redim scher(5000)
|
|
If lavora Then Put (XX - dimen * 4, YY - dimen * 2), scher, Pset
|
|
'SCREEN graph
|
|
If su Then comando = "b" & comando
|
|
FX = X(N)
|
|
FY = Y(N)
|
|
R = "s" & Str(dimen) & "bm" & Str(FX) & "," & Str(FY) & "c" & Str(colore(N)) & "Ta" & Str(angulo) & comando
|
|
Draw R
|
|
X(N) = X(N) + Sin(angulo / 57.2957) * dimen / 4 * pasos
|
|
Y(N) = Y(N) + Cos(angulo / 57.2957) * dimen / 4 * pasos
|
|
XX = X(N)
|
|
YY = Y(N)
|
|
Get (X(N) - dimen * 4, Y(N) - dimen * 2)-(X(N) + dimen * 4, Y(N) + dimen * 2), scher: lavora = 1
|
|
If dis = 0 Then
|
|
R = "bm" & Str(XX) & "," & Str(YY) & "Ta" & Str(angulo) & "r1 ta " & Str(angulo + 15 + 360 * (angulo + 15 > 360)) & "u7 ta " & Str(angulo + 165 + 360 * (angulo + 165 > 360)) & "u7 ta" & Str(angulo) & " m" & Str(XX) & "," & Str(YY)
|
|
Draw R
|
|
Else
|
|
Put (XX, YY), figura2, Or
|
|
End If
|
|
End Sub
|
|
|
|
Sub FORW (passi As Integer)
|
|
pasos = -passi
|
|
comando = "u " & Str(passi)
|
|
DTurtle
|
|
comando = ""
|
|
pasos = 0
|
|
End Sub
|
|
|
|
Sub LEF (gradi As Integer)
|
|
angulo += gradi
|
|
Do Until angulo <= 360
|
|
angulo -= 360
|
|
Loop
|
|
DTurtle
|
|
End Sub
|
|
|
|
Sub RIGH (gradi As Integer)
|
|
angulo -= gradi
|
|
Do Until angulo >= 0
|
|
angulo += 360
|
|
Loop
|
|
DTurtle
|
|
End Sub
|
|
|
|
Sub SETCOL (C As Integer)
|
|
colore(N) = C
|
|
DTurtle
|
|
End Sub
|
|
|
|
Sub SETSIZE (C As Integer)
|
|
dimen = C
|
|
DTurtle
|
|
End Sub
|
|
|
|
Sub TURTLE (numero As Integer) Static
|
|
Dim As Integer i, NN, j
|
|
Dim As Integer ang()
|
|
|
|
Redim figura2(dis)
|
|
If dis <> 0 And graph <> 0 Then
|
|
For i = 0 To dis
|
|
figura2(i) = figura(i, numero)
|
|
Next i
|
|
End If
|
|
NN = N
|
|
N = numero
|
|
If j = 0 Then j = 1: Redim ang(10): dimen = 4
|
|
If X(numero) = 0 Then X(numero) = 320
|
|
If Y(numero) = 0 Then Y(numero) = 100: colore(numero) = 15
|
|
ang(NN) = angulo
|
|
angulo = ang(N)
|
|
DTurtle
|
|
End Sub
|
|
|
|
Sub UP
|
|
su = 1
|
|
End Sub
|