【发布时间】:2022-01-28 21:35:53
【问题描述】:
我的代码
import java.util.Scanner;
/**
*
* @author jwgau
*/
public class mazeTask {
public static void main(String[] args) {
printMaze();
}
public static void printMaze() {
int py = 8;
int px = 1;
Scanner scan = new Scanner(System.in);
char choice;
char[][] maze = {
{'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W'}, // Row 0
{'W', ' ', ' ', ' ', ' ', 'W', 'G', ' ', 'W'}, // Row 1
{'W', ' ', 'W', 'W', 'W', 'W', 'W', ' ', 'W'}, // Row 2
{'W', ' ', 'W', ' ', 'W', ' ', 'W', ' ', 'W'}, // Row 3
{'W', ' ', 'W', ' ', 'W', ' ', 'W', ' ', 'W'}, // Row 4
{'W', ' ', 'W', ' ', 'W', ' ', 'W', ' ', 'W'}, // Row 5
{'W', ' ', 'W', ' ', 'W', ' ', 'W', ' ', 'W'}, // Row 6
{'W', ' ', 'W', ' ', 'W', ' ', 'W', ' ', 'W'}, // Row 7
{'W', 'P', ' ', ' ', ' ', ' ', ' ', ' ', 'W'}, // Row 8
{'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W'} // Row 9
};
while (true) {
//printing 2d array using nested for loops
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 9; j++) {
System.out.print(maze[i][j]);
maze[py][px] = 'P';
}
System.out.println("");
}
//maze[py][px] = 'P';
System.out.println("North, south, east or west?");
choice = scan.next().charAt(0);
switch (choice) {
case 'N':
if(validMove(choice, py, px, maze) == true){
py = py-1;
System.out.println(py);
maze[py][px] = 'P';
}
continue;
case 'S':
if(validMove(choice, py, px, maze) == true){
py = py+1;
maze[py][px] = 'P';
}
continue;
case 'E':
if(validMove(choice, py, px, maze) == true){
px = px+1;
maze[py][px] = 'P';
}
continue;
case 'W':
if(validMove(choice, py, px, maze) == true){
px = px - 1;
maze[py][px] = 'P';
}
continue;
}
System.out.println("px = " + px);
System.out.println("py = " + py);
}
}
public static boolean validMove(char choice, int py, int px, char maze[][]){
switch(choice){
case 'N':
if(maze[px][py-1] == 'W'){
return false;
}
else{
maze[py] = maze[py-1];
}
break;
case 'S':
if(maze[px][py+1] == 'W'){
return false;
}
else{
maze[py] = maze[py+1];
}
break;
case 'E':
if(maze[px+1][py] == 'W'){
return false;
}
else{
maze[px] = maze[px+1];
}
break;
case 'W':
if(maze[px-1][py] == 'W'){
System.out.println("Invalid move, try again");
return false;
}
else{
maze[px] = maze[px-1];
}
break;
}
return true;
}
}
我目前正在使用 java 中的数组进行 2D 棋盘游戏项目,并且遇到屏幕输出不正确的问题,前几次迭代工作正常,并且我的 py/px 变量正确减少,然后没有任何输出前几轮。
玩家或“P”应该遍历数组,只有在不会与墙“w”发生碰撞时才会验证移动。
代码处于可运行状态以进行测试,或者如果有人能指出我出错的正确方向,我将不胜感激。
【问题讨论】:
-
您是否在调试器中单步执行了代码?
-
只有当
validMove()方法返回 true 时,你有一个无限循环,它只会做任何事情。所以从那一刻起,你的代码就不会永远什么都不做。