public class Human extends Actor
{
    int offsetX = 0; //global variable storing the random X direction (1, 0 or -1)
    int offsetY = 0; //global variable storing the random Y direction (1, 0 or -1)
    
    public Human() // This sets the function for the Human
    {
        setDirection(); // This sets the direction for the Human
    }
    /**
     * Human will walk continuously in a random direction turning randomly when it hits something
     * if the Human hits a spider it will eat it.
     */
    
    public void act() // This defines the way that the Human moves (Greenfoot is in control)
    {
        int currX = getX(); //gets the currect X co-ordinate
        int currY = getY(); //gets the currect Y co-ordinate
        
        if(canMove(currX + offsetX, currY + offsetY)) //
            setLocation(currX + offsetX, currY + offsetY); //
        else
            setDirection(); //this sets the new direction of the Human
    }
    private void setDirection() //This is the function that the Human is in control of, the function defines the amount of rotation the Human does per move. 
    {
        do{
        offsetX = Greenfoot.getRandomNumber(3) - 1;// This generates a random number, it will be -1, 0 or 1. Stored in X
        offsetY = Greenfoot.getRandomNumber(3) - 1;//This generates a random number, it will be -1, 0 or 1. Stored in Y
        }while(offsetX==0 && offsetY==0);
        if(offsetX == -1 && offsetY == -1) //if the Human will go north-west
            setRotation(315); //set rotation to north-west
            
        else if(offsetX == -1 && offsetY == 0) //if the Human will go west
            setRotation(270); //set rotation to west
            
        else if(offsetX == -1 && offsetY == 1) //if the Human will go south-west
            setRotation(225); //set rotation to south west
            
        else if(offsetX == 0 && offsetY == -1) //if the Human will go north
            setRotation(0); //set rotation to north
            
        else if(offsetX == 0 && offsetY == 1) //if the Human will go south
            setRotation(180); //set rotation to south
            
        else if(offsetX == 1 && offsetY == -1) //if the Human will go north east
            setRotation(45); //set rotation to north east
            
        else if(offsetX == 1 && offsetY == 0) //if the Human will go East
            setRotation(90); //set rotation to East
            
        else if(offsetX == 1 && offsetY == 1) //if the lizard will go south east
            setRotation(135); //set rotation to South-East
    }
    private boolean canMove(int x,int y) //
    {       
        List foundTree = getWorld().getObjectsAt(x,y, Tree.class); //canMove is false if a Wall is found
        if(!foundTree.isEmpty  ())     return false;   //if wall found return false and stop otherwise continue
     
        List foundLampPost = getWorld().getObjectsAt(x,y, LampPost.class); //canMove is false if a Wall is found
        if(!foundLampPost.isEmpty  ())     return false;   //if wall found return false and stop otherwise continue
        
       List foundPurpleCar = getWorld().getObjectsAt(x,y, PurpleCar.class); //canMove is false if a Wall is found
        if(!foundPurpleCar.isEmpty  ())     return false;   //if wall found return false and stop otherwise continue
        
               List foundYellowCar = getWorld().getObjectsAt(x,y, YellowCar.class); //canMove is false if a Wall is found
        if(!foundYellowCar.isEmpty  ())     return false;   //if wall found return false and stop otherwise continue
        
                       List foundGreenCar = getWorld().getObjectsAt(x,y, GreenCar.class); //canMove is false if a Wall is found
        if(!foundGreenCar.isEmpty  ())     return false;   //if wall found return false and stop otherwise continue
        
        
        return true;    //this must be at the end - canMove will only be true if it got this far ie it didn't find any of the listed objects.
      }
        
 
   
             
          
        
