Veel Raspberry Pi-projecten beginnen om er iets van te leren. Dat was ook het geval met dit Space invaders spelletje voor de Raspberry Pi. Na de aanschaf van een RGB-matrix voor de Raspberry Pi, borrelde rond de kerstdagen van 2020 het idee op om het display te gebruiken voor het bedienen van een eenvoudig retro spel: Space invaders.

Auteur: Manuel Martín-Ortiz    |   Gepubliceerd in Linux Magazine 2, 2021

Het doel bij het ontwikkelen van dit spel was om een RGB-matrix aan te sluiten op een Raspberry Pi en om er een eenvoudig retro-videospel mee te maken, vanaf scratch en zonder een framework te gebruiken. Het spel zou op de RGB LED-matrix moeten draaien, maar je zou het daarnaast gewoon op de opdrachtregel willen bedienen.

Hardware

Het proces begint met shoppen. Ik geef links naar de producten die gebruikt zijn, maar je bent zelf vrij de hardware te kopen in de winkel van jouw voorkeur. Naast de Raspberry Pi 4 heb je een RGB Led Matrix nodig, een bijpassend controller board en voeding. De USB-game controller, die er uitziet als een retro SuperNes-controller, heb ik gevonden in een tweedehands winkel. Het aansluiten van deze componenten licht ik hier verder niet toe, dat is niet ingewikkeld.

Benodigde software

Er zijn weinig apps gebruikt. Er is gebruik gemaakt van Python 3 en de RGD Led matrix-bibliotheek om te testen of de Led-matrix functioneert. Verder is een IDE nodig. In mijn geval heb ik gekozen voor Visual Studio Code. In mijn dagelijkse programmeerleven gebruik ik PyCharm, maar ik hoorde zoveel goede dingen over Visual Studio Code, dat dit het perfecte moment was om eens met nieuwe tools te experimenteren. Persoonlijk is voor mij PyCharm toch wel productiever, maar de mogelijkheid om op afstand vanaf een laptop software te ontwikkelen voor de Raspberry Pi, is ook wel opmerkelijk.

De Flaschen Taschen-server

De RGB Matrix-bibliotheek moet als root worden uitgevoerd om toegang te krijgen tot de timer van de Raspberry Pi. Ik had problemen om het spel als root uit te voeren en toegang te krijgen tot de joystick, dus ik heb wat moeten zoeken naar oplossingen en deze heb ik gevonden op Github.

  1. Start een server (als root) die naar specifieke berichten luistert en de afbeeldingen op het scherm toont.
  2. Start het spel met een gewoon account en stuur de sprites naar de server. Er moet eerst aan enkele dependencies worden voldaan:
sudo apt-get install libatlas-base-dev

Vervolgens kan de server worden gekloond en gebouwd:

git clone --recursive https://github.com/hzeller/flaschen-taschen.git
cd flaschen-taschen/server
make FT_BACKEND=rgb-matrix

De parameters voor het draaien van de server kunnen variëren afhankelijk van de Raspberry die de software draait (zie de parameter –led-slowdown-gpio) en de positie van de RGB Matrix (zie –-led-pixel-mapper). De volgende parameters zijn voor een 64×64 RGB Led Matrix die draait op een Raspberry Pi 4. De rotatie is voor mijn aangepaste plek van de matrix op mijn bureau.

cd flaschen-taschen/server
sudo ft-server --led-rows=64 --led-cols=64 --led-slowdown-gpio=4 --led-pixel-mapper="Rotate:270"

Ook zonder RGB Led Matrix, kun je het spel nog steeds spelen. Zorg er dan voor dat je de Flaschen taschen-server compileert om de commandline als backend te gebruiken – zoals beschreven op de website – en laat de server vervolgens draaien met de volgende parameters:

cd flaschen-taschen/server
ft-server -D 64x64

Als het spel te groot is voor je scherm, gebruik dan de –hd-terminal optie.

 De project dependencies

  1. Creëer een virtuele omgeving voor je project.

Dat is altijd wel een goede gewoonte. Je moet python3-venv de eerste keer installeren met sudo apt python3-venv.

python3 -m venv venv
  1. Activeer de omgeving met:
# for bash:
source venv/bin/activate.sh

# for fish: 
. venv/bin/activate.fish

Ken je fish niet? Kijk dan eens bij de links om hier kennis mee te maken.

  1. Installeer de vereisten
pip install -r requirements.txt

Nu ben je klaar om te beginnen, voer python main.py uit!

python3 -m venv venv

Voor het ontwerp van de sprites heb ik pixelorama gebruikt, waarbij ik het project als een animatie in meerdere bestanden heb geëxporteerd. De code spreekt hopelijk voor zich.

Zelf bijdragen?

Dit was een leuk hobby-project voor de kerstdagen van 2020, omdat ik wilde leren hoe je een game moest coderen voor de bijzondere LED-matrix. Maar het kan altijd beter. Voel je vrij om uitbreidingen en verbeteringen te maken. Fork dan deze repo.

Over Martin

‘Na het afronden van mijn studie Kunstmatige Intelligentie begon ik te werken in het vakgebied van de robotica en later heb ik de stap gemaakt richting Data Sciene. Ik werk met Python, Linux en heel veel opensource-software. In mijn vrije tijd experimenteer ik graag met maker-projecten, vooral om er van te leren. Dit projectje had een doorlooptijd van een week, in de kerstvakantie. Ik wilde als studieobject al heel lang een videospel vanaf scratch maken zonder raamwerk. De LED Matrix, een oud gamepad en mijn Raspberry Pi gaven me de perfecte kans.’

 

 

Links:

– Space invaders repo – https://github.com/mmartinortiz/rgb-led-matrix-space-invaders

– RGB Led Matrix – www.elektor.nl/joy-it-64×64-rgb-led-matrix-module

– Controller board voor de RGB Led matrix – www.elektor.nl/joy-it-raspberry-pi-controllerboard-for-rgb-led-matrix

– Voeding voor de RGB Led Matrix – https://etronixcenter.com/nl/led-transformatoren/8169311-sps36-nedro-dc5v-4a-20w-schakel-stroomadapter-driver-transformator-7110218614005.html

– PyCharm – https://www.jetbrains.com/pycharm

– Visual Studio Code – https://code.visualstudio.com

– De flaschen-taschen-server – https://github.com/hzeller/flaschen-taschen

– Pixelorama – https://orama-interactive.itch.io/pixelorama

– Fish – https://fishshell.com