Python on BBC micro:bitA game making session

Paweł Widera

What's the plan?

BBC micro:bit

25 LED matrix   |   Freescale MMA8652 3-axis accelerometer
Freescale MAG3110 3-axis magnetometer (e-compass)
push button x2   |   connectors (USB, serial, PWM, GPIO, SPI, i2c, ...)

MicroPython

http://micropython.org/


Damien George

Mu editor

http://codewith.mu/
https://microbit-micropython.readthedocs.io/


Nicholas Tollervay

First steps

import antigravity

Display

from microbit import display

display.set_pixel(2, 2, 9)
from microbit import Image

display.show(Image("90000:08000:00700:00060:00005"))
display.show(Image.SNAKE)
empty = Image(5, 5)
display.show([Image.HEART, empty], loop=True)

Animation

images = Image.ALL_CLOCKS
display.show(images, loop=True, delay=50, wait=False)
image = Image.DUCK
animation = [image.shift_left(i) for i in range(-5, 5)]
display.show(animation, loop=True, delay=100)
display.scroll("GAME OVER", loop=True)

Buttons

from microbit import button_a, button_b

while True:
  if button_a.is_pressed():
    display.show(Image.ARROW_W)
  elif button_b.is_pressed():
    display.show(Image.ARROW_E)
  else:
    display.clear()
from microbit import sleep

sleep(5000)

if button_a.was_pressed():
  count = button_a.get_presses()
  print(count)

Movement

from microbit import accelerometer

while True:
  x = accelerometer.get_x()
  print("{0:>5}".format(x))
  sleep(100)
while True:
  gesture = accelerometer.current_gesture()
  print(gesture)
  sleep(10)

I/O

from microbit import pin0

while True:
  if pin0.is_touched():
    display.show(Image.HAPPY)
  else:
    display.show(Image.SAD)
from microbit import pin1, pin2

bit = pin1.read_digital()
pin2.write_digital(bit)

Radio

import radio

radio.on()

while True:
  message = radio.receive()
  if message:
    print(message)
    radio.send(message)
radio.config(
  length = 32,  # 1-251
  queue = 3,
  channel = 7,  # 0-100
  group = 0     # 0-255
)

Fireflies

import radio
import random
from microbit import display, Image, button_a, sleep

steps = list(range(5, 9)) + list(range(9, -1, -1))
animation = [Image().invert() * (i/9) for i in steps]

radio.on()
while True:
  if button_a.was_pressed():
    radio.send("flash")

  message = radio.receive()
  if message == "flash":
    sleep(random.randint(50, 350))
    display.show(animation, delay=60, wait=False)

    if random.random() < 0.1:
      sleep(500)
      radio.send("flash")  # re-broadcast

Let's make a game!

Setup

http://codewith.mu/
https://microbit-micropython.readthedocs.io/ http://cheat.microbit-playground.co.uk/ https://create.withcode.uk/python/8w

chmod +x mu

sudo usermod -a -G dialout username

mkdir ~/MICROBIT
sudo mount /dev/disk/by-uuid/2702-1974 ~/MICROBIT

Some ideas (ordered by difficulty)