Step 01: The game
It’s Christmas Eve, ten to midnight in 2020. The moon is waxing gibbous, at a phase of
73%, the constellation of Orion stands as high in the sky as it gets from these latitudes,
and Santa is about to make his overhead pass. He is propelled through the sky by a
mixture of magic and the energetic shaking of his eager recipients – that’s you. His mission is to deliver every single copy of The MagPi magazine to the people waiting
below. He has two passes to the end of the screen and back. Will he make it, or will
some fall into the soggy snow?
Step 02: The controller
The hardware controller we are about to build is about as simple as it gets. It consists of
a tilt switch mounted in a plastic drinks bottle. This then connects to a GPIO pin on
Raspberry Pi, and the rest is software. We first used tilt switches in The MagPi issue 52 with the sliders game – coincidentally also a Christmas game, and one of
our favourites. But this time we only need one switch. We used a small (140mm) flip-top
drinks bottle from a discount supermarket, and mounted the switch in the top.
Step 03: Make your shaker
We used thin screened microphone wire for the connection; it is only 1.6mm in
diameter. This makes for a nice neat job, but any sort of wire will work. First we drilled a
2mm hole in the flip top cover, and then threaded the wire through. Then we trimmed
the wire on the tilt switch down to about 5mm and soldered a wire on each connector
(Figure 1). Then we pushed the tilt switch through into the bottle until the wires were
below the level of the rim, and flooded the top recess with hot-melt glue, ensuring the tilt
switch was vertical, as shown in Figure 2.
Step 04: Connecting to the GPIO pins
To connect the other end of the tilt switch to the GPIO pins, we used a ten-pin dual-row
header socket. We connected the wires to pins 2 and 9 of the header socket; this
corresponds to ground and GPIO 3, as shown in the photograph in Figure 3. We used an I2S pin because of the, already fitted, 1K8 (1.8kΩ) pull-up resistor to give it good immunity from interference. Figure 4 shows the physical layout diagram for the whole
interface. We then ran a short test program, available on our GitHub page, to check it worked.
Step 05: Graphics
One of the major components of this sort of project is the graphics, so we got them
together before starting on writing any code. We looked around the net for royalty-free
Christmas animated GIFs of Santa’s sleigh, and found a good one with seven reindeer.
This was too many for our needs, so we used a photo editing package to remove all but
the first pair. We split the GIF into its separate frames and started editing: first removing
excess reindeers, then making the background transparent, and finally adding the
Raspberry Pi logo onto the sides of the sleigh.
Step 06: Your first dashboard
Then we found a chimney and made it a double chimney with a copy and flip of the
original clip art. We also did some retouching on the snow line between the chimneys,
to make the transition smooth. Most importantly, we made the snow line at either side of
the chimneys end at the same height. Finally, we made two lengths of just plane snow:
one the same length as the chimneys, and the other half the length. In this way, we
could mix and match the graphic elements in the scrolling ground display.
Step 07: The MagPi covers
This could have been hard work, going through all the back issues online and taking
screen grabs, but fortunately the magazine was planning to put all the covers on the
front page of the 100th issue, so they had gathered them together already. We only had
to scale them, in our case to 50 pixels wide. The final element was the star-studded
background for Santa to ride across, but been very keen on astronomy, we wanted this
to be accurate, along with the position and phase of the moon. So we turned to a great
open-source planetarium package Stellarium.
Step 08: Stellarium
Stellarium has been around for at least 15 years and is, by now, a very sophisticated
product available free for all three major platforms. We used it to look at the sky as it
would be on Christmas Eve 2020. While leap years keep the stars in the same place at
a specific date from year to year, the moon’s position and phase will change. This year
the moon is waxing gibbous, at a phase of 73%. ‘Waxing’ means it is getting fuller day
by day, ‘gibbous’ means it’s between half and full, and "phase" is how much of the moon you can see.
Step 09: Poetic licence
We took a bit of poetic licence when it came to the size of the moon. When looking at it
in the sky, we actually perceive it to be bigger than it really is, so we enlarged the moon
to match our perceptions. Figure 5 shows the negative of the background image we
used. It also includes constellation lines and star names – note the position of Rigel in
the constellation of Orion, as it is a key point in the game. Stellarium is much more than
a simple planetarium and can animate all sorts of events like the analemma of the sun.
Step 10: Software
All the software and graphics files can be found on our GitHub page. You use the
shaker to propel Santa across the sky, and need to keep shaking to keep him going.
When you have positioned him correctly, you press the SPACE bar to release a copy of
The MagPi magazine, which then drops to the ground. The longer it descends, the
faster it drops, as the speed increases because of the acceleration due to gravity. The
forward speed of the drop, however, is constant. This adds a bit of realism to what is a
big suspension of disbelief.
Step 11: The drop
While the magazine is dropping, Santa’s forward speed is transferred to vertical speed,
allowing you to control his altitude. This is important, because aiming from low height is
easer, but you can only drop magazines if the runners on the sleigh are above Rigel. If
you attempt a drop and you are at the level of Rigel, you will be whooshed to the top of
the screen. If the magazine’s bottom-left or bottom-right corner intersects the hidden
capture rectangle on each chimney, it sticks there and is considered delivered; if not,
then it sinks into the snow and is lost.
Step 12: Winning the game
Santa makes two runs across the screen: right to left, then left to right. The objective is
to deliver all 100 issues of The MagPi magazine. The game stops when either you
complete the two runs or you run out of magazines. You get to see the total delivered at
the end, along with a round of applause. Figure 6 shows Santa on his return run
adding another magazine to those already delivered.
Next month, in part two, we will look at using two shakers. So get another tilt switch
while you are at it, to make more shaking fun.