LÖSUNG AUFGABE 4.01: Counting Stars
class MyPlayer extends Player { start() { int count = 0; while (canMove()) { move(); if (onStar()) { count = count + 1; } } say('Ich habe ${count} Sterne gefunden.'); } }
LÖSUNG AUFGABE 4.02: Cleaning Up
class MyPlayer extends Player { start() { bool goingRight = true; while (!treeFront()) { removeStar(); if (canMove()) { move(); } else { // Wir sind an einem Rand. if (goingRight) { // Wir sind am rechten Rand und drehen um. turnAroundRight(); goingRight = false; } else { // Wir sind am linken Rand und drehen um. turnAroundLeft(); goingRight = true; } } } // Entferne den letzten Stern. removeStar(); } /// Umdrehen am rechten Rand. turnAroundRight() { turnRight(); move(); turnRight(); } /// Umdrehen am linken Rand. turnAroundLeft() { turnLeft(); move(); turnLeft(); } }
LÖSUNG AUFGABE 4.03: Inverting
class MyPlayer extends Player { start() { bool goingRight = true; while (!treeFront()) { invertField(); if (canMove()) { move(); } else { // Wir sind an einem Rand. if (goingRight) { // Wir sind am rechten Rand und drehen um. turnAroundRight(); goingRight = false; } else { // Wir sind am linken Rand und drehen um. turnAroundLeft(); goingRight = true; } } } // Das letzte Feld invertieren. invertField(); } /// Umdrehen am rechten Rand. turnAroundRight() { turnRight(); move(); turnRight(); } /// Umdrehen am linken Rand. turnAroundLeft() { turnLeft(); move(); turnLeft(); } /// Ein einzelnes Feld invertieren. invertField() { if (onStar()) { removeStar(); } else { putStar(); } } }
LÖSUNG AUFGABE 4.04: Chessboard
(Lösung fehlt)
LÖSUNG AUFGABE 4.05: Tree Line
class MyPlayer extends Player { int longestRow = 0; /// Your program. start() { while (!onStar()) { if (treeFront()) { countRow(); } else { move(); } } say('Die längste Baumreihe ist ${longestRow} Bäume lang.'); } /// Geht einer Baumreihe entlang und zählt die Bäume. countRow() { int currentRow = 0; turnLeft(); while (treeRight()) { // Den Zähler für die aktuelle Zeile um eins erhöhen. currentRow++; move(); } // Gehe um die Baumreihe herum. turnRight(); move(); move(); turnRight(); // Gehe zurück nach unten. while (canMove()) { move(); } turnLeft(); // Teste, ob die aktuelle zeile länger ist als alle bisherigen. if (currentRow > longestRow) { longestRow = currentRow; } } }