Program CodeBug with Python 3
By Russell Barnes. Posted
Move on from Blocky programming and control your CodeBug with all the power of Python…
Advertisement
Head to head: Raspberry Pi + Raspberry Pi Zero + Raspberry Pi Pico.
The CodeBug is simple to set up and start programming with the Scratch-like Blocky interface on the website. Once you have mastered this, you'll probably want to move on to the next stage and take full control with a more powerful language like Python 3. This allows you to include more ambitious data structures, such as lists and tuples, and build larger projects with procedures. Your expert started to wonder how good a game you could build with just a square of 25 LEDs and a switch. This is his first attempt.
The full article can be found in The MagPi 41 and was written by Tony Goodhew
You’ll need
USB Micro B cable (included)
Python libraries: python3-serial & python3-codebug-tether
CodeBug script: codebug-tether.cbg
STEP-01 Game rules
We need a simple game in which you press a button when a target is in a certain position. Back in the late 1970s, your expert used to set a ‘Zap the Rat’ game as homework while teaching Commodore PET or Ohio Scientific Basic. You have to click a button as a moving ‘rat’ target passes a certain ‘zapping point’ on a circuit. In this version, the speed increases each time you successfully hit a rat, and you need to hit three rats with as few attempts as possible. It would be nice to display the hits while the game is running, and a final score to show how many times you missed the target. Can all of this be fitted on a 5×5 LED display?
STEP-02 Planning the display
The circuit will be all the outside edge LEDs, with the rats starting their run from the bottom-left corner: (0,0). The zap cell will be at (4,2), with a permanently lit LED at (3,2) to mark it. Hits can be indicated by a column of lit LEDs rising from (1,1) to (1,3). Button ‘B’ will be used to zap the rat. The final score can be displayed with either a character ‘O’ to indicate no missed zap opportunities – quite difficult to achieve – or lit LEDs (0 -25) for each miss. For a ‘hit’ to register, the button must be pressed while the zap position LED is lit; holding the button down won't work.
STEP-03 Setting up the CodeBug
To run the CodeBug in tethered mode, you'll need to download and install a program called codebug_tether.cbg. Once installed in the normal way, the CodeBug temporarily becomes a slave device to your Raspberry Pi and obeys instructions sent from Python 3. (This is rather like using Nanpy to control an Arduino from a Pi.)
Two additional Python libraries, python3-serial and python3-codebug-tether, need to be installed on the Pi. Point your browser to the Codebug site and follow the excellent instructions from Thomas Macpherson-Pope.
Open IDLE 3 and type in the Zaptherat.py Python script. Save it and run it.
STEP-04 Things to do
There are several modifications and additions you could make to the script:
• Randomise the rat’s starting position
• Randomise the direction in which the rat runs around the circuit
• Improve the zero final score to a square, expanding and contracting from position (2,2) to the edge and back again five times as a celebration.
Code listing
# Zap the Rat - Python3 Game for Tethered CodeBug
# Tony Goodhew - 5 Oct 2015
import codebug_tether
import time
cb = codebug_tether.CodeBug()
cb.clear()
# Circuit LED co-ordinates - round the edge from bottom-left
LEDx =(0,0,0,0,0,1,2,3,4,4,4,4,4,3,2,1)
LEDy =(0,1,2,3,4,4,4,4,4,3,2,1,0,0,0,0)
for i in range(0,-66,-1): # Display game title
cb.write_text(i,0,'Zap the Rat', direction="right")
time.sleep(0.1)
score = 0 # Rats zapped!
opps = 0 # Zap opportunities
p = 0 # Position of rat on circuit (0-15)
delay = 0.05 # Initial delay between rat moves
old_sw = 0 # Last value of switch B
running = True # Loop control variable
cb.clear()
cb.set_pixel(3,2,1) # Show Zap position
while running:
cb.set_pixel(LEDx[p],LEDy[p],1) # Show rat
if p == 10: opps = opps +1 # Incr opps - in (4,2)
time.sleep(delay - score * 0.007) # Wait - gets faster
sw = cb.get_input('B') # Read switch B
pixel = cb.get_pixel(4,2) # Rat in Zap position?
cb.set_pixel(LEDx[p],LEDy[p],0) # Hide rat
if old_sw == 0 and sw == 1 and pixel == 1: # Hit?
score = score +1 # Increment hits
cb.set_pixel(1,score,1) # Show hits
if score == 3: # Game over?
running = False # Stop looping
p = -1 # Position of next rat
old_sw = sw # Store switch value
p = p + 1 # Update rat position
if p > 15: # Rat pointer out of range?
p = 0 # Reset to start position
cb.clear() # Game over - display opportunities
opps = opps - 3 # Remove successful opportunities
print("Missed Opportunities were ",opps)
if opps > 25: # Reduce missed opps to 25 max
opps = 25
if opps == 0:
cb.write_text(0,0,'O') # Zero missed opps
else:
for x in range(0,5): # Display missed opps
for y in range(0,5):
if opps > 0:
cb.set_pixel(x,y,1)
else:
cb.set_pixel(x,y,0)
opps = opps - 1
time.sleep(5)
cb.clear() # Tidy display
Russell runs Raspberry Pi Press, which includes The MagPi, Hello World, HackSpace magazine, and book projects. He’s a massive sci-fi bore.
Subscribe to Raspberry Pi Official Magazine
Save up to 37% off the cover price and get a FREE Raspberry Pi Pico 2 W with a subscription to Raspberry Pi Official Magazine.
More articles
Teka-Sketch
This all-new e-ink-based Etch-a-Sketch can play Pong, and it also has an undo button
Read more →
Raspberry Pi vs Raspberry Pi Zero 2 vs Raspberry Pi Pico in Raspberry Pi Official Magazine 159
Without an operating system, any computer – including your Raspberry Pi – is just a dumb lump of sand. Put Raspberry Pi OS on it however, and you’ve got yourself a working system that can handle games, web browsers, emails, programming and everything else we bang on about here all day every day. The latest […]
Read more →
Win one of ten M.2 HAT+ Compact
The ability to connect NVME SSD drives to Raspberry Pi 5 is very cool, although it does slightly limit the cases you can use. With the M.2 HAT+ Compact, you can even fit an SSD-powered Raspberry Pi into the official case – and we have ten to give away below. Win one of ten M.2 […]
Read more →
Sign up to the newsletter
Get every issue delivered directly to your inbox and keep up to date with the latest news, offers, events, and more.
