Microsoft Small Basic

Program Listing: XVK119-0
' Turtle Graphics 0.2
' Copyright (c) 2014 Nonki Takahashi. All rights reserved.
'
' Lisence:
' The MIT Lisence (MIT)
' http://en.wikipedia.org/wiki/MIT_License
'
' History:
' 0.2 2014-03-21 Adopted to remote. (XVK119-0)
' 0.1 2014-03-20 Created. (XVK119)
'
GraphicsWindow.Title = "Turtle Graphics 0.2"
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], "MOVE") Then
distance = Text.GetSubTextToEnd(line[i], 5)
Turtle.Move(distance)
ElseIf Text.StartsWith(line[i], "PEN") Then
If Text.EndsWith(line[i], "UP") Then
Turtle.PenUp()
ElseIf Text.EndsWith(line[i], "DOWN") Then
Turtle.PenDown()
EndIf
ElseIf Text.StartsWith(line[i], "TURN") Then
angle = Text.GetSubTextToEnd(line[i], 5)
If Text.EndsWith(angle, "RIGHT") Then
angle = 90
ElseIf Text.EndsWith(angle, "LEFT") Then
angle = -90
EndIf
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 = "MOVE 100" + CR + "TURN 90" + CR + "MOVE 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, "MOVE distance")
GraphicsWindow.DrawText(10, 110, "PEN UP|DOWN")
GraphicsWindow.DrawText(10, 150, "TURN RIGHT|LEFT|angle")
GraphicsWindow.BrushColor = "Green"
GraphicsWindow.DrawText(10, 210, "HAVE FUN!")
Program.Delay(5000)
GraphicsWindow.Clear()
EndSub