Por último para terminar con el modo ventana tenemos la librería Turtle, que sirve para pintar rectas como si estuviéramos usando un lápiz sobre un papel. Es una forma sencilla para pintar cosas, que se utilizó bastante hace unas cuantas décadas. Sus atributos y operaciones son:
- Angle: Permite obtener y cambiar el ángulo actual de la tortuga, los cambios son aplicados al instante. El ángulo se indica en grados donde el Norte es 0º, el Este 90º, el Sur 180º y el Oeste son 270º.
- Speed: Permite obtener y cambiar la velocidad de movimiento. Esta va de 1 a 10, donde 10 es el valor más rápido porque realiza las operaciones de forma instantánea.
- X: Permite obtener y cambiar la coordenada X de la tortuga de forma instantánea.
- Y: Permite obtener y cambiar la coordenada Y de la tortuga de forma instantánea.
- Show(): Muestra la tortuga en la ventana.
- Hide(): Oculta la tortuga en la ventana.
- PenDown(): Baja el lápiz de la tortuga para que cuando esta se mueva se vaya pintando en pantalla.
- PenUp(): Sube el lápiz de la tortuga para evitar que al moverse se vaya pintando en pantalla.
- Move(distancia): Mueve la tortuga una distancia especificada. Si el lápiz está bajado se dibujará una línea al moverse.
- MoveTo(x, y): Mueve la tortuga un punto especificado. Si el lápiz está bajado se dibujará una línea al moverse.
- Turn(ángulo): Gira la tortuga en base al ángulo en grados especificado. Si el ángulo es positivo gira a la derecha y si es negativo a la izquierda.
- TurnLeft(): Gira la tortuga 90º a la izquierda.
- TurnRight(): Gira la tortuga 90º a la derecha.
Y tras ver las operaciones y atributos de la librería Turtle, aquí tenéis un bonito programa de ejemplo donde se pintan unas cuantas formas usando esta librería, entre ellas un bonito círculo:
'----------------------------------------------------
' Prueba con turtle
'----------------------------------------------------
GraphicsWindow.Title = "Prueba con turtle"
GraphicsWindow.BackgroundColor = "White"
GraphicsWindow.PenColor = "SteelBlue"
GraphicsWindow.KeyDown = OnKeyDown
'----------------------------------------------------
Sub OnKeyDown
If GraphicsWindow.LastKey = "S" Then
Turtle.Show()
ElseIf GraphicsWindow.LastKey = "H" Then
Turtle.Hide()
ElseIf GraphicsWindow.LastKey = "C" Then
GraphicsWindow.Clear()
ElseIf GraphicsWindow.LastKey = "Escape" Then
Program.End()
ElseIf GraphicsWindow.LastKey = "D1" Then
Paint1()
ElseIf GraphicsWindow.LastKey = "D2" Then
Paint2()
ElseIf GraphicsWindow.LastKey = "D3" Then
Paint3()
ElseIf GraphicsWindow.LastKey = "D4" Then
lines = 6
PaintCircle()
ElseIf GraphicsWindow.LastKey = "D5" Then
lines = 8
PaintCircle()
ElseIf GraphicsWindow.LastKey = "D6" Then
lines = 16
PaintCircle()
ElseIf GraphicsWindow.LastKey = "D7" Then
lines = 32
PaintCircle()
ElseIf GraphicsWindow.LastKey = "D8" Then
lines = 64
PaintCircle()
ElseIf GraphicsWindow.LastKey = "D9" Then
lines = 128
PaintCircle()
ElseIf GraphicsWindow.LastKey = "D0" Then
lines = 256
PaintCircle()
EndIf
EndSub
'----------------------------------------------------
Sub Paint1
GraphicsWindow.Clear()
Turtle.X = GraphicsWindow.Width / 2
Turtle.Y = GraphicsWindow.Height / 2
Turtle.Speed = 8
Turtle.Angle = 0
Turtle.PenDown()
For i = 1 To 21
Turtle.Move(10 * i)
Turtle.TurnRight()
EndFor
Turtle.PenUp()
EndSub
'----------------------------------------------------
Sub Paint2
GraphicsWindow.Clear()
Turtle.X = 100
Turtle.Y = 100
Turtle.Speed = 8
Turtle.Angle = 180
paint = "True"
w = GraphicsWindow.Width - 200
h = GraphicsWindow.Height - 200
distance = 10
lines = h / distance
PaintStepLine()
Turtle.TurnLeft()
lines = w / distance
PaintStepLine()
Turtle.TurnLeft()
lines = h / distance
PaintStepLine()
Turtle.TurnLeft()
lines = w / distance
PaintStepLine()
Turtle.TurnLeft()
EndSub
'----------------------------------------------------
Sub PaintStepLine
For i = 1 To lines
If paint Then
Turtle.PenDown()
paint = "False"
Else
Turtle.PenUp()
paint = "True"
EndIf
Turtle.Move(distance)
EndFor
EndSub
'----------------------------------------------------
Sub Paint3
GraphicsWindow.Clear()
Turtle.X = GraphicsWindow.Width / 2
Turtle.Y = GraphicsWindow.Height / 2
Turtle.Speed = 8
Turtle.Angle = 0
Turtle.PenDown()
For i = 1 To 21
Turtle.Move(10 * i)
Turtle.Turn(45)
EndFor
Turtle.PenUp()
EndSub
'----------------------------------------------------
Sub PaintCircle
GraphicsWindow.Clear()
cx = GraphicsWindow.Width / 2
cy = GraphicsWindow.Height / 2
radius = cy * 0.8
Turtle.X = cx - radius
Turtle.Y = cy
Turtle.Speed = 8
Turtle.Angle = 0
Turtle.PenDown()
angle = Math.Pi * 2 / lines
For i = 1 To lines
x = cx - Math.Cos(angle * i) * radius
y = cy - Math.Sin(angle * i) * radius
Turtle.MoveTo(x, y)
EndFor
Turtle.PenUp()
EndSub
Y con esto damos por terminada la API de Small Basic. Aunque lo cierto es que hay más librerías como comenté en la introducción a la API, pero francamente no son especialmente útiles y en caso de tener curiosidad sobre ellas siempre queda la ayuda en línea del IDE para solventar la mayoría de las dudas, eso y la experimentación claro. ¿Quiere decir todo esto que ya se han acabado los artículos sobre Small Basic? Pues la verdad es que no, ya que todavía me queda una cosa muy importante que comentar (como extender la API desde C#) y seguramente haga algún juego que otro con este lenguaje, por lo que seguiré escribiendo más artículos sobre Small Basic. Así que mientras tanto seguid practicando y ánimo.
