4
06
Moorhuhn
Kapitel
15
Die Spiellogik
Versuchen wir jetzt ansatzweise, die Spiellogik einzurichten. Das Spiel soll
auf zwei Arten von Ereignissen reagieren:
0
auf Drücken der Leertaste mit einem neuen Spiel, aber nur wenn nicht
gerade ein Spiel im Gange ist; wir werden am Anfang eines Spiels die
Leertaste deaktivieren und sie am Ende wieder aktivieren.
0
auf Mausklick mit der linken Maustaste mit einem Schuss, aber nur
wenn das Spiel noch im Gange ist, d. h. noch nicht alle Schüsse abge-
geben wurden. Wir werden also am Anfang des Spiels den Bildschirm-
Klick aktivieren und ihn am Ende des Spiels deaktivieren.
Das könnte so gehen:
class MoorhuhnSpiel:
...
def schuss(self, x, y):
"""Wird bei Mausklick auf das Grafikfenster
aufgerufen, wenn das Spiel läuft.
"""
def spiel(self):
self.screen.onkeypress(None, "space")
self.screen.onclick(self.schuss)
### Spiel ausführen ###
### ...
self.screen.onclick(None)
self.screen.onkeypress(self.spiel, "space")
def run(self):
self.melde("Start mit Leertaste!")
self.screen.onkeypress(self.spiel, "space")
self.screen.listen()
>
Füge diesen Code in die Klasse
MoorhuhnSpiel
ein und vergewissere
dich, dass das Spiel ausführbar bleibt.
Beachte, dass an das Mausklick-Ereignis die Methode
self.schuss()
gebunden wird, die zwei (freie) Parameter,
x
und
y
, hat, wie es erforderlich
ist – obwohl wir noch nicht wissen, ob wir diese brauchen werden. In glei-
cher Weise ist die parameterfreie Methode
self.spiel()
an den Tasten-
druck auf die Leertaste gebunden.
4
07
Die Spiellogik
Solange
schuss()
und
spiel()
nichts tun, können wir nicht feststellen,
ob das funktioniert. Also fügen wir ein Minimum an Aktion hinzu: Wir zäh-
len die Schüsse. Nach fünf Schüssen soll das Spiel aus sein. Ein paar Kom-
mentare helfen uns sicher, im Folgenden den Überblick nicht zu verlieren.
def schuss(self, x, y):
"""...
"""
self.schuesse = self.schuesse + 1
self.melde("SCHUSS {0}".format(self.schuesse))
def spiel(self):
# Initialisierung
self.screen.onkeypress(None, "space")
self.screen.onclick(self.schuss)
self.melde("SPIEL LÄUFT!")
self.schuesse = 0
# Ausführung
while self.schuesse < 5:
print("*", end=
" ")
# damit etwas Zeit vergeht
self.screen.onclick(None)
# Abschluss und Ergebnis
self.screen.onkeypress(self.spiel, "space")
self.melde("DAS SPIEL IST AUS! - Leertaste!!!")
Wie verläuft
spiel()
in dieser Fassung? Zuerst erscheint die Meldung
»Spiel läuft!« Das Attribut
self.schuesse
dient der Spielkontrolle: Es
wird zunächst auf
0
gesetzt und dann mit jedem Schuss erhöht. Wenn es
5
erreicht hat, ist das Spiel – mit einer dementsprechenden Meldung – aus.
Und: Du kannst auch gleich ein neues Spiel mit der Leertaste starten!
>
Füge diese Codezeilen für die Methoden
spiel()
und
schuss()
der
Klasse
MoorhuhnSpiel
ein.
>
Speichere das Programm und teste es: Starte es durch Drücken der
Leertaste und schieße es durch Klicken mit der Maus in das Grafik-
Fenster.
Wie ist der Test verlaufen? Hast du dich überzeugt, dass die Leertaste wäh-
rend des Spiels nicht aktiv ist? Und die Maus nur während des Spiels, aber
nicht vorher und auch nicht nachher? Bei mir war alles o.k.

Get Python für Kids now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.