Pintando con la tortuga en Small Basic

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.

Escribe un comentario

Tienes que iniciar sesión para escribir un comentario.