# BBC micro:bit Scrolling Race Track

## Introduction

This project is a simple game idea for a vertical scrolling race track. The track is drawn randomly. The player can move left and right using the A and B buttons. The player can only move forward if they are not going to bump into the track.

## Programming

Comments are included in the code to explain what is going on.

```from microbit import *
import random

# lines of track
track_bits = [
"55550:",
"55500:",
"55000:",
"50005:",
"00055:",
"00555:",
"05555:"
]

# Game Variables
# **************

# current line of track
current = 3
# starting track
track = "50005:50005:50005:50005:50005:"
# used to allow track updates every third game loop
tick = 0
## co-ordinates of player character
x = 2
y = 4

# function creates an image from the track string
# the tick is used to vary the brightness of the
# character to make it blink
def draw(t):
img = Image(track)
img.set_pixel(x,y,tick * 4 + 1)
return img

# Game Loop

while True:
# make image of track
tt = draw(tick)
# check for button presses and
# move character if no collision
if button_a.was_pressed() and x!=0:
if tt.get_pixel(x-1,y)==0:
x = x - 1
elif button_b.was_pressed() and x!=4:
if tt.get_pixel(x+1,y)==0:
x = x + 1
# update ticks
tick += 1
# show track
display.show(tt)
# every third tick
if tick == 3:
# reset ticks
tick =0
# update track if possible
if tt.get_pixel(x,y-1)==0:
# delete bottom row of track
track = track[:-6]
# choose a new piece of track
current = random.randint(current - 1, current + 1)
# make sure the number is in range
current = max(0, min(current, 6))
# update track
track = track_bits[current] + track
# redraw screen
tt = draw(tick)
display.show(tt)
# rest a while
sleep(75)
```

## Challenges

1. Improvement is needed. An easy first step is to use the running_time() method to decide when to end the game. Add a score variable and add 1 to it every time the track is successfully updated (ie player not in the way). When the game is over, present the score to the player.
2. Add a buzzer and make it buzz every time the player's position prevents the track from being updated.
3. Allow the track to move off the matrix. When the player is at the edges of the matrix, you can move the whole image one place to the left or right. Work out how you should fill the edge that is created when you do this and how to choose your new piece of track and you will have a track that will appear to carry on off the screen.