reset password
Author Message
RandomAccess
Posts: 101
Posted 02:35 Nov 10, 2017 |

Most of my code is working alright. The character dies and starts over when you touch a prisoner, escapes and starts over when you get to the exit, and the prisoners move whenever my character does. There's only one major problem, my prisoners tend to move two spaces in one direction every move until they start making a sort of checker pattern all over the map. I feel like the problem is in the following method, I don't see anything in it that would cause them to move this way but maybe someone else here might. Please help if you can. -

public void setLunatic(Coordinate prisoner, Coordinate guard, int x, int y){
            
        while(am.getWallSpace()[prisoner.getColumn()][prisoner.getRow() - y].getValue() != 'W') {
            
            if(prisoner.getColumn() == guard.getColumn() && prisoner.getRow() - y == guard.getRow()){
                lunatic.setRow(prisoner.getRow() - 1);
                return;
            }
            
            else{
                y = y + 1;
            }
        }
        
        y = 1;
        
        while(am.getWallSpace()[prisoner.getColumn()][prisoner.getRow() + y].getValue() != 'W') {
            
            if(prisoner.getColumn() == guard.getColumn() && prisoner.getRow() + y == guard.getRow()){
                lunatic.setRow(prisoner.getRow() + 1);
                return;
            }
            
            else{
                y = y + 1;
            }
        }
        
        y = 1;
        
        while(am.getWallSpace()[prisoner.getColumn() + x][prisoner.getRow()].getValue() != 'W') {
            
            if(prisoner.getColumn() + x == guard.getColumn() && prisoner.getRow() == guard.getRow()){
                lunatic.setColumn(prisoner.getColumn() + 1);
                return;
            }
            
            else{
                x = x + 1;
            }
        }
        
        x = 1;
        
        while(am.getWallSpace()[prisoner.getColumn() - x][prisoner.getRow()].getValue() != 'W') {
            
            if(prisoner.getColumn() - x == guard.getColumn() && prisoner.getRow() == guard.getRow()){
                lunatic.setColumn(prisoner.getColumn() - 1);
                return;
            }
                
            else{
                x = x + 1;
            }
        }
        
        x = 1;
        
        Random rand = new Random();
        int r = rand.nextInt(4);
        
        if(r == 3){
            if(am.getWallSpace()[prisoner.getColumn()][prisoner.getRow() - 1].getValue() != 'W'){
                lunatic.setRow(prisoner.getRow() - 1);
                return;
            }
            
            else{
                r = 2;
            }
        }
        
        if(r == 2){
            if(am.getWallSpace()[prisoner.getColumn() + 1][prisoner.getRow()].getValue() != 'W'){
                lunatic.setColumn(prisoner.getColumn() + 1);
                return;
            }
            
            else{
                r = 1;
            }
        }
        
        if(r == 1){
            if(am.getWallSpace()[prisoner.getColumn()][prisoner.getRow() + 1].getValue() == ' '){
                lunatic.setRow(prisoner.getRow() + 1);
                return;
            }
            
            else{
                r = 0;
            }
        }
        
        if(r == 0){
            if(am.getWallSpace()[prisoner.getColumn() - 1][prisoner.getRow()].getValue() == ' '){
                lunatic.setColumn(prisoner.getColumn() - 1);
                return;
            }
            
            else{
                return;
            }
        }
    }
    
    public Coordinate getLunatic(){
        return lunatic;
    }