Microsoft Small Basic

Program Listing: CMN910
''' Hilbert Curve
''' Version 0.1
''' Copyright © 2016 Nonki Takahashi. All rights reserved.
'
' Reference
' [1] Niklaus Wirth: "ALGORITHMS AND DATA STRUCTURES", 1986.
'
GraphicsWindow.Title = "Hilbert curve (order = 6)"
GraphicsWindow.Width = 598
GraphicsWindow.Height = 428
len = 400
i = 6
len = len / Math.Power(2, (i - 0))
Turtle.X = 500
Turtle.Y = 10
Turtle.Speed = 10
A()
Sub A
''' Draw Hilbert curve A
''' param i - order
Stack.PushValue("local", i)
i = i - 1
If 0 < i Then
D()
EndIf
Turtle.Angle = 270
Turtle.Move(len)
If 0 < i Then
A()
EndIf
Turtle.Angle = 180
Turtle.Move(len)
If 0 < i Then
A()
EndIf
Turtle.Angle = 90
Turtle.Move(len)
If 0 < i Then
B()
EndIf
i = Stack.PopValue("local")
EndSub
Sub B
''' Draw Hilbert curve B
''' param i - order
Stack.PushValue("local", i)
i = i - 1
If 0 < i Then
C()
EndIf
Turtle.Angle = 0
Turtle.Move(len)
If 0 < i Then
B()
EndIf
Turtle.Angle = 90
Turtle.Move(len)
If 0 < i Then
B()
EndIf
Turtle.Angle = 180
Turtle.Move(len)
If 0 < i Then
A()
EndIf
i = Stack.PopValue("local")
EndSub
Sub C
''' Draw Hilbert curve C
''' param i - order
Stack.PushValue("local", i)
i = i - 1
If 0 < i Then
B()
EndIf
Turtle.Angle = 90
Turtle.Move(len)
If 0 < i Then
C()
EndIf
Turtle.Angle = 0
Turtle.Move(len)
If 0 < i Then
C()
EndIf
Turtle.Angle = 270
Turtle.Move(len)
If 0 < i Then
D()
EndIf
i = Stack.PopValue("local")
EndSub
Sub D
''' Draw Hilbert curve D
''' param i - order
Stack.PushValue("local", i)
i = i - 1
If 0 < i Then
A()
EndIf
Turtle.Angle = 180
Turtle.Move(len)
If 0 < i Then
D()
EndIf
Turtle.Angle = 270
Turtle.Move(len)
If 0 < i Then
D()
EndIf
Turtle.Angle = 0
Turtle.Move(len)
If 0 < i Then
C()
EndIf
i = Stack.PopValue("local")
EndSub