Mit Verzweigungen können Code-Blöcke nur unter bestimmten Bedingungen ausgeführt werden. Eine Bedingung ist ein Ausdruck der True oder False ergibt.

# Bedingungen

Um zu entscheiden, ob ein Code-Block ausgeführt werden soll, wird immer eine Bedingung überprüft. Dies kann ein mathematischer Ausdruck sein.

  • Zahlen und Texte können mit den Vergleichsoperatoren verglichen werden:
x > 12                   # True wenn x grösser als 12
y <= HEIGHT              # True wenn y kleiner oder gleich wie HEIGHT 
txt != "hallo welt"      # True wenn in txt nicht "hallo welt" gespeichert ist
1
2
3
Operand Operation Bemerkung
== gleicher Wert geht auch bei String, für Float gefährlich
!= nicht gleich geht auch bei String, für Float gefährlich
< kleiner als bei String alphabetische Sortierung
> grösser als bei String alphabetische Sortierung
<= kleiner gleich bei String alphabetische Sortierung
>= grösser gleich bei String alphabetische Sortierung
  • Variablen vom Typ bool haben den Wert True oder False:
keyboard.a               # True wenn die Taste "A" gedrückt ist
1
  • Zudem gibt es Unterprogramme welche einen Wahrheitswert zurückliefern:
zorg.collidepoint(pos)   # True wenn die Koordinaten "pos" auf den Actor "zorg" fallen
1

# Wenn-dann (if)

Wenn Bedingung wahr, dann mache dies

if True/False:
   mach_etwas()
   
mach_weiter()
1
2
3
4
Zeile 1
True/False wird ersetzt mit Ausdruck der True oder False ergibt
Zeile 2
mach_etwas() wird ersetzt mit beliebigem Code.
Wird nur ausgeführt wenn der obige Ausdruck True ergibt.
Ist eingerückt.
Zeile 4
mach_weiter() wird ersetzt mit Code der immer ausgeführt wird.
Ist nicht mehr eingerückt.

# Beispiel: Tastatur-Steuerung

Die Keyboard-Tasten können im Game-Loop abgefragt werden. Mehrere Tasten können gleichzeitig gedrückt sein!



 
 






def update(dt):
    ...
    if keyboard.right:
        zorg.vx = zorg.vx + 1
    if keyboard.left:
        zorg.vx = zorg.vx - 1
    if keyboard.space:
        zorg.vy = zorg.vy - 2 
    ...
1
2
3
4
5
6
7
8
9

keyboard.right ist sozusagen eine Variable. Sie kann True oder False sein, je nachdem ob die Taste momentan gedrückt ist oder nicht.

Alien beschleunigt nach rechts

Aufgabe «Tastatursteuerung»

Baue eine Steuerung für das Alien ein:

  • Entweder es bewegt sich solange eine Taste gedrückt ist – der Tastendruck verändert also die Koordinate des Actors
  • oder es beschleunigt auf Tastendruck und bewegt sich dann weiter – der Tastendruck verändert die Geschwindigkeit des Actors

Teste beide Steuerungen aus!

# Wenn-dann-sonst-wenn-dann (if-elif)

Wenn Bedingung wahr, dann mache dies, sonst wenn andere Bedingung wahr, dann mache das

if True/False:
   mach_dies()
elif True/False:
   mach_das()
elif True/False:
   mach_jenes()
   
mach_weiter()
1
2
3
4
5
6
7
8

# Beispiel

Unser Alien besitzt eine konstante horizontale Geschwindigkeit vx und eine vertikale Geschwindigkeit vy die durch die Beschleunigung GRAVITATION verändert wird. Mit drei if können die Situationen abgefangen werden, wenn der Alien den unteren, den linken oder den rechten Rand berührt, wobei der linke und rechte Rand nicht gleichzeitig eintreffen können und deshalb nicht beide überprüft werden müssen.










 

 


def update(dt):
    zorg.vy = zorg.vy + dt * GRAVITATION
    zorg.y = zorg.y + dt * zorg.vy
    zorg.x = zorg.x + dt * zorg.vx

    if zorg.bottom > HEIGHT:
        zorg.bottom = HEIGHT
        zorg.vy = -zorg.vy
        
    if zorg.left > WIDTH:
        zorg.right = 0        
    elif zorg.right < 0:
        zorg.left = WIDTH
1
2
3
4
5
6
7
8
9
10
11
12
13
ab Zeile 6
Wenn die Füsse des Aliens das Fenster verlassen, dann wird die vertikale Geschwindigkeit «gespiegelt» – der Alien springt am unteren Rand ab. Zur Sicherheit wird der Alien zusätzlich auf den untersten Punkt gesetzt.
ab Zeile 10
Wenn der linke Rand des Aliens rechts aus dem Bild verschwindet, dann wird er auf den linken Rand des Fensters gesetzt
ab Zeile 12
Sonst wenn der rechte Rand des Aliens links aus dem Bild verschwindet, dann wird er auf den rechten Rand des Fensters gesetzt
Alien am seitwärtsen Verlassen des Fensters hindern

Aufgabe «Wrap»

Baue eine Überprüfung ein, so dass der Alien das Fenster nicht mehr verlassen kann. Du kannst entweder ein wrap machen («links raus» heisst «rechts wieder rein») oder einfach ein Block, so dass er am Rand nicht mehr weiter kann.

# Wenn-dann-sonst (if-else)

Wenn Bedingung wahr, dann mache dies, sonst mach das

if True/False:
   mache_dies()
else:
   mache_das()
1
2
3
4

# Zusammenfassung if in Python

Alles zusammen lässt sich nun kombinieren zu:

if True/False:
   mache_dies()
elif True/False:
   mache_das()
elif True/False:
   mache_jenes()
else:
   mache_dieses()
1
2
3
4
5
6
7
8

Hinweis

  • Die If-Struktur in Python startet zwingend mit einem if.
  • Dann folgen 0-∞ elif.
  • Am Schluss kann ein else stehen.
Letzte Änderung: 12. Januar 2021 13:59