2.6 Verzweigungen
Häufig geht es bei Computerprogrammen nicht um das Abarbeiten von genau festgelegten Befehlen. Je nach Eingaben des Benutzers oder Zuständen des Systems soll sich ein Programm unterschiedlich verhalten. Dafür gibt es bedingte Anweisungen. Eine Verzweigung (bedingte Anweisung) besteht dabei aus einer Bedingung und Anweisungsblöcken, die ausgeführt werden, je nachdem ob die Bedingung erfüllt ist oder nicht.
In Java lässt sich eine Verzweigung mit den Schlüsselwörtern if
und else
programmieren:
if( Bedingung )
{
// Anweisungsblock für den Fall,
// dass die Bedingung erfüllt ist.
}
else
{
// Anweisungsblock für den Fall,
// dass die Bedingung nicht erfüllt ist.
}
In der Landschaft mit dem Windrad soll die Animation nun durch Benutzereingaben gesteuert werden: Das Windrad soll sich nur drehen, wenn die rechte Cursortaste gedrückt wird. Die Wolke soll währenddessen aber durchgängig nach rechts verschoben werden.
Der zugehörige Quelltext sieht so aus:
public void animiere() {
while(tasti.esc() == false) {
wolke1.verschiebe(0.5, 0);
wolke2.verschiebe(0.5, 0);
if( tasti.rechts() == true ) {
rotor1.dreheUmMittelpunkt(1);
rotor2.dreheUmMittelpunkt(1);
}
SGSystem.warte();
}
}
In Zeile 2 wird eine Schleife eingeleitet, die ausgeführt werden soll, solange die Escape-Taste nicht gedrückt wurde. Dazu wird die Methode esc()
des SGTastatur
-Objekts tasti aufgerufen. Sie liefert true
oder false
, je nachdem, ob die Escape-Taste gedrückt ist.
In Zeile 3 und 4 werden zuerst die beiden SGKreis
-Objekte verschoben. Darauf folgt die Verzweigung: Falls die rechte Cursortaste gedrückt wird (Zeile 6) sollen die beiden Rotoren um 1° um ihren Mittelpunkt gedreht werden (in den Zeilen 7 und 8).
In dieser Verzweigung findet sich kein else
-Block: Wenn es keine Anweisungen gibt, die ausgeführt werden sollen, wenn die Bedingung nicht erfüllt ist, kann der else
-Block auch weggelassen werden.

Im Struktogramm gibt es für Verzweigungen ebenfalls eine besondere Darstellungsform:
Wenn die Bedingung zutreffend (wahr) ist, wird der Anweisungsblock 1 durchlaufen (if
); trifft die Bedingung nicht zu (falsch), wird der Anweisungsblock 2 durchlaufen (else
). Anweisungsblock 2 kann auch keine Anweisungen enthalten.

Aufgaben
Aufgabe 1: Windrad-Linksdreh und Wolkenzug
Ergänze in dem Projekt zum Windrad zwei Verzweigungen:
- Wenn die linke Cursortaste gedrückt wird, soll sich das Windrad anders herum drehen.
- Wenn die x-Koordinate von
wolke1
größer als 500 ist, verschiebewolke1
undwolke2
um 700 Pixel nach links.
Aufgabe 2: Verzweigungen analysieren
Beim folgenden Quelltext befindet sich das SGKreis
-Objekt kreis
zu Beginn an der Position (0, 0) und hat die Farbe Rot (1,0,0,).
- Kommentiere den folgenden Quelltext zeilenweise.
- Gib verschiedene Positionen an, an denen er sich im Verlauf der Animation befindet und beschreibe seinen Weg. Gehe dabei auch darauf ein, welche Farbe er jeweils besitzt.
public void animiere()
{
while(kreis.gibX() < 200)
{
kreis.verschiebe(1,0);
if(kreis.gibX() < 100)
{
kreis.verschiebe(0,1);
}
else
{
kreis.verschiebe(0,-1);
}
if(kreis.gibY() > 50)
{
kreis.setzeFarbe(0,0,1);
}
}
}
Aufgabe 3: Struktogramme lesen und in Java implementieren
Bei diesem Projekt ist ein SGRechteck
mit dem Namen objekt
und ein SGMaus
-Objekt mit dem Namen mausi
gegeben. Im Hintergrund finden sich verschiedenfarbige Felder. Je nachdem, in welchem Feld die Maus ist, soll das Objekt eine andere Aktion ausführen. Das zugehörigen Struktogramm findet du unten.
Übersetze das Struktogramm in Java-Quelltext.

Aufgabe 4: Autorennen
Bei diesem Projekt handelt es sich um ein einfaches Autorennen. Im Prototypen sind bereits alle wesentlichen Objekte implementiert. Neben der Tastatur (tasti
), dem Auto (rotesAuto
) und einem Hindernis in der Mitte (block
) ist auch ein Textfeld (gameOver
) implementiert, um anzuzeigen, dass das Spiel beendet ist.
Die Methode fuehreAus
muss noch implementiert werden.
- Nutze das untenstehende Struktogramm, um die Bewegung des Autos zu implementieren.

- Ergänze den folgenden Quelltext innerhalb der
while
-Schleife der MethodefuehreAus
. Erkläre dann die Bedingung der if-Verzweigung und beschreibe, was die Anweisungen bewirken.
if( rotesAuto.kollidiertMit(block) == true )
{
gameOver.setzeSichtbar(true);
SGSystem.warte(1000);
SGSystem.beende();
}
- Ergänze ein blaues Auto (das Bild hat den Dateinamen „CarBlue.png“), das mit den Tasten „WASG“ gesteuert wird. Lies dafür in der Dokumentation der Klasse
SGTastatur
, wie überprüft werden kann, ob eine bestimmte Taste gedrückt wurde.
