java程序无法识别字符在数组中的位置
我正试图编写一个程序,让一个角色在二维数组中移动,在与之交互的过程中会遇到一些障碍。迷宫看起来是这样的(尽管每次运行时障碍物的位置都会发生变化):
x | \
/ / \
\
/ / \
\ \ | |
x代表玩家,每秒钟,它会向右移动一个空格。如果它与“/”接触,它会向右移动一个空格,向下移动一个空格。如果它与“\”接触,它会向右移动一个空格,向上移动一个空格。如果它接触到一个“|”,它就会自动死亡。然而,程序似乎无法识别玩家的路径中何时存在障碍。它一直在直行,最后看起来是这样的:
x x x x x x x x
/ / \
\
/ / \
\ \ | |
以下是我应该检查是否存在障碍的代码:
if (maze[l][f].equals("/")) {
if ((l-1) < 0) {
System.out.println("You died on column " + (f + 1));
System.exit(0);
y+=1;
} else {
l-=1;
f+=1;
maze[l][f] = "x";
y+=1;
}
} else if (maze[l][f].equals("\\")) {
if ((l+1) >= rows){
System.out.println("You died on column " + (f + 1));
System.exit(0);
y+=1;
} else {
l+=1;
f+=1;
maze[l][f] = "x";
y+=1;
}
} else if (maze[l][f].equals("|")) {
System.out.println("You died on column" + (f+1));
System.exit(0);
y+=1;
} else {
f+=1;
maze[l][f] = "x";
y+=1;
}
下面是创建迷宫的代码:
private static int rows;
private static int columns;
public static String[][] maze = new String[5][8];
public String[][] grid() {
Random rand = new Random();
int prob;
String obstacle = "";
boolean enabled = true;
for (int r = 0; r < rows; r++) {
for (int c = 0; c < columns; c++) {
if (enabled == true) {
prob = rand.nextInt(9) + 1;
if (prob == 1) {obstacle = "|"; enabled = false;}
else if (prob == 2 || prob == 3) {obstacle = "/"; enabled = false;}
else if (prob == 4 || prob == 5) {obstacle = "\\"; enabled = false;}
else {obstacle = ""; enabled = true;}
}
else {enabled = true; obstacle = "";}
maze[r][c] = obstacle;
}
}
return maze;
}
我看不出有什么问题。如果你有任何想法,请告诉我
谢谢
# 1 楼答案
更改l和f变量后,将当前位置更改为“x”
所以现在的位置总是“x”,角色一直向右移动
# 2 楼答案
假设您当前处于[0,0]位置,使用您在问题中所写的网格: 你有
l=0; f=0
该位置是一个空格字符,执行代码并到达最后else
部分现在,发生了什么
f
是递增的,这意味着你向右移动,现在站在[0,1]上。然后你在这个新位置上写一个x
来标记你的位置在下一次执行时,该字符不是预期的空格字符,而是
x
。再次到达else块,再次向右移动到[0,2]。同样,你用一个x
标记你的新位置,覆盖站在那里的|
。等等你应该做的是:只有当角色不是一个特殊的角色并且在移动到下一个位置之前,才标记你的位置