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?
2 odpowiedzi
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.
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.
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].