Spiele selbst programmieren und Spiele-Controller mit wenig Aufwand selbst herstellen - Teil 1
Um nicht aus der Übung zu kommen, mache ich gelegentlich Online-Seminare bei der Raspberry Pi Foundation mit oder schaue mir die vielen Beispiele an, die auf deren Homepage veröffentlicht sind. Auf diese Weise wurde ich auf die Spiele Turtle Race (als Beispiel für das Modul Turtle Graphics) und Pong (als Beispiel für das Modul pygame zero) aufmerksam.
Beim ersten Spiel rennen vier kleine Schildkröten um die Wette; eine Zufallszahl bestimmt jeweils die Schrittweite. Mir fehlte dabei allerdings die Mitwirkung der (bis zu vier) Spieler. Für das zweite Spiel – ein Klon des ersten erfolgreichen Arkade-Game - fehlten mir die Paddles, wie diese Controller seinerzeit genannt und von Atari in großer Stückzahl gefertigt wurden. Die kann man höchstens noch auf einem Flohmarkt zufällig bekommen. Also ´ran ans Werk und selber machen.
Benötigte Hardware
Außer dem benötigten Kabel und einem Analog-Digitalwandler ist auf dem Bild oben links alles abgebildet, was wir für unsere Spiele-Controller benötigen: Ü-Eier (alternativ Sektkorken), Taster und Potentiometer mit 10 kOhm.
Die Bilder sprechen für sich: Ü-Ei oben und unten durchbohren, Ü-Ei öffnen (schade, nichts mehr drin), Taster bzw. Potentiometer einbauen, Kabel durchziehen und anlöten. Ü-Ei wieder schließen. Fertig.
Nun zu dem ersten Spiel, für das die Controller mit den Tastern (buttons) benötigt werden.
Der Aufbau
Zunächst das Schaltbild:
Für die Spiele-Controller mit den Tastern verwende ich die GPIOs 6, 13, 19 und 26, die gegen den nahegelegenen GND-Pin geschlossen werden. So kann ich die Button-Objekte mit den Voreinstellungen von gpiozero instanziieren.
Meine Schildkröten habe ich nach den unvergessenen Teenage Mutant Ninja Turtles, dem Kino-Film der 1990-er Jahre benannt (und deren Namen gehen ja auf die alten italienischen Meister zurück). Damit es auch bei ungleichen Spielern spannend bleibt, spielt der Zufall ein wenig mit. Pro Klick bewegt sich die Schildkröte mit randint(7,9) 7, 8 oder 9 Pixel vorwärts.
Die Software
# Turtle race with four buttons to be pressed as often as possible # Random steps of 7 to 9 units per click # based on projects.raspberrypi.org/en/projects/turtle-race # Empfehlung: Deutsche Projekte unter projects.rapberrypi.org/de-DE/projects # Die Namen in Erinnerung an die unvergesslichen Teenage Mutant Ninja Turtles # und deren Namensgeber, die italienischen Meister import turtle from turtle import Turtle from random import randint from gpiozero import Button from signal import pause Leonstep=0 Rafistep=0 Mickstep=0 Donnystep=0 play=True button1 = Button(6) button2 = Button(13) button3 = Button(19) button4 = Button(26) def Leonforward(): global Leonstep Leonstep=randint(7,9) def Rafiforward(): global Rafistep Rafistep=randint(7,9) def Mickforward(): global Mickstep Mickstep=randint(7,9) def Donnyforward(): global Donnystep Donnystep=randint(7,9) finish=Turtle() finish.penup() finish.goto(200,200) finish.pendown() finish.goto(200,-50) finish.hideturtle() Leon = Turtle() Leon.color("red") Leon.shape("turtle") Leon.penup() Leon.goto(-200,150) Leon.pendown() Rafi = Turtle() Rafi.color("green") Rafi.shape("turtle") Rafi.penup() Rafi.goto(-200,100) Rafi.pendown() Mick = Turtle() Mick.color("blue") Mick.shape("turtle") Mick.penup() Mick.goto(-200,50) Mick.pendown() Donny = Turtle() Donny.color("pink") Donny.shape("turtle") Donny.penup() Donny.goto(-200,0) Donny.pendown() while play: button1.when_pressed = Leonforward if Leonstep!=0: Leon.forward(Leonstep) Leonstep=0 if Leon.xcor()>200: print("Red Turtle wins") play=False button2.when_pressed = Rafiforward if Rafistep!=0: Rafi.forward(Rafistep) Rafistep=0 if Rafi.xcor()>200: print("Green Turtle wins") play=False button3.when_pressed = Mickforward if Mickstep!=0: Mick.forward(Mickstep) Mickstep=0 if Mick.xcor()>200: print("Blue Turtle wins") play=False button4.when_pressed = Donnyforward if Donnystep!=0: Donny.forward(Donnystep) Donnystep=0 if Donny.xcor()>200: print("Pink Turtle wins") play=False print() print("Distance to finish line:") print("Red Turtle",200-Leon.xcor()) print("Green Turtle",200-Rafi.xcor()) print("Blue Turtle",200-Mick.xcor()) print("Pink Turtle",200-Donny.xcor()) button1.close() button2.close() button3.close() button4.close() turtle.bye()
Hier noch einmal der Link zur Dokumentation von gpiozero:
Viel Spaß beim Nachvollziehen und ggf. Verbessern des Programm-Codes, beim Basteln der Spiele-Controller und natürlich beim Spielen. Im zweiten Teil werde ich zeigen, wie die Spiele-Controller mit den Potentiometern als Paddles eingesetzt werden.
Überraschung für mich beim Herstellen des Bildschirmfotos: Beim Aktivieren des Programms scrot verschwanden die Schildkröten vollständig aus dem aktiven Fenster. Deshalb habe ich dieses Bild mit der Kompaktkamera gemacht. Vielleicht finde ich irgendwann eine Erklärung dafür.
1 Reactie
Tobias
In den Links in den Code-Kommentaren fehlt ein ‘s’ (___ => projects.ra___pberrypi.org/en/projects/turtle-race).
Ansonsten Cooles Projekt, das werde ich mal ausprobieren. Klasse fände ich es, wenn ihr kleine Bundles schnüren würdet, so das man mit einem Klick das passende bestellen kann.
Gruß, Tobias