Spiele in Python programmieren

Die Abende werden länger und die Tage kühler und feuchter. Zeit also, um vom Fahrrad abzusteigen und sich mehr dem Computer und Python zu widmen.

Eine Veranstaltung der “Linux User Group Landau” weckte mein Interesse an der Programmierung von grafischen Computerspielen, aber von der dort vorgestellten Variante “Programmierung in Scratch” (Scratch ist übrigens auf dem Raspberry Pi vorinstalliert) kam ich recht schnell auf die Idee, mein Python auf dem Raspberry mal in Richtung Spiele auszuprobieren.

Grafische Spiele waren noch nie mein Gebiet, weder als Programmierer noch als Spieler. Und mit dieser Art Grafik hatte ich auch noch keine Erfahrung.

Bis jetzt kannte ich die “Tkinter“-Bibliothek von Python, mit der man recht einfach feld- und gruppenorientierte Ein- und Ausgabemasken erstellen kann. Zusätzlich noch Schaltflächen, Rähmchen und farbliche Effekte. Für Spiele ist das wohl eher nicht ausreichend. Auch die “turtle“-Bibliothek zum Zeichnen war nicht so richtig vielversprechend. Dann kannte ich die “Matplotlib“-Bibliothek, die aber eher zum Erstellen von Diagrammen und zum Plotten von Funktionen geeignet ist. Man kann mit dieser Bibliothek auch ganze SW- und Farbbilder plotten. Aber auch diese Erweiterung ist nicht so richtig zum Spielen geeignet.

Beim Stöbern findet man dann sehr schnell die Programmbibliothek “Pygame“, die eine grafische Ausgabe in 2D für Spiele anbietet, die Objekte animiert und die Steuerung mit der Maus unterstützt.

Pygame konnte ich ohne Probleme auf meinem Raspberry in Verbindung mit dem Python 3.4 installieren und auch über mein VNC-Tool entwickeln und steuern. Die Geschwindigkeit lässt allerding bei einer solchen Terminalemulation Wünsche offen, man gönnt dem Raspi dann schon mal einen echten Bildschirm, eine echte Maus und eine echte Tastatur.

Was gehört alles zu dieser Bibliothek?

Man kann Flächen (surface-Objekte) definieren, diese mit Inhalten füllen und dann diese Flächen auf den Bildschirm ausgeben. Mögliche Inhalte wiederum sind andere Flächen, Bilder (jpeg, gif, tiff, bmp), kleine Objekte und Text. Die Flächen sind bei Pygame immer Rechtecke, die man mit einer Geschwindigkeit / Richtung (x, y) vorbelegen kann und die dann vom System automatisch entsprechend der Bildwechselrate bewegt werden. Man kann diesen Objekten jederzeit neue Parameter zuweisen, sie aus dem Spiel nehmen oder neu ins Spiel bringen. Zusätzlich gibt es noch eine Funktion “Collissiondetection”, die im Spielebereich auch hilfreich ist. Damit kann man feststellen, ob sich Objekte berühren, sich überschneiden oder am Bildschirmrand anstoßen. Im Farbbereich wird zusätzlich mit dem 4. Farbkanal “transparent” gearbeitet, damit man Objekte leicht vor oder hintereinander zeigen kann. Und man kann für den Siegertusch Tondateien wiedergeben. Von der Eingabeseite wird ereignisgesteuert die Maus, die Tastatur und die “collisions” gründlich überwacht und entsprechend an das Programm gemeldet.

Damit hat man einen Werkzeugkasten, der viele einzelne Anforderungen bei der Programmierung typischer 2D-Spiele abdeckt. Da kann man seine Python-Kenntnisse einbringen und verbessern.

Mein erstes Spiel hatte sich bewegende Bälle (Ping-Pong) und einem Kollisionspunkt in der Mitte des Spielfelds. Mein zweites Projekt war das Logikrätsel “Hashi/Bridges”, wobei aber keine bewegte Grafik zum Einsatz kam, aber die Maus aktiv zum Spielen gebraucht wird.

Ich könnte mich für den Hausgebrauch mal an “Mastermind” und/oder “Tetris” versuchen.

Ein passende Buchempfehlung: Al Sweigart, Eigene Spiele programmieren – Python lernen