i

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
    	if key==keys.RIGHT:
    
    ü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.
  • Ist dies nicht der Fall, wird als nächstes überprüft, ob die Pfeiltaste nach links gedrückt wurde.
    	elif key==keys.LEFT:
    
    Falls dem so ist, wird nacheinander die x-Koordinate der Kanone um 10 verkleinert.
  • Ist keine der obigen Bedingungen erfüllt,
    	else:
    
    so wird die Kanone abgefeuert und das Raumschiff zerstört.

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 bis K_9,
  • Die Eigenschaften der Funktionstasten heißen F1 bis F12. 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.

Suche

v
7.4.5.1
dev.inf-schule.de/oop/spiele-python/entscheidungen/tasten-unterscheiden
dev.inf-schule.de/7.4.5.1
dev.inf-schule.de/@/page/o9GV6veAoPZBas2b

Rückmeldung geben