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