SOLUTION TASK 3.01: Conditionals
a.
Removes a star if there is one.
b.
Removes a star if there is one, puts down a star if there is none. This means the star pattern is inverted.
c.
Removes the star if there is a tree on the left.
SOLUTION TASK 3.02: Star Track
class MyPlayer extends Player { start() { while (canMove()) { if (!onStar()) { putStar(); } move(); } putStar(); } }
SOLUTION TASK 3.03: Star at Tree
class MyPlayer extends Player { start() { while (canMove()) { if (treeLeft() || treeRight()) { putStar(); } move(); } } }
SOLUTION TASK 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(); } }
SOLUTION TASK 3.05: Round Trip
class MyPlayer extends Player { start() { while (!onStar()) { if (!treeFront()) { move(); } else { if (!treeLeft()) { turnLeft(); move(); } else { turnRight(); move(); } } } removeStar(); } }
SOLUTION TASK 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(); } }
SOLUTION TASK 3.07: Follow the Trail
class MyPlayer extends Player { start() { while (!treeFront()) { removeStar(); findNextStar(); } removeStar(); } /// Function to find the next star. findNextStar() { // First look in the front. move(); if (!onStar()) { // No star in front, get back and try on the left. turnAndGoBack(); turnRight(); move(); if (!onStar()) { // No star on the left, it must be on the right. turnAndGoBack(); move(); } } } /// Function to go back one step. turnAndGoBack() { turnLeft(); turnLeft(); move(); } }
SOLUTION TASK 3.08: Guard
class MyPlayer extends Player { start() { while (true) { makeOneStep(); } } makeOneStep() { if (!treeRight()) { // No tree right --> go to the right. turnRight(); move(); } else { // There is a tree on the right. if (!treeFront()) { // No tree in front --> make step forward. move(); } else { // Bäume rechts und vorne. if (!treeLeft()) { // No tree left --> go to the left. turnLeft(); move(); } else { // Trees right, in front, and left --> dead end. turnLeft(); turnLeft(); move(); } } } } }