import uk.ac.warwick.dcs.maze.logic.IRobot;
public class DumboController
{
public void controlRobot(IRobot robot) {
int randno;
int direction;
char heading;
int wallNumber;
String directionState;
String surroundingState;
do { // Begin do-while loop
// Select a random number for randno variable
randno = (int) Math.round(Math.random()*3);
// Convert this to a direction and set heading variable
if (randno == 0) {
direction = IRobot.LEFT;
heading = 'L';
}
else if (randno == 1) {
direction = IRobot.RIGHT;
heading = 'R';
}
else if (randno == 2) {
direction = IRobot.BEHIND;
heading = 'B';
}
else {
direction = IRobot.AHEAD;
heading = 'F';
}
} while (robot.look(direction) == IRobot.WALL) ; // Check if direction chosen will move into wall, if not, terminate loop, else continue looping
// Open a switch to check the heading variable
switch (heading) {
case 'L' : directionState = "I'm going left"; break;
case 'R' : directionState = "I'm going right"; break;
case 'B' : directionState = "I'm going backwards"; break;
case 'F' : directionState = "I'm going forward"; break;
default : directionState = "I'm doing nothing"; break;
} // Check the heading and update the string directionState to log where the robot is going to move, then break out of the switch
robot.face(direction); /* Face the robot in this direction */
// Since we now know that the direction the robot is facing in, is clear, we can ignore the possibility of a wall being there
// so begin checking the other three directions for walls and update the wallNumber variable as appropriate
wallNumber = 0; // Initialise wallNumber as 0 before rest of program runs to make sure that checking the surroundings works correctly
if (robot.look(IRobot.LEFT) == IRobot.WALL) { // Check left of the robot
wallNumber = wallNumber + 1; // Add 1 to wallNumber if there is a wall to the left
}
if (robot.look(IRobot.RIGHT) == IRobot.WALL) { // Check right of the robot
wallNumber = wallNumber +1; // Add 1 to wallNumber if there is a wall to the right
}
if (robot.look(IRobot.BEHIND) == IRobot.WALL) { // Check behind the robot
wallNumber = wallNumber +1; // Add 1 to wallNumber if there is a wall behind
}
// Open a switch to check the wallNumber variable
switch (wallNumber) {
case 0 : surroundingState = "at a crossroads"; break;
case 1 : surroundingState = "at a junction"; break;
case 2 : surroundingState = "down a corridor"; break;
case 3 : surroundingState = "at a deadend"; break;
default : surroundingState = "and I don't know where I am"; break;
} // Check the number of walls surrounding, and enter into the string surroundingState, the state of the robot's surroundings
System.out.println(directionState + " " + surroundingState); // Print how the robot is moving and what the state of it's surroundings is
wallNumber = 0; // Reset the variable wallNumber for the next run
robot.advance(); /* and move the robot */
}
}