Benutzer-Werkzeuge

Webseiten-Werkzeuge


python:pgzero:projekt1

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:

  1. Das Programm besitzt den folgenden Aufbau und man ruft es mit dem Pythoninterpreter auf:
    import pgzrun
     
    # Hier steht das Programm.
     
    pgzrun.go()
  2. 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.

Die Spielfigur zufällig platzieren

Bisher ist das Spiel noch recht langweilig, weil Homer immer auf der selben Position erscheint. Im nächsten Schritt soll nun Homer bei jeden Treffer neu platziert werden.

Schreibe die folgende Anweisung an den Anfang deiner Datei:

from random import randint

Ändere die Funktion place_homer() wie folgt ab:

def place_homer():
    homer.x = randint(10, 800)
    homer.y = randint(10, 600)

Füge nach der Anweisung print("Treffer!") die Anweisung place_homer() ein:

        ...
        print("Treffer!")
        place_homer()
        ...

Mit der ersten Zeile wird der Zufallszahlengenerator importiert. Mit der veränderten Funktion place_homer() wird die Spielfigur an einer zufälligen Stelle des Bildschirms platziert. Nach jedem Treffer wird die Funktion aufgerufen und Homer erscheint an einer anderen stelle des Bildschirms.

Hier seht ihr das fertige Programm:

projekt1.py
import pgzrun
 
from random import randint
 
homer = Actor("homer.png")
 
def draw():
    screen.clear()
    homer.draw()
 
def place_homer():
    homer.x = randint(10, 800)
    homer.y = randint(10, 600)
 
def on_mouse_down(pos):
    if homer.collidepoint(pos):
        print("Treffer!")
        place_homer()
    else:
        print("Daneben!")
        quit()
 
place_homer()
 
pgzrun.go()

Erklärvideo

Aufgaben

Aufgabe 1

Verändere das Programm so, dass es auch bei „Daneben!“ weiterläuft. Es kann dann nur durch das Schließen des Fensters beendet werden.

Aufgabe 2

Führe eine Variable treffer ein, die die Anzahl der Treffer zählt. Sie muss zu Beginn des Programms im Hauptprogramm auf 0 gesetzt werden.

Wenn nun Homer getroffen wurde, soll die Variable soll um 1 erhöht werden. Um eine globale Variable in einer Funktion zu ändern, muss sie in der Funktion als global deklariert werden. (https://www.python-kurs.eu/python3_global_lokal.php)

Letztendlich soll in der print-Anweisung hinter Treffer noch die Anzahl der bisherigen Treffer ausgegeben werden.

Aufgabe 3

Schreibe ein eigenes Programm!

Führe andere ähnliche Spielfiguren (https://icons8.de/icon/set/characters/color) ein und passe die Hintergrundfarbe (https://pygame-zero.readthedocs.io/de/latest/introduction.html#einen-hintergrund-zeichnen) an, um den Spieler zu verwirren. Nur wenn auf eine bestimmte Figur geklickt wird (hier der Grinch) wird ein Treffer gezählt.


Hier können Fragen zum Inhalt der Seite gestellt werden.

Geben Sie Ihren Kommentar ein. Wiki-Syntax ist zugelassen:
E M P C P
 
python/pgzero/projekt1.txt · Zuletzt geändert: 2024/03/12 09:24 von lutz