### Stage 5: ShowÂ those pipes

So far, all we’ve got is a bird that flaps up and falls down. Not much of a game. As soon as we add a pipe that we’ve got to dodge, it starts to get much more fun.

The pipes will eventually scroll across the screen from right to left. They’re going to have a gap of 2 LEDs for the bird to try to squeeze between. We want them to appear in a random position so that sometimes you’ve got to flap to the top of the screen, sometimes to the bottom and sometimes in the middle.

• Add the lineÂ import randomÂ near the top, under the line that saysÂ from microbit import *
This imports the random module, which lets us choose a random number. We need a random number so that the pipes don’t always show in the same place.
• Above the line that starts theÂ while True:Â loop, add in the following lines:
```# Flappy bird Stage 5: Dodge those pipes
# https://blog.withcode.uk/2016/05/flappy-bird-microbit-python-tutorial-for-beginners
from microbit import *
import random

y = 50
speed = 0
score = 0

# Make an image that represents a pipe to dodge
def make_pipe():
i = Image("00003:00003:00003:00003:00003")
gap = random.randint(0,3)   # random wall position
i.set_pixel(4, gap, 0)      # blast a hole in the pipe
i.set_pixel(4, gap+1, 0)
return i

# create first pipe
i = make_pipe()

# Game loop
while True:
# show pipe
display.show(i)

# flap if button a was pressed
if button_a.was_pressed():
speed = -8

# show score if button b was pressed
if button_b.was_pressed():
display.scroll("Score:" + str(score))

# accelerate down to terminal velocity
speed += 1
if speed > 2:
speed = 2

# move bird, but not off the edge
y += speed
if y > 99:
y = 99
if y < 0:
y = 0

# draw bird
led_y = int(y / 20)
display.set_pixel(1, led_y, 9)

# wait 20ms
sleep(20)```

Lines 13 to 18 define a new function calledÂ make_pipeÂ . Line 21 uses this function to create a new image of a pipe calledÂ iÂ .

i = Image(“00003:00003:00003:00003:00003”)Â  creates a new image for a micro:bit called iÂ . This is a local variable which means it only exists in the function it’s defined in. That’s a confusing way of saying that we can’t access, use or change this local variable called iÂ  anywhere other than inside make_pipeÂ (lines 14-18).

Images on micro:bit

The numbers represent the brightness of the LEDS and the colons (:) represent a new line. So this image is a dim line from top to bottom on the far right of the screen.

Line 15 chooses a random position for a hole in this line:Â gap = random.randint(0,3)Â  and lines 16 and 17 replace the pixels at that position and the pixel below it with zero brightness to turn the LEDs off.

• Next, we need to display the pipe image. We’ll do this instead of clearing the display. Find the line that said display.clear()Â and replace it with display.show(i)

We don’t need to clear the display any more, because our image of a pipe not only tells the micro:bit to display the pipe but also to switch off all of the other LEDs. We could keep display.clear() and put display.show(i) underneath but when coding games you always try to make your code run as efficiently as possible by removing anything that takes up unnecessary processing time and resources.

Try it so far

We’re almost there now. Try out the code we’ve got so far below and make a list of the things that you think we still need to do to finish our game: