Microsoft Small Basic

Program Listing: XVK119-1
' Turtle Graphics 0.3a
' Copyright © 2014-2015 Nonki Takahashi. The MIT Lisence.
'
' History:
' 0.3 2015-04-06 Changed for Challenge of the Month - April 2014. (XVK119-1)
' 0.2 2014-03-21 Adopted to remote. (XVK119-0)
' 0.1 2014-03-20 Created. (XVK119)
'
GraphicsWindow.Title = "Turtle Graphics 0.3a"
Init()
Opening()
Main()
Sub Main
GraphicsWindow.BrushColor = "DimGray"
GraphicsWindow.FontSize = 20
pgm = Controls.AddMultiLineTextBox(10, 10)
Controls.SetSize(pgm, 180, gh - 60)
Controls.SetTextBoxText(pgm, src)
GraphicsWindow.BrushColor = "Black"
Controls.AddButton("RUN", 10, gh - 46)
clicked = "False"
Controls.ButtonClicked = OnButtonClicked
GraphicsWindow.PenColor = "DimGray"
GraphicsWindow.PenWidth = 2
Turtle.Show()
While "True"
If clicked Then
src = Controls.GetTextBoxText(pgm)
Run()
clicked = "False"
Else
Program.Delay(500)
EndIf
EndWhile
EndSub
Sub OnButtonClicked
clicked = "True"
EndSub
Sub Run
SrcToLines()
For i = 1 To nLines
DoLine()
EndFor
EndSub
Sub SrcToLines
p = 1
nLines = 0
pNewLine = Text.GetIndexOf(src, CR)
While 0 < pNewLine
nLines = nLines + 1
line[nLines] = Text.ConvertToUpperCase(Text.GetSubText(src, p, pNewLine - 1))
p = p + pNewLine
If Text.GetSubText(src, p, 1) = LF Then
p = p + 1
EndIf
pNewLine = Text.GetIndexOf(Text.GetSubTextToEnd(src, p), CR)
EndWhile
If p <= Text.GetLength(src) Then
nLines = nLines + 1
line[nLines] = Text.ConvertToUpperCase(Text.GetSubTextToEnd(src, p))
EndIf
EndSub
Sub DoLine
' param line - array of command lines
' param i - index to do for the line
If Text.StartsWith(line[i], "FORWARD") Then
distance = Text.GetSubTextToEnd(line[i], 8)
Turtle.Move(distance)
ElseIf Text.StartsWith(line[i], "PENUP") Then
Turtle.PenUp()
ElseIf Text.StartsWith(line[i], "PENDOWN") Then
Turtle.PenDown()
ElseIf Text.StartsWith(line[i], "RIGHT") Then
angle = Text.GetSubTextToEnd(line[i], 6)
Turtle.Turn(angle)
ElseIf Text.StartsWith(line[i], "LEFT") Then
angle = -Text.GetSubTextToEnd(line[i], 5)
Turtle.Turn(angle)
EndIf
EndSub
Sub Init
gw = 598
gh = 428
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
CR = Text.GetCharacter(13)
LF = Text.GetCharacter(10)
src = "FORWARD 100" + CR + "RIGHT 90" + CR + "FORWARD 200"
SrcToLines()
EndSub
Sub Opening
url = "http://www.nonkit.com/smallbasic.files/"
obj = Shapes.AddImage(url + "Turtle.png")
GraphicsWindow.BrushColor = "Green"
GraphicsWindow.FontSize = 60
GraphicsWindow.FontName = "Tahoma"
GraphicsWindow.DrawText(10, 0, "TURTLE GRAPHICS")
x = 100
y = 440
Shapes.Move(obj, 10, 440)
Program.Delay(2000)
GraphicsWindow.FontSize = 40
GraphicsWindow.BrushColor = "DimGray"
GraphicsWindow.DrawText(10, 80, line[1])
For y = y To 100 Step -1
Shapes.Move(obj, x, y)
Program.Delay(10)
EndFor
GraphicsWindow.DrawText(10, 120, line[2])
For a = 0 To 90
Shapes.Rotate(obj, a)
Program.Delay(50)
EndFor
GraphicsWindow.DrawText(10, 160, line[3])
For x = x To 700
Shapes.Move(obj, x, y)
Program.Delay(10)
EndFor
GraphicsWindow.BrushColor = "#99FFFFFF"
For i = 1 To 5
GraphicsWindow.FillRectangle(0, 0, gw, gh / 2)
Program.Delay(500)
EndFor
GraphicsWindow.BrushColor = "DimGray"
GraphicsWindow.DrawText(10, 10, "COMMANDS:")
GraphicsWindow.DrawText(10, 70, "FORWARD distance")
GraphicsWindow.DrawText(10, 110, "PENUP|PENDOWN")
GraphicsWindow.DrawText(10, 150, "RIGHT|LEFT angle")
GraphicsWindow.BrushColor = "Green"
GraphicsWindow.DrawText(10, 210, "HAVE FUN!")
Program.Delay(5000)
GraphicsWindow.Clear()
EndSub