Appearance
7 — Erstes Spiel
Nun wollen wir ein erstes funktionierendes Spiel programmieren. Die Spielidee ist die folgende:
- Die Spielfigur kann frei auf dem Spielfeld gesteuert werden.
- An einer zufälligen Position erscheint ein Gegenstand, der aufgelesen werden muss.
- Wird der Gegenstand aufgelesen, so erhält man einen Punkt und einen Zeitbonus. Der Gegenstand wird wieder zufällig positioniert.
- Wenn die Zeit abgelaufen ist, ist das Spiel vorbei.
7.1 — Steuerbare Figur
✏️ Aufgabe 7.1 — Steuerbare Figur
- Erstellen Sie ein neues Python-Programm, welches eine Spielfigur darstellt, welche mit der Tastatur gesteuert werden kann.
- Die Figur soll am Anfang in der Mitte des Fensters stehen.
- Definieren Sie eine Variable
lara.geschwindigkeit, welche angibt, um wie viel Pixel sich die Figur 3bewegt, wenn man eine Taste drückt. - Entscheiden Sie sich für ein Verhalten am Fensterrand um programmieren Sie dies.
- Die Figur kann nicht über den Fensterrand hinaus gehen.
- Die Figur erscheint auf der anderen Seite des Fensters, wenn sie über den Rand hinaus läuft.
7.2 — Zufällige Position
In der Bibliothek random stehen Unterprogramme zu Verfügung, mit welchen Zufallszahlen erzeugt werden können. Zunächst muss die Bibliothek importiert werden:
import random
Nun kann mit random.randrange(n) eine Zufallszahl zwischen 0 und n erzeugt werden.
Um eine Figur zufällig im Fenster zu positionieren, können wir also folgendes schreiben:
python
import random
pizza.x = random.randrange(WIDTH)
pizza.y = random.randrange(HEIGHT)✏️ Aufgabe 7.2 — Gegenstand
Erweitern Sie das Programm um den Gegenstand, der aufgelesen werden soll. Der Gegenstand soll an einer zufälligen Position im Fenster erscheinen.
7.3 — Kollision
figur1.colliderect(figur2)
überprüft, ob figur1 mit figur2 kollidiert. Dies kann als Bedingung für eine Bedingte Ausführung verwendet werden:
python
if figur1.colliderect(figur2):
# hier passiert etwas✏️ Aufgabe 7.3 — Gegenstand aufnehmen
Erweitern Sie das Programm, sodass der Gegenstand an eine andere zufällige Position gesetzt wird, sobald die Figur den Gegenstand berührt.
7.4 — Punkte zählen und darstellen
Um Punkte zu zählen muss der Figur eine neue Variable punkte hinzugefügt werden. Dies geschieht direkt nachdem die Figur erzeugt wird.
python
figur = Actor("figur_01.png")
figur.punkte = 0Die Punkte müssen im Unterprogramm draw dargestellt werden. Dazu wird ein neuer Befehl verwendet:
python
def draw():
screen.draw.text("Punkte: " + str(figur.punkte), left=10, top=30, fontsize=40)✏️ Aufgabe 7.4 — Punkte zählen
Erweitern Sie das Programm, sodass die Anzahl Punkte gezählt und dargestellt werden.
- Definieren Sie die Variable
punktein Ihrer Figur. - Stellen Sie im Unterprogramm
drawmit dem oben stehenden Befehl die Punkte dar. - Erhöhen Sie die Punkte um eins, wenn ein Gegenstand aufgelesen wird.
7.5 — Zeitlimit
✏️ Aufgabe 7.5 — Zeitlimit
Erweitern Sie das Programm, sodass die verbleibende Zeit gezählt und dargestellt wird.
- Definieren Sie die Variable
zeitin Ihrer Figur und setzen Sie die Variable auf den Wert 10 (Sekunden). - Subtrahieren Sie in jedem Animationsschritt, also wenn das Unterprogramm
updateaufgerufen wird, 1/60 von der Zeit. - Stellen Sie im Unterprogramm
drawdie verbleibende Zeit dar. - Erhöhen Sie die Zeit um eins, wenn ein Gegenstand aufgelesen wird.
Da die Variable zeit eine Dezimalzahl enthält, sieht die Darstellung nicht sehr schön aus. Um die Zeit auf ganze Sekunden zu runden, kann die Funktion int() verwendet werden. Sie konvertiert die Zahl in eine ganze Zahl (engl. integer).
Um die Zeit auf Zehntelssekunde zu runden, wird zuerst die Zeit mit 10 multipliziert, dann in eine ganze Zahl umgewandelt und schliesslich wieder durch 10 dividiert:
python
sec = int(lara.zeit * 10) / 107.6 — Game Over
Nun soll das Spiel anhalten, wenn die Zeit abgelaufen ist. «Anhalten» bedeutet, dass keine Aktionen mehr passieren. Mit anderen Worten: Die Befehle im Unterprogramm update sollen nicht mehr ausgeführt werden.
Dies kann erreicht werden, indem das Unterprogramm frühzeitig abgebrochen wird. Mit dem Befehl return kann ein Unterprogramm sofort abgebrochen werden.
Also wird am Anfang des Unterprogramms überprüft, ob die Zeit abgelaufen ist. Falls ja, wird das Unterprogramm abgebrochen:
python
def update():
if lara.zeit < 0:
return
# andere Befehle✏️ Aufgabe 7.6 — Game Over
Erweitern Sie das Programm, sodass das Spiel beendet wird, wenn die Zeit abgelaufen ist.
- Bauen Sie die oben stehenden Code am Anfang des Unterprogramms
updateein. - Erweitern Sie das Unterprogramm
draw, sodass «Game Over» angezeigt wird, wenn die Zeit abgelaufen ist.
7.7 — Zeitbalken
Mit dem folgenden Befehl wird ein Rechteck gezeichnet. Die obere linke Ecke liegt bei den Koordinaten (x, y), es hat die angegebene Breite und Höhe und wird mit der angegebenen Farbe ausgefüllt.
screen.draw.filled_rect(Rect(x, y, breite, höhe), color=farbe)⭐️ Zusatzaufgabe 7.7 — Zeitbalken
Stellen Sie die verbleibende Zeit mit Hilfe des oben stehenden Befehls zusätzlich als Balken dar.