Piszę program, który jest labiryntem. Użytkownik jest oznaczony znakiem „P” i muszę być w stanie zlokalizować ten znak, aby przypisać wartości do moich poleceń ruchu. Jestem zdezorientowany, jak znaleźć „P” w moim labiryncie.

public static void main(String[] args) throws Exception{

    //Display the maze
    char treasureMaze[][] = {{'P','.','X','X','.'},{'.','X','.','.','.'},{'.','.','.','X','.'},{'X','X','T','.','.'},{'.','.','X','.','.'}}; 
    display(treasureMaze);


    //Give Move Options
    options();

    //Get Users Decision
    Scanner moveChoice = new Scanner(System.in);
    int choice = moveChoice.nextInt();

    if(choice == 1){
        System.out.println("You chose to Move up");
    }
    else if(choice == 2){
        System.out.println("You chose to Move down");
    }
    else if(choice == 3){
        System.out.println("You chose to Move left");
    }
    else if(choice == 4){
        System.out.println("you chose to Move right");
    }
    else{
        return;
    }


    //Move the Player
    //Move Up
    if(choice == 1){
        if(treasureMaze[0-1][0] == '.'){
            treasureMaze[0-1][0] = 'P';
            treasureMaze[0-1][0] = '.';
        }
        else if(treasureMaze[0-1][0] == 'T'){
            System.out.println("Congratulations you won!");
        }
        else{
            System.out.println("Cannot move there! Try something else");
        }
    }

    //Move Down
    else if(choice == 2){
        if(treasureMaze[0+1][0] == '.'){
            treasureMaze[0+1][0] = 'P';
            treasureMaze[0][0] = '.';
        }               
        else if(treasureMaze[0+1][0] == 'T'){
            System.out.println("Congratulations you won!");
        }
        else{                   
            System.out.println("Cannot move there! Try something else");
            }
            }

    //Move Left
    else if(choice == 3){
        if(treasureMaze[0][0-1] == '.'){
            treasureMaze[0][0-1] = 'P';
            treasureMaze[0][0] = '.';
        }
        else if(treasureMaze[0][0-1] == 'T'){
            System.out.println("Congratulations you won!");
        }
        else{
            System.out.println("Cannot move there! Try something else");
        }
    }

    //Move Right
    else if(choice == 4){
    if(treasureMaze[0][0+1] == '.'){
        treasureMaze[0][0+1] = 'P';
        treasureMaze[0][0] = '.';
    }
    else if(treasureMaze[0][0+1] == 'T'){
        System.out.println("Congratulations you won!");
    }
    else{
        System.out.println("Cannot move there! Try something else");
    }
    }
    else{
        return;
    }
    display(treasureMaze);
    options();
}



//Display Object: prints out the maze for the user
public static void display(char x[][]){
    for(int row = 0; row < x.length; row++){
        for(int column = 0; column < x[row].length; column++){
            System.out.print(x[row][column] + "\t");
        }
        System.out.println();
    }
}

//Options Object: gives the options menu to the user
 static void options(){
     System.out.println("You may:");
        System.out.println("\t1) Move up");
        System.out.println("\t2) Move down");
        System.out.println("\t3) Move left");
        System.out.println("\t4) Move right");
        System.out.println("\t0) Quit");

}

Ustawiłem go tak, aby przenieść „P” z miejsca początkowego, ale nie wiem, jak go zlokalizować do następnego przejazdu. Jakieś pomysły?

0
Eric 25 wrzesień 2012, 23:46

2 odpowiedzi

Najlepsza odpowiedź

Sugeruję śledzenie aktualnej lokalizacji, aby nie trzeba było jej szukać. Zadeklaruj dwie zmienne dla poziomej i pionowej pozycji gracza. Zainicjuj je podczas konfigurowania planszy (wygląda na to, że powinny być (0, 0)) i aktualizuj je, gdy gracz się porusza.

3
Ted Hopp 25 wrzesień 2012, 23:49

Odpowiedź Teda najlepiej pasuje do aktualnej konfiguracji programu.

Alternatywnie możesz zastąpić szyk 2D drzewem. Dodatkową korzyścią takiego podejścia byłoby to, że nie trzeba by się martwić, że indeks tablicy wykroczy poza granice. Każdy pokój miałby odniesienia do innych pokoi, z którymi jest połączony, nieprawidłowe wskazówki mogą być po prostu null i możesz zachować odniesienie do obecnego pokoju gracza.

1
Pops 26 wrzesień 2012, 00:02