import java.awt.Color;

public class RandomWalker extends MobileSimObject {
    // OVERVIEW: A RandomWalker is a drunk simulator object that performace a random walk,
    //    moving one square in a random direction each step.

    private boolean inTurn; // Currently in the middle of a turn (used for coloring)
    
    public RandomWalker () {
	inTurn = false;
    }

    public Color getColor()
    {
	if (inTurn) {
	    return Color.white;
	} else {
	    return Color.cyan;
	}
    } //@nowarn NonNullResult // ESC/Java doesn't know Color constants are not null

    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, return true. If the move fails
       //          because the spot being attempted to move into is already
       //          occupied then return false.

    {
	inTurn = true;
	Direction dir = Direction.randomDirection ();
	int newrow = getRow () + dir.northerlyDirection ();
	int newcol = getColumn () + dir.easterlyDirection ();

	if (getGrid ().validLocation (newrow, newcol)) {
		synchronized (getGrid()){
		    if (getGrid().isSquareEmpty (newrow, newcol))
			{
				// Here, we pretend there is a lot of compution to do by sleeping,
			    	// to make race conditions more likely.
		    		delay (500);
				
			    setLocation (newrow, newcol);	
			}
		}
	}

	inTurn = false;
    }
}