Konzept: Verzweigungen#

Du brauchst Verzweigungen, wenn der Ablauf deines Programms von bestimmten Bedingungen abhängen soll.


Erstes Beispiel#

In einem Spiel möchtest du vielleicht überprüfen, ob eine bestimmte Punktzahl erreicht wurde:

if points > 100:
    print("You have won!")

Allgemeine Syntax#

Das ist die allgemeine Syntax einer Bedingung:

if <condition>:
    <code block>

Boolesche Ausdrücke#

Eine Bedingung ist ein Ausdruck, der entweder True oder False ergibt – solche Ausdrücke nennt man boolesche Ausdrücke.

Die einfachsten sind True und False. Nützlichere Ausdrücke basieren auf Vergleichen:

10 < 100        # True
110 < 100       # False
x < 10          # Depends on x
"a" == "b"      # False
3 == 4          # False
"ab" == "ab"    # True

Du kannst beliebig komplexe Ausdrücke mit Variablen bilden.

Warnung

⚠️ Achtung: Für Vergleiche benutzt man zwei Gleichheitszeichen (==) – nicht ein einzelnes (=), das für Zuweisungen verwendet wird!


Vergleichsoperatoren#

Du kannst die folgenden Vergleichsoperatoren verwenden:

  • < : kleiner als

  • <= : kleiner oder gleich

  • == : gleich

  • >= : größer oder gleich

  • > : größer als


Code-Blöcke#

Wenn du mehrere Zeilen Code ausführen willst, wenn die Bedingung erfüllt ist, benutzt du Code-Blöcke, d. h. eingerückte Zeilen unterhalb der if-Anweisung.

Beispiel:

if points > 100:
    print("You have won!")
    print("Congratulations")
print("The game is over")

Die letzte Zeile wird immer ausgeführt. Die eingerückten Zeilen nur, wenn points > 100.


elif und else#

Mit elif und else kannst du Alternativen formulieren:

if points > 100:
    print("You have won!")
    print("Congratulations")
elif points > 50:
    print("You lost by a narrow margin")
else:
    print("You have clearly lost")

Syntax:#

if <condition>:
    <code block>
elif <condition>:
    <code block>
else:
    <code block>

elif oder else sind optional, und du kannst mehrere elif verwenden.


Detailliertes Beispiel – Ein Rechteck bewegen#

Ein Rechteck bewegt sich von rechts nach links. Wenn es den linken Rand erreicht, soll es wieder rechts erscheinen.

Version 1:

import miniworlds

world = miniworlds.World(300, 200)
rect = miniworlds.Rectangle((280, 120), 20, 80)

@rect.register
def act(self):
    rect.x -= 1

world.run()

Jetzt setzen wir die Position zurück:

@rect.register
def act(self):
    rect.x -= 1
    if rect.x == 0:
        rect.x = 280

Ein weiteres Beispiel – Ein einfaches Flappy Bird#

Ein Ball soll beim Tastendruck nach oben fliegen und sonst herunterfallen (Gravitation).

import miniworlds

world = miniworlds.World(300, 200)
rect = miniworlds.Rectangle((280, 120), 20, 80)
ball = miniworlds.Circle((20, 50), 20)
velocity = 1

@rect.register
def act(self):
    rect.x -= 1
    if rect.x == 0:
        rect.x = 280

@ball.register
def act(self):
    global velocity
    self.y += velocity
    if world.frame % 10 == 0:
        velocity += 1

@ball.register
def on_key_down(self, key):
    global velocity
    velocity = -2

world.run()

Der Ball fällt und wird durch die Gravitation schneller. Wenn eine Taste gedrückt wird, springt er nach oben.


Kollisionen#

Du kannst auch prüfen, ob zwei Objekte sich berühren, mit Hilfe von Sensor-Methoden wie detect_actor():

@ball.register
def act(self):
    global velocity
    self.y += velocity
    if world.frame % 10 == 0:
        velocity += 1
    actor = self.detect_actor()
    if actor == rect:
        self.world.stop()

Dies prüft, ob der Ball mit dem Rechteck kollidiert. Falls ja, endet das Spiel.


Endergebnis – Flappy-Bird-Prototyp#