In this blog post we are looking at recreating a fully working Simon Game using the BBC micro:bit.
If you are not sure what a Simon Game is you can check it on this wikipedia page.
You can watch the following two video clips to see the game in action, and understand the Python code used to implement it.
- Video Clip #1: micro:bit Simon Game: Demo
- Video Clip #2: micro:bit Simon Game: Python code fully explained
You will notice that our version of the game is simpler as we only use the two inputs from the micro:bit (A and B buttons) whereas the real Simon game is a bit more complex as it has four lights/buttons. The logic of the game remains the same though.
If you have a micro:bit yoyu can use the micro:bit website and reuse the code provided below, ready to download to your micro:bit. You will have to use the Python code editor option.
# Simon Game - by 101Computing - www.101computing.net/microbit-simon-game from microbit import * import random left = Image("96300:" "96300:" "96300:" "96300:" "96300") right = Image("00369:" "00369:" "00369:" "00369:" "00369") plus = Image("00000:" "00900:" "09990:" "00900:" "00000") AB = ["A", "B"] #Let's start with a sequence of three characters sequence = random.choice(AB) + random.choice(AB) + random.choice(AB) correct = True sleep(1000) while correct == True: #Let's start by displaying the sequence for character in sequence: if character=="A": display.show(left) elif character=="B": display.show(right) sleep(1000) display.show(plus) sleep(500) display.scroll("?") #Capture user input #The numbers of time the user will need to press the buttons depends on the length of the sequence maxInputs = len(sequence) capturedInputs = 0 while capturedInputs < maxInputs and correct == True: if button_a.is_pressed(): display.show(left) #Did the user guess it wrong? if sequence[capturedInputs] == "B": correct = False sleep(500) display.show(plus) capturedInputs += 1 if button_b.is_pressed(): display.show(right) #Did the user guess it wrong? if sequence[capturedInputs] == "A": correct = False sleep(500) display.show(plus) capturedInputs += 1 #Add an extra character to the sequence if correct==True: sequence = sequence + random.choice(AB) display.show(Image.HAPPY) sleep(1000) #Display Game Over + final score if len(sequence)>3: display.scroll("Game Over: Score: " + str(len(sequence))) else: display.scroll("Game Over: Score: 0")