Eigene Funktionen
In diesem Abschnitt lernst Du, eigene Befehle (Funktionen) zu erschaffen. Wenn die eigenen Programme immer größer und größer werden, hilft Dir das, das Programm so zu gestalten, dass Du es nach einer Weile selbst noch verstehst und gezielt weiterentwickeln kannst.Programm zum Ausprobieren
WIDTH = 800
HEIGHT = 600
TITLE = "Kollisionserkennung ändern"
meteorit = Actor("meteorit.png")
meteorit.x = 400
meteorit.y = 200
laser = Actor("laser_ohne_strahl.png")
laser.x=400
laser.y=300
def schuss():
laser.image="laser_mit_strahl.png"
if laser.colliderect(meteorit):
meteorit.image="meteorit_explosion.png"
def on_key_down(key):
if key==keys.RIGHT:
laser.x=laser.x+10
elif key==keys.LEFT:
laser.x=laser.x-10
else:
schuss()
def draw():
screen.blit("sterne.png",(0,0))
laser.draw();
meteorit.draw()
Eigentlich sollte sich das Programm genauso verhalten wie das im Abschnitt vorher. Was also soll der Vorteil sein?
Der Vorteil ist, dass unter else:
nur noch ein Befehl,
nämlich schuss()
eingerückt steht. Und woher stammt der
Befehl schuss()
? Wir hatten ja schon ganz zu Anfang gesagt, dass def
so genannte Funktionen definiert, etwa draw() oder on_key_down().
Bislang hatten wir auf diese Weise nur bestimmte Funktionen definiert,
deren Namen bereits festgelegt waren.
Mit
def schuss():
und den folgenden Zeilen haben wir uns nun eine Funktion
schuss()
konstruiert, die wir danach wie einen
Python-Befehl verwenden können. Das Programm ist durch diese Änderung
zwar länger geworden. Dafür ist die Funktion on_key_down()
deutlich
kürzer und übersichtlicher geworden und man sieht praktisch auf den
ersten Blick, dass im else
-Fall ein schuss
ausgeführt werden soll.
Aufgabe 1: Andere Funktionsnamen
Man könnte irrtümlicherweise meinen, die Namen der Funktionen
würden dem Computer auf magische Weise sagen, was er tun soll. Aber das
stimmt nicht. Benenne die Funktion schuss()
in bla()
. Du musst
natürlich auch die Funktion on_key_down()
entsprechend anpassen. Teste
das Programm dann nochmals.
Aufgabe 2: Absinken bei jedem Tastendruck
Ändere das Programm so, dass sich der Meteorit bei jedem
Tastendruck um 10 Pixel nach unten bewegt. Definiere hierfür eine
eigene Funktion absinken()
und rufe sie in on_key_down()
auf.