4
15
Fine tuning Moorhuhn
Ändern wir jetzt noch die Ausgabe am Ende des Spiels so, dass ein Hinweis
angefügt wird, die Leertaste zu drücken. Dazu ist bloß die vorhin auskom-
mentierte Meldung im Abschlussteil der Methode
spiel()
durch folgende
zwei Anweisungen zu ersetzen:
# Abschluss und Ergebnis
self.screen.onkeypress(self.spiel, "space")
self.melde(self.spielstand() +
" - Leertaste drücken!")
>
Teste das Spiel. Wenn es funktioniert, speichere eine Kopie als
moor-
huhn03.py
ab.
Du hast nun bereits ein voll funktionsfähiges
MoorhuhnSpiel
pro-
grammiert. Einige Kleinigkeiten lassen aber noch zu wünschen übrig. Damit
wollen wir uns im Folgenden befassen.
Fine tuning Moorhuhn
Du hast wahrscheinlich beobachtet, dass bei Spielende die letzten beiden
verbleibenden Hühner plötzlich über der Landschaft anhalten – weil fünf
Schüsse abgegeben worden sind. Besser wäre, wenn sie noch weiter, aus
dem Grafik-Fenster raus, flögen. Das lässt sich leicht machen:
So könnte ein Spiel
ausgehen (ich bin
kein besonders
guter Spieler).
4
16
Moorhuhn
Kapitel
15
Das programmieren wir mit zwei pythonesken Feinheiten.
0
Erstens
list-comprehension
:
[huhn.raus() for huhn in self.
huehner]
ist eine Liste. Weil
raus()
eine
Huhn
-Methode ist, die
True
oder
False
liefert, enthält diese Liste nur Wahrheitswerte, und zwar für
jedes Huhn einen.
0
Zweitens hat Python eine Funktion
all()
eingebaut, die eine Liste als
Argument übernehmen kann und nur dann
True
zurückgibt, wenn
alle
Listenelemente wahr sind. (
all
funktioniert auch mit anderen Sequen-
zen und dynamischen Wertevorräten.)
Es ist immer gut, sich solche neuen Dinge mit dem IPI anzusehen, um sich
mehr Klarheit zu verschaffen. Das solltest du dir für deine zukünftige Praxis
als Python-Programmierer merken. Hier zum Beispiel:
>
Mach mit!
>>> 3 < 6 # boolescher Ausdruck
True
>>> [i < 2 for i in range(4)] # list comprehension
[True, True, False, False]
>>> all([i < 2 for i in range(4)])
False
>>> [i < 5 for i in range(4)]
[True, True, True, True]
>>> all([i < 5 for i in range(4)])
True
Zuerst deaktivieren wir die
onclick()
-Bindung, damit sie auf eventuelle
weitere Mausklicks nicht mehr reagieren (
#1
). Solange nicht alle Hühner
raus sind (
#2
), lassen wir sie einfach weitere Schritte machen (
#3
):
def spiel(self):
...
# Ausführung
while self.schuesse < 5:
...
huhn.zumstart()
for huhn in self.huehner:
#1
huhn.onclick(None)
self.screen.onclick(None)
while not all([huhn.raus() for huhn in self.huehner]):
#2
for huhn in self.huehner:
#3
huhn.schritt()

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.