import java.awt.Color; public class RandomWalker extends MobileSimObject { // OVERVIEW: A RandomWalker is a simulator object that performs a random walk, // moving one square in a random direction each step. private boolean /*@non_null@*/inTurn; // Currently in the middle of a turn (used for coloring) public RandomWalker() { //Constructor inTurn = false; } public void executeTurn() throws RuntimeException // Note: requires isInitialized is inherited from SimObject // EFFECTS: Picks a random direction and tries to move that way. // If the move is successful, set new location. If the move fails // because the spot being attempted to move into is already // occupied then try another direction. { inTurn = true; Direction dir = Direction.randomDirection(); int newy = getY() + dir.northerlyDirection(); int newx = getX() + dir.easterlyDirection(); synchronized(grid){ if (getGrid().validLocation(newx, newy)) { if (getGrid().isSquareEmpty(newx, newy)) { //@nowarn Pre // Here, we pretend there is a lot of compution to do by sleeping, // to make race conditions more likely. delay(500); setLocation(newx, newy); } } inTurn = false; } } public Color getColor() // Effects: returns the color associated with this { if (inTurn) { return Color.white; } else { return Color.cyan; } } //@nowarn Post // ESC/Java doesn't know Color constants are not null } //Class borrowed from Saturday Night Simulator and CS201J Website - PS5