Tasten unterscheiden
In diesem Abschnitt lernst Du, wie das Programm auf unterschiedliche Tastendrücke des Benutzers unterschiedlich reagieren kann. Die allermeisten Spiele, die über die Tastatur gespielt werden, werden mehrere Tasten benötigen, auf die sie unterschiedlich reagieren.Programm zum Ausprobieren
Gib das folgende Programm ein und drücke zum Testen die Pfeiltasten nach links und rechts, sowie auch einmal eine andere Taste.
WIDTH = 800
HEIGHT = 600
TITLE = "Entscheidungen"
meteorit = Actor("meteorit.png")
meteorit.x = 400
meteorit.y = 200
laser = Actor("laser_ohne_strahl.png")
laser.x=400
laser.y=300
def on_key_down(key):
if key==keys.RIGHT:
laser.x += 10
elif key==keys.LEFT:
laser.x -= 10
else:
laser.image="laser_mit_strahl.png"
meteorit.image="meteorit_explosion.png"
def draw():
screen.blit("sterne.png",(0,0))
laser.draw();
meteorit.draw()
Erkärung
Die erste Änderung gegenüber dem vorhergehenden Programm ist, dass
nun hinter dem Funktionsnamen on_key_down
in Klammern noch das
Argument key
steht.
def on_key_down(key):
In diesem Funktionsargument ist nun gespeichert, welche Taste denn tatsächlich gedrückt wurde. Entsprechend kann das Programm nun entscheiden, wie es reagiert.
Die Entscheidung passiert in drei Schritten:
- Zunächst wird mit
überprüft, ob die Pfeiltaste nach rechts gedrückt wurde (es sind wirklich 2 Gleichheitszeichen hintereinander). Falls dem so ist, wird nacheinander die x-Koordinate der Kanone um 10 erhöht.if key==keys.RIGHT:
- Ist dies nicht der Fall, wird als nächstes überprüft, ob die Pfeiltaste nach links gedrückt wurde.
Falls dem so ist, wird nacheinander die x-Koordinate der Kanone um 10 verkleinert.elif key==keys.LEFT:
- Ist keine der obigen Bedingungen erfüllt,
so wird die Kanone abgefeuert und das Raumschiff zerstört.else:
Man sieht: In diesem Fall sind beide Befehle eingerückt. Auch unter
if … :
und elif … :
können mehrere
eingerückte Befehle stehen. Das englische Wort if
bedeutet
„falls", das englische Wort else
bedeutet „ansonsten“. Das Wort
elif
gibt es im Englischen nicht, es ist ein Kunstwort, das aus „else
if“ zusammengesetzt ist.
Schauen wir uns eine der Bedingungen nochmal genauer an:
if key==keys.RIGHT:
Jede Taste hat eine interne Nummer. Die Nummer der gedrückten Taste
ist im Wert key
gespeichert. Dieser wird mit
keys.RIGHT
verglichen. Und keys.RIGHT
ist
– richtig – die Eigenschaft RIGHT
des Objekts
keys
. Die Nummer der Taste mit dem Pfeil nach rechts ist
in dieser Eigenschaft gespeichert. Das Objekt keys
ist
sozusagen eine Sammlung von Tastennummern und hat für jede Taste eine
gesonderte Eigenschaft.
- Die einzelnen Eigenschaften zu Buchstabentasten heißen so wie die
Buchstaben (groß geschrieben):
keys.X
ist also die Taste X. - Die Eigenschaften für die Zahlentasten heißen
K_0
bisK_9
, - Die Eigenschaften der Funktionstasten heißen
F1
bisF12
. Die wichtigsten anderen Tasten sind. - Die wichtigsten anderen Tasten sind.
Eigenschaft Taste keys.UP Pfeiltaste nach oben keys.DOWN Pfeiltaste nach unten keys.LEFT Pfeiltaste nach links keys.RIGHT Pfeiltaste nach rechts keys.SPACE Leertaste keys.TAB Tabulatortaste keys.RETURN Enter-Taste keys.ESCAPE Escape-Taste keys.PAGEUP Bild ↑ keys.PAGEDOWN Bild ↓
Aufgabe 1: Mini-Änderung – große Wirkung
Ändere das Programm so ab, dass die Zeile
meteorit.image="meteorit_explosion.png"
nicht mehr so weit eingerückt ist, sondern unter dem
„e
“ von „else
“ beginnt, also so:
def on_key_down(key):
if key==keys.RIGHT:
laser.x += 10
elif key==keys.LEFT:
laser.x -= 10
else:
laser.image="laser_mit_strahl.png"
meteorit.image="meteorit_explosion.png"
Überprüfe, was diese kleine Änderung an der Einrückung bewirkt.
Aufgabe 2: Raumschiff mit WASD steuern
Erweitere das Programm so, dass es zusätzlich ein Raumschiff gibt, das man mit den Tasten W, A, S und D über den Bildschirm steuern kann. W: nach oben, A: nach links, D: nach rechts, S: nach hinten.
Aufgabe 3: Richtung des Raumschiffs
Falls du es noch nicht bei der vorhergehenden Aufgabe gemacht hast: Raumschiffe können nicht gut rückwärts oder zur Seite fliegen. Passe also je nach Tastendruck den Winkel des Raumschiffs an.