Microbit Turtles
Turtle graphics are a time-honoured way to teach algorithmic thinking and are supported in regular python.
Here's a small implementation of a turtle, complete with animation speed and pen support, for the microbit.
from microbit import *
import radio
Direction_Up = 0
Direction_Down = 1
Direction_Left = 2
Direction_Right = 3
class Turtle:
def __init__(self):
self.direction = Direction_Up
self.x = 2
self.y = 2
self.speed = 500
self.pen = False
def home(self):
self.goto(2, 2)
def forward(self, steps = 1):
x_delta, y_delta = 0, 0
if self.direction == Direction_Up:
y_delta = -1
elif self.direction == Direction_Down:
y_delta = 1
elif self.direction == Direction_Left:
x_delta = -1
else:
x_delta = 1
for i in range(steps):
self.goto(self.x + x_delta, self.y + y_delta)
sleep(self.speed)
def goto(self, x, y):
if not self.pen:
display.set_pixel(self.x, self.y, 0)
self.x = min(max(0, x), 4)
self.y = min(max(0, y), 4)
display.set_pixel(self.x, self.y, 9)
def left(self):
if self.direction == Direction_Up:
self.direction = Direction_Left
elif self.direction == Direction_Left:
self.direction = Direction_Down
elif self.direction == Direction_Down:
self.direction = Direction_Right
else:
self.direction = Direction_Up
def right(self):
if self.direction == Direction_Up:
self.direction = Direction_Right
elif self.direction == Direction_Right:
self.direction = Direction_Down
elif self.direction == Direction_Down:
self.direction = Direction_Left
else:
self.direction = Direction_Up
def pendown(self):
self.pen = True
def penup(self):
self.pen = False
The turtle always starts off in the centre of the screen, facing up. We can draw a tiny 1 pixel square using dots that disappear when a new one appears:
turtle = Turtle()
# square
for i in range(4):
turtle.forward(1)
turtle.right()
Or we can use the pen to draw an outline around the screen from the top left corner.
turtle = Turtle()
turtle.goto(0, 0)
turtle.right()
turtle.pen_down()
for index in range(4):
turtle.forward(4)
turtle.right()