Einführung zu Pygame Zero¶
Ein Fenster erzeugen¶
Erzeuge als erstes eine leere Datei mit dem Namen intro.py
.
Stelle durch den Befehl
pgzrun intro.py
sicher, dass das Programm ausgeführt wird und ein leeres Fenster erzeugt. Alternativ kannst du das auch in deiner IDE testen.
Du kannst das Spiel beenden, indem du auf die Schließen-Schaltfläche des Fensters oder die Taste
Ctrl-Q
(⌘-Q
beim Mac) drückst. Wenn das Spiel nicht mehr reagiert, kann es sein, dass du es durch Drücken von Ctrl-C
im Terminal-Fenster beenden musst.
Einen Hintergrund zeichnen¶
Als nächstes wollen wir die Funktion draw()
hinzufügen und die
Fenstergröße setzen. Pygame Zero ruft diese Funktion immer dann auf, wenn der Bildschirm neu gezeichnet werden muss.
Füge folgenden Code in intro.py
hinzu:
1 2 3 4 5 | WIDTH = 300 HEIGHT = 300 def draw(): screen.fill((128, 0, 0)) |
Führe pgzrun intro.py
erneut aus. Der Bildschirm sollte jetzt ein rotes
Quadrat zeigen!
Was tut dieser Code genau?
WIDTH
und HEIGHT
bestimmen die Breite und Höhe deines Fensters. Der Code
setzt die Größe des Fensters auf 300 Pixel für beide Dimensionen.
screen
ist ein vorgegebenes Objekt, dass das angezeigte Fenster
repräsentiert. Es hat eine
Reihe an Methoden zum Malen von Sprites und Formen. Die Methode
screen.fill()
befüllt den Bildschirm einfarbig,
in der Farbe mit dem Farbtupel (rot, grün, blau)
. (128, 0, 0)
wird zu einem
mittleren Rot-Ton. Ändere die Werte mit Zahlen zwischen 0 und 255 und schaue,
welche Farben du erzeugen kannst.
Jetzt werden wir eine Figur (Sprite) hinzufügen, die wir animieren können.
Eine Figur (Sprite) zeichnen¶
Bevor wir eine Figur (ein Alien) zeichnen können, müssen wir diese Alien-Figur speichern. Du kannst hier mit der rechten Maustaste klicken und das Bild speichern („Bild speichern unter…“).
(Diese Figur hat einen Transparenz- (oder „alpha-“) Kanal, der für Spiele großartig ist! Allerdings ist sie für einen dunklen Hintergrund gezeichnet worden. Es kann also sein, dass du den Helm des Aliens erst siehst, wenn er im Spiel dargestellt wird.)
Tipp
Du findest viele kostenlose Sprites, einschließlich diesem auf kenney.nl. Das Alien-Bild stammt aus Platformer Art Deluxe pack.
Du musst die Datei am richten Ort speichern.
Erstelle ein Verzeichnis namens images
und speichere das Bild dort unter
alien.png
(alles kleingeschrieben!).
Wenn du das erledigt hast, sollte dein Projektverzeichnis so aussehen:
.
├── images/
│ └── alien.png
└── intro.py
images/
ist das Standardverzeichnis, in dem Pygame Zero Bilder sucht.
In Pygame Zero gibt es ein Klasse namens Actor
, die benutzt werden kann,
um Sprites auf dem Bildschirm zu zeichnen.
Ändere die Datei intro.py
wie folgt ab:
1 2 3 4 5 6 7 8 9 | alien = Actor('alien') alien.pos = 100, 56 WIDTH = 500 HEIGHT = alien.height + 20 def draw(): screen.clear() alien.draw() |
Auf dem Bildschirm sollte jetzt ein Alien erscheinen! Durch die Angabe des Strings 'alien'
in der Actor
Klasse, lädt Pygame Zero automatisch das entsprechende Bild
(inkl. der Attribute wie Position, etc.). So können wir beispielsweise die Höhe des Fensters
entsprechend der Höhe des Alien-Sprites setzen.
Die Funktion alien.draw()
zeichnet das Alien an seiner aktuellen Position auf den Bildschirm.
Figuren bewegen¶
Wir wollen das Alien in die linke obere Ecke des Bildschirms setzen; dazu ändern wir den Code wie folgt:
alien.x = 10
alien.y = 10
Mithilfe der x- und y-Koordinate können wir das Alien an eine beliebige Position setzen. Hier setzen wir die Figur in die linke obere Ecke. Jetzt wollen wir das Alien bewegen; dazu ändern wir den Code wie folgt:
def update():
alien.left += 2
if alien.left > WIDTH:
alien.right = 0
Pygame Zero ruft die Funktion update()
automatisch in jedem Frame auf. Indem wir das Alien
in jedem Frame etwas verschieben, sieht es so aus, als ob sich das Alien bewegt. Wenn es links aus dem Bildschirm läuft,
erscheint es wieder von rechts.
Die Funktionen draw()
und update()
arbeiten in ähnlicher Art und Weise, sind aber für unterschiedliche Zwecke gedacht.
DIe draw()
Funktion zeichnet das Alien an seiner aktuellen Position. Die Funktion update()
wird benutzt, um das Alien zu bewegen.
Tastatur- und Mauseingaben verarbeiten¶
Nun wollen wir auf Tastatur- und Mauseingaben reagieren. Dazu müssen wir die Funktion on_mouse_down()
implementieren. Füge folgenden Code hinzu:
1 2 3 4 5 | def on_mouse_down(pos): if alien.collidepoint(pos): print("Eek!") else: print("You missed me!") |
Starte das Spiel und versuche auf das Alien (mit der linken Maustaste) zu klicken.
Musik und Bilder hinzufügen¶
Wenn wir auf das Alien klicken, soll es verletzt sein. Dazu wollen wir das Bild des Alien-Sprites ändern. Speichere die folgenden Dateien:
- alien_hurt.png - speichere die Datei
alien_hurt.png
in das Verzeichnisimages
. - eep.wav -erstelle ein Verzeichnis namens
sounds
und speichere die Dateieep.wav
in dem Verzeichnis
Wenn du das erledigt hast, sollte dein Projektverzeichnis so aussehen:
.
├── images/
│ └── alien.png
│ └── alien_hurt.png
├── sounds/
│ └── eep.wav
└── intro.py
sounds/
ist das Standardverzeichnis, in dem Pygame Zero Musik sucht.
Wir wollen die Funktion on_mouse_down
so anpassen, damit wir die neuen Dateien verwenden:
def on_mouse_down(pos):
if alien.collidepoint(pos):
alien.image = 'alien_hurt'
sounds.eep.play()
Wenn du jetzt auf das Alien klickst, erscheint das neue Bild alien_hurt
und es ertönt ein Ton.
In unserem Spiel gibt es allerdings noch einen kleinen Fehler… Das Alien wechselt nicht mehr zurück zu seinem alten Bild. Das wollen wir als nächsten ändern!
Die Uhr benutzen¶
Pygame Zero hat eine eingebaute Klasse Clock
, die dafür sorgt, dass Funktionen später ausgeführt werden.
Zuerst wollen wir ein kurzes Refactoring
(d.h. wir reorganisieren unseren Code, um ihn lesbarer zu machen). Wir können Funktionen schreiben, um das Alien verletzt bzw. normal zu setzen:
1 2 3 4 5 6 7 8 9 10 11 12 | def on_mouse_down(pos): if alien.collidepoint(pos): set_alien_hurt() def set_alien_hurt(): alien.image = 'alien_hurt' sounds.eep.play() def set_alien_normal(): alien.image = 'alien' |
Das ändert an unserem Programm noch nichts, da set_alien_normal()
noch nicht aufgerufen wird. Wir wollen die beiden Funktionen nutzen, damit das Alien nach einem kurzen Augenblick wieder in den normalen Zustand zurück gesetzt wird.:
def set_alien_hurt():
alien.image = 'alien_hurt'
sounds.eep.play()
clock.schedule_unique(set_alien_normal, 0.5)
clock.schedule_unique()
ruft set_alien_normal()
ca. 0.5
Sekunden später auf. schedule_unique()
sorgt auch dafür, dass das nicht mehrfach geschieht, z.B. wenn du mehrfach auf das Alien klickst.
Probier es aus!
Zusammenfassung¶
Wir haben jetzt gelernt, wie man Sprites lädt und zeichnet, Musik abspielt, Tastatur- und Mauseingaben verarbeitet und die eingebaute Uhr benutzt. Damit beherrschen wir die ersten Schritte mit Pygame Zero! War doch gar nicht so schwierig, oder?
Ihr wollt euer Spiel noch weiterentwickeln?
Es gibt noch eine Vielzahl an weiteren Funktionen in Pygame Zero, die sehr einfach zu benutzen sind. Lies dazu built in objects (Achtung, auf Englisch!), um den Rest von Pygame Zero zu entdecken.