Projekt 1 - Catch Homer

Im Projekt 1 wollen wir ein Spiel entwickeln, bei dem das Bild einer Spielfigur auf einer zufälligen Stelle auf dem Bildschirm erscheint. Wenn man mit der Maus auf die Spielfigur klickt, soll „Treffer!“ ausgegeben werden. Wenn man daneben klickt, ist das Spiel beendet.

Grundlegendes

Für unser Spiel benötigen wir ein Objekt der Klasse Screen und ein Objekt der Klasse Actor. Das Screenobjekt repräsentiert das Spielfeld. In einem Pygame-Zero-Programm kann immer nur genau ein Screen-Objekt erzeugt werden. Für diese Objekt muss kein Konstruktor aufgerufen werden. Es wird automatisch bei der Verwendung von pgzrun erzeugt.

(Siehe https://pygame-zero.readthedocs.io/de/latest/introduction.html#ein-fenster-erzeugen)

Um ein Pygame-Zero Programm zu starten gibt es zwei Möglichkeiten:

Das Programm besitzt den folgenden Aufbau und man ruft es mit dem Pythoninterpreter auf:

import pgzrun # Hier steht das Programm. pgzrun.go()

Man ruft das Programm (ohne die Anweisungen) direkt mit pgzrun auf, also z.B. pgzrun programm.py.

Wir werden immer die zweite Möglichkeit nutzen. Innerhalb der Entwicklungsumgebung Thonny gibt es dafür eine Einstellung.

Weiterhin benötigen wir in unserm Programm ein Objekt der Klasse Actor. Actor repräsentiert eine Spielfigur. Beim Erzeugen eines Objekts der Klasse Actor wird eine Bilddatei übergeben.

homer = Actor("homer.png")

Die verwendeten Bilder müssen sich in einem Unterverzeichenis images befinden und im png-Format vorliegen.

(Siehe https://pygame-zero.readthedocs.io/de/latest/introduction.html#eine-figur-sprite-zeichnen)

Vorbereitungen

Lege dir einen Ordner (z.B. pygameprojekt1) für dein Projekt an!

Lege in diesem Ordner einen weiteren Ordner mit dem Namen images an!

Kopiere in diesen Ordner ein Bild mit dem namen homer.png. Das Bild sollte ungefähr eine Auflösung von 100×100 Pixel haben. Du kannst es dir z.B. hier (Größe 96px) herunterladen.

Unser Programm

Actor einfügen

Erzeuge im Projektordner eine Datei projekt1.py mit dem folgenden Inhalt:

homer = Actor("homer.png") def draw(): screen.clear() homer.draw()

Starte das Programm durch den Aufruf pgzrun projekt1.py oder mit dem pgzero-Modus von Thonny.

Es müsste das folgende Fenster erscheinen:

mit homer = Actor("homer.png") wird ein Objekt der Klasse Actor angelegt. Die Funktion draw() wird ausgeführt, wenn das Screen-Objekt erzeugt wird. In ihr wird der Bildschirm gelöscht und Homer gezeichnet.

Den Actor an einer bestimmten Stelle platzieren

Füge den folgenden Quelltext unter der Funktion draw() ein:

def place_homer(): homer.x = 300 homer.y = 200 place_homer()

Führe das Programm erneut aus:

Durch die Funktion wird die Position von Homer auf dem Bildschirm bestimmt. Der Ursprung des Koordinatensystems befindet sich in der linken oberen Ecke des Screen-Objekts, die x-Achse verläuft von rechts nach links, die y-Achse von oben nach unten. Die Koordinaten werden in Pixeln angegeben.

Auf den Mausklick reagieren

Füge unter der Definition der Funktion place_homer() den folgenden Quelltext ein:

def on_mouse_down(pos): if homer.collidepoint(pos): print("Treffer!") else: print("Daneben!") quit()

Diese Funktion on_mouse_down(pos) reagiert auf den Mausklick (dann wird sie ausgeführt). An die Funktion wird die x- und die y-Koordinate der Maus übergeben, wenn man mit der Maus auf eine bestimmte Stelle des Screens klickt.

Die Funktion homer.collidepoint(pos) testet, ob sich die übergebene Position innerhalb des Bildes von Homer befindet. In diesem Fall gibt sie True zurück, anderenfalls False.

Die if-Anweisung bewirkt, dass wenn man auf Homer klickt, „Treffer!“ ausgegeben wird, anderenfalls wird „Daneben!“ ausgegeben und das Programm wird beendet.