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
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 WertTrue
oderFalse
:
keyboard.a # True wenn die Taste "A" gedrückt ist
- Zudem gibt es Unterprogramme welche einen Wahrheitswert zurückliefern:
zorg.collidepoint(pos) # True wenn die Koordinaten "pos" auf den Actor "zorg" fallen
# Wenn-dann (if
)
Wenn Bedingung wahr, dann mache dies
if True/False:
mach_etwas()
mach_weiter()
2
3
4
- Zeile 1
True/False
wird ersetzt mit Ausdruck derTrue
oderFalse
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
...
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.
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()
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
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
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()
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()
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.