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();
}
}
}
}
}