4
08
Moorhuhn
Kapitel
15
>
Wenn auch bei dir alles funktioniert, speichere eine Kopie als
moor-
huhn01.py
ab. Wenn in der weiteren Entwicklung etwas schiefgehen
sollte, kannst du auf diese Version zurückgreifen.
Das Spiel funktioniert zwar bis jetzt richtig, aber mit den Schüssen gibt es
natürlich noch ein kleines Problem: Es fehlt ihnen das Ziel: die Moorhühner.
Deshalb sollten wir uns nun diesen zuwenden.
Die Klasse »Huhn«
Unsere technischen Vorbereitungen vom Anfang des Kapitels legen nahe,
die Klasse
Huhn
von der Klasse
Turtle
abzuleiten. Damit können die Hüh-
ner alles, was Turtles auch können.
Wenn wir Moorhühner im Computerprogramm abbilden oder modellieren,
interessieren uns natürlich nur die Eigenschaften, die für das Spielgesche-
hen eine Rolle spielen. Beispielsweise interessieren wir uns nicht für das
Alter der Moorhühner.
0
Welche
Eigenschaften
der Moorhühner sind also für das Moorhuhn-
Spiel wichtig? Erstens haben sie eine Geschwindigkeit – gegeben durch
zwei Zahlen
vx
und
vy
. Zweitens können sie von einer Kugel getroffen
worden und daher tot sein. Das können wir mit einer booleschen Vari-
ablen als
Attribut
beschreiben.
0
Welche
Fähigkeiten
der Moorhühner sind für das Moorhuhn-Spiel wich-
tig? Ein Moorhuhn muss links am Grafikfensterrand erscheinen. Dort
soll es eine aus passenden Bereichen zufällig gewählte Position und Ge-
schwindigkeit erhalten. Es wäre ja urlangweilig, wenn alle Hühner auf
der gleichen Bahn flögen. Und sie sollen natürlich nicht tot sein. Wir
können Moorhühner, die das Fenster verlassen, weiterverwenden, indem
wir sie mit einer Methode
zumstart()
schnell und ungesehen zum lin-
ken Fensterrand bewegen.
0
Ein Moorhuhn muss einen Bewegungsschritt ausführen und immer wie-
der wiederholen können. Dies werden wir mit einer
Methode
schritt()
realisieren.
0
Und dann ist da noch die Turtle-Shape wichtig. Bei unserem Spiel soll
sie ein Bildchen aus einer
gif
-Datei sein. Das machen wir wie weiter
vorn in der interaktiven Sitzung gezeigt.
Aus dieser Beschreibung ergibt sich zunächst folgende Klassendefinition
von
Huhn
. (Die
import
-Anweisung gehört natürlich an den Anfang des
Programms!)
4
09
Die Klasse »Huhn«
from turtle import Screen, Turtle
import random
# ...
class Huhn(Turtle):
"""Objekte dieser Klasse sind Moorhühner im
Moorhuhn-Spiel. Sie 'fliegen' geradlinig und -
wenn getroffen - auf einer Parabelbahn.
"""
def __init__(self, bilddatei):
Turtle.__init__(self, bilddatei)
self.hideturtle()
self.penup()
self.speed(0)
def zumstart(self):
self.hideturtle()
self.setpos(-340, random.randint(-120,120))
self.vx = random.randint(6,11)
self.vy = random.randint(-3,3)
self.showturtle()
self.tot = False
def schritt(self):
x, y = self.position()
x = x + self.vx
y = y + self.vy
self.goto(x,y)
>
Füge den Code der
Huhn
-Klasse in
moorhuhn_arbeit.py
ein.
Ob diese Methoden ausreichen, wird sich herausstellen, wenn wir in der
MoorhuhnSpiel
-Methode
spiel()
die Hühnersteuerung programmieren.
>
Zunächst wollen wir jedoch im Konstruktor von
MoorhuhnSpiel
die
Hühner für das Spiel erzeugen. Füge dort folgende Zeile ein:
class MoorhuhnSpiel:
def __init__(self):
...
self.schreiber.pencolor("yellow")
# Die Moorhühner
4
10
Moorhuhn
Kapitel
15
self.huehner = (Huhn("huhn01.gif"),
Huhn("huhn02.gif"))
...
Damit hast du ein Tupel von zwei Moorhühnern in das Spiel eingebaut. Die
sollten nun natürlich in der Methode
spiel()
auch gebraucht werden.
Beim Spielanfang müssen sie zum Start gehen und dann
schritt()
-weise
nach rechts fliegen und …
def spiel(self):
# Initialisierung
self.screen.onkeypress(None, "space")
self.screen.onclick(self.schuss)
self.melde("SPIEL LÄUFT!")
self.schuesse = 0
for huhn in self.huehner:
huhn.zumstart()
# Ausführung
while self.schuesse < 5:
for huhn in self.huehner:
huhn.schritt()
self.screen.onclick(None)
...
>
Beachte, dass die Zeile mit dem
print()
-Aufruf gelöscht wurde.
Wird nicht mehr gebraucht! Speichere das Programm und führe es
auch aus.
Es funktioniert zwar ohne Fehlermeldungen, unsere Hühner fliegen eifrig,
kommen aber leider nicht von selbst zum Start zurück, wenn sie rechts,
oben oder unten verschwunden sind. Das müssen wir reparieren. Dazu
müssen wir aber die Hühner fragen können, ob sie das Grafik-Fenster ver-
lassen haben. Wir verpassen ihnen noch eine Methode
raus()
, die uns
True
zurückgibt, wenn sie aus dem Grafik-Fenster raus sind, und
False
sonst:

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.