Neben Schleifen gibt es eine zweite Struktur, die sehr wichtig ist, um den Programmablauf zu steuern. Mit bedingten Anweisungen kann man angeben, wann ein Block von Anweisungen ausgeführt werden soll und wann nicht.
if (treeFront()) { // Bedingung. turnLeft(); // Block 1 wird ausgeführt, wenn Bedingung zutrifft (=true). } else { move(); // Block 2 wird ausgeführt, wenn Bedingung nicht zutrifft (=false). }
else
-Teil (Block 2) kann weggelassen werden, wenn er nicht benötigt wird.
AUFGABE 3.01: Conditionals
Beschreiben Sie mit Worten, was die folgenden Codebeispiele bewirken. Testen Sie diese anschliessend im scenario3.01
. Damit die bedingten Anweisungen nicht nur einmal ausgeführt werden, sollten Sie diese in die vorbereitete Schleife setzen.
a.
if (onStar()) { removeStar(); } move();
b.
if (onStar()) { removeStar(); } else { putStar(); } move();
c.
Bedingte Anweisungen können auch ineinander verschachtelt werden:
if (treeLeft()) { if (onStar()) { removeStar(); } } move();
AUFGABE 3.02: Star Track
Der Spieler soll vorwärts laufen und dabei überall einen Stern legen, wo keiner ist. Achten Sie am Schluss darauf, dass auch auf dem letzten Feld noch ein Stern liegt.
Öffnen Sie das scenario3.02
und schreiben Sie das Programm dazu.
AUFGABE 3.03: Star at Tree
Der Spieler soll geradeaus gehen und überall dort einen Stern legen, wo entweder links oder rechts ein Baum steht.
Beachten Sie, dass Sie, wie bei den Schleifen erklärt, auch hier die Logischen Operatoren &&
, ||
und !
verwenden können.
AUFGABE 3.04: Around Tree II
Um die Bäume herum laufen kennen wir bereits aus dem Teil 1. Wir haben es dort wie folgt gelöst:
class MyPlayer extends Player { start() { move(); goAroundTree(); goAroundTree(); move(); goAroundTree(); removeStar(); } goAroundTree() { turnLeft(); move(); turnRight(); move(); move(); turnRight(); move(); turnLeft(); } }
Dieses Programm funktioniert ganz gut, solange die Welt mit den Bäumen immer genau gleich aussieht. Sobald ein Baum verschoben wird, gibt es Probleme.
Das scenario3.04
hat drei Varianten. Öffnen Sie dieses Szenario und ändern Sie in der main()
-Funktion den Text scenario-a.txt
in scenario-b.txt
um. Testen Sie nun, was passiert, wenn Sie das Programm wie oben dargestellt starten.
Sie kennen nun etliche Möglichkeiten, wie Sie mit Hilfe von Sensor-Methoden auf Umstände reagieren können. Versuchen Sie nun das Programm so abzuändern, dass unser Spieler den Stern in allen Welten mit folgenden Eigenschaften erreicht:
- Der Stern liegt immer gerade vor ihm. Er muss also um die Bäume herumlaufen.
- Es stehen nie zwei Bäume nebeneinander.
AUFGABE 3.05: Round Trip
Der Spieler geht in einem Rundgang auf die Suche nach einem Stern (und liest diesen auf). Jedes Feld im Rundgang hat genau zwei freie benachbarte Felder. Eines liegt immer hinter dem Spieler; von diesem Feld aus ist er auf das aktuelle Feld gekommen.
Laden Sie das scenario3.05
und schreiben Sie ein Programm dazu. Testen Sie das Programm in allen drei Welten, scenario-a.txt
, scenario-b.txt
und scenario-c.txt
.
Tipp: Schreiben Sie zuerst eine Schleife, die stoppt, sobald der Spieler auf einem Stern ist. Stellen Sie sich dann vor, was nach jedem einzelnen durchgang durch die Schleife geschehen soll.
AUFGABE 3.06: Around Tree III
Dies ist die ähnliche Übung wie die Aufgabe 3.04: Der Spieler soll den Stern finden, der geradeaus vor ihm liegt. Nun können aber eine beliebige Anzahl Bäume hintereinander stehen.
Laden Sie das scenario3.06
und verbessern Sie die Methode goAroundTree()
so, dass der Spieler um mehrere Bäume herumgehen kann. Testen Sie Ihr Programm in allen vorgegebenen Welten (a, b, c und d).
AUFGABE 3.07 (schwierig): Follow the Trail
Der Spieler soll einer Spur von Sternen folgen und diese jeweils auflesen. Vor den Bäumen soll er anhalten.
Wichtig: Schreiben Sie zur besseren Übersicht für gewisse Programmteile eigene Methoden.
AUFGABE 3.08 (schwierig): Guard
Der Spieler soll einen Wald bewachen voller Sterne. Er soll aussen am Waldrand entlang laufen.
Beginnen Sie mit einem einzelnen Rundgang um den Wald. Anschliessend können Sie mit einer Endlosschleife while (true)
den Spieler mehrere Rundgänge machen lassen.
Testen Sie Ihr Programm auch in der zweiten Welt.
Wie weiter?
Lernen Sie im Teil 4, wie wir mit Variablen etwas speichern können.
Quellen
Planet Cute Bilder stammen von Daniel Cook (Lostgarden.com), veröffentlicht unter CC BY 3.0.
Oleg Yadrov hat die “Planet Cute” Bilder weiterentwickelt und mir zur Verfügung gestellt. Optimiert wurden sie mit dem grossartigen TexturePacker.
Einige Übungen in Hello Dart
sind inspiriert von Kara. Kara wurde entwickelt von Jürg Nievergelt, Werner Hartmann, Raimond Reichert und anderen.