LÖSUNG AUFGABE 3.01: Conditionals
a.
Nimmt den Stern weg, wenn es einen hat.
b.
Nimmt den Stern weg, wenn es einen hat und legt einen Stern hin, wenn es keinen hat (Invertieren).
c.
Nimmt den Stern weg, wenn links ein Baum steht.
LÖSUNG AUFGABE 3.02: Star Track
class MyPlayer extends Player { start() { while (canMove()) { if (!onStar()) { putStar(); } move(); } putStar(); } }
LÖSUNG AUFGABE 3.03: Star at Tree
class MyPlayer extends Player { start() { while (canMove()) { if (treeLeft() || treeRight()) { putStar(); } move(); } } }
LÖSUNG AUFGABE 3.04: Around Tree II
class MyPlayer extends Player { start() { while (!onStar()) { if (treeFront()) { goAroundTree(); } else { move(); } } removeStar(); } goAroundTree() { turnLeft(); move(); turnRight(); move(); move(); turnRight(); move(); turnLeft(); } }
LÖSUNG AUFGABE 3.05: Round Trip
class MyPlayer extends Player { start() { while (!onStar()) { if (!treeFront()) { move(); } else { if (!treeLeft()) { turnLeft(); move(); } else { turnRight(); move(); } } } removeStar(); } }
LÖSUNG AUFGABE 3.06: Around Tree III
class MyPlayer extends Player { start() { while (!onStar()) { if (treeFront()) { goAroundTree(); } else { move(); } } removeStar(); } goAroundTree() { turnLeft(); move(); turnRight(); move(); while (treeRight()) { move(); } turnRight(); move(); turnLeft(); } }
LÖSUNG AUFGABE 3.07: Follow the Trail
class MyPlayer extends Player { start() { while (!treeFront()) { removeStar(); findNextStar(); } removeStar(); } /// Funktion, um den nächsten Stern zu finden. findNextStar() { // Erst mal vorne schauen. move(); if (!onStar()) { // Kein Stern vorne, also zurück und links schauen. turnAndGoBack(); turnRight(); move(); if (!onStar()) { // Links ist auch kein Stern; dann muss er rechts liegen. turnAndGoBack(); move(); } } } /// Funktion, um einen Schritt zurück zu gehen. turnAndGoBack() { turnLeft(); turnLeft(); move(); } }
LÖSUNG AUFGABE 3.08: Guard
class MyPlayer extends Player { start() { while (true) { makeOneStep(); } } makeOneStep() { if (!treeRight()) { // Kein Baum rechts --> gehe nach rechts. turnRight(); move(); } else { // Baum rechts. if (!treeFront()) { // Kein Baum vorne --> ein Schritt vorwärts. move(); } else { // Bäume rechts und vorne. if (!treeLeft()) { // Kein Baum links --> gehe nach links. turnLeft(); move(); } else { // Bäume rechts, vorne und links --> Sackgasse. turnLeft(); turnLeft(); move(); } } } } }