java 迷宫游戏错误只在一个方向,使用数组
java maze game error going in one direction only, using array
所以我的问题是我必须创建这个迷宫游戏。除了在 "maze" 中向南移动外,一切正常。所以我扫描玩家想去的地方,并根据该位置编辑玩家 "P" 在数组中的位置。这适用于向北、向东或向西,但不适合向南。
代码背景:所以我有一个 11*11 数组,其中一个元素等于 P。根据用户输入,如果没有墙(显示为---)。
for (int i = 0; i < currentPos.length; i++) {
for (int j = 0; j < currentPos[0].length; j++) {
if (currentPos[i][j].equals("P")) {
if (direction.equals("north")) {
if (currentPos[i - 1][j].equals("---")) {
continue;
} else {
currentPos[i][j] = " ";
currentPos[i - 2][j] = "P";
break;
}
}
if (direction.equals("south")) {
if (currentPos[i + 1][j].equals("---")) {
continue;
} else {
currentPos[i][j] = " ";
currentPos[i + 2][j] = "P";
break;
}
}
}
}
}
我猜导入部分应该是 [i-2][j] 或 [i+2][j] 部分。我在这里只放置了两个方向,但其他两个方向与 [i][j-2] 和 [i][j+2] 一起工作得很好。
在我检查墙壁之前 (if [i-1][j].equals("---")){),南方总是会给出越界错误。现在我检查一堵墙,它就向南移动,直到撞到一堵墙。
break
仅跳出最内层的循环,因此它只是停止处理当前行,然后您的程序将移至下一行。
这不是东或西的问题:因为玩家最终在同一行,而您中止该行,您将无法再次找到该玩家。向北走也不是问题:因为玩家最终在先前处理过的行中,所以您不会再找到它。
然而,当你向南走时,你会在下一行再次找到玩家并将他们再向下移动一步。然后你会再次遇到它们,显然会再次移动它们。一遍又一遍。
为避免这种情况,请在找到播放器后完全停止。不要一直寻找播放器。在不了解您的代码的情况下,一种方法是使用循环标签来跳出两个循环:
outerloop:
for (int i = 0; i < currentPos.length; i++) {
for (int j = 0; j < currentPos[0].length; j++) {
if (currentPos[i][j].equals("P")) {
if (direction.equals("north")) {
if (currentPos[i - 1][j].equals("---")) {
continue;
} else {
currentPos[i][j] = " ";
currentPos[i - 2][j] = "P";
break outerloop;
}
}
if (direction.equals("south")) {
if (currentPos[i + 1][j].equals("---")) {
continue;
} else {
currentPos[i][j] = " ";
currentPos[i + 2][j] = "P";
break outerloop;
}
}
}
}
}
所以我的问题是我必须创建这个迷宫游戏。除了在 "maze" 中向南移动外,一切正常。所以我扫描玩家想去的地方,并根据该位置编辑玩家 "P" 在数组中的位置。这适用于向北、向东或向西,但不适合向南。
代码背景:所以我有一个 11*11 数组,其中一个元素等于 P。根据用户输入,如果没有墙(显示为---)。
for (int i = 0; i < currentPos.length; i++) {
for (int j = 0; j < currentPos[0].length; j++) {
if (currentPos[i][j].equals("P")) {
if (direction.equals("north")) {
if (currentPos[i - 1][j].equals("---")) {
continue;
} else {
currentPos[i][j] = " ";
currentPos[i - 2][j] = "P";
break;
}
}
if (direction.equals("south")) {
if (currentPos[i + 1][j].equals("---")) {
continue;
} else {
currentPos[i][j] = " ";
currentPos[i + 2][j] = "P";
break;
}
}
}
}
}
我猜导入部分应该是 [i-2][j] 或 [i+2][j] 部分。我在这里只放置了两个方向,但其他两个方向与 [i][j-2] 和 [i][j+2] 一起工作得很好。
在我检查墙壁之前 (if [i-1][j].equals("---")){),南方总是会给出越界错误。现在我检查一堵墙,它就向南移动,直到撞到一堵墙。
break
仅跳出最内层的循环,因此它只是停止处理当前行,然后您的程序将移至下一行。
这不是东或西的问题:因为玩家最终在同一行,而您中止该行,您将无法再次找到该玩家。向北走也不是问题:因为玩家最终在先前处理过的行中,所以您不会再找到它。
然而,当你向南走时,你会在下一行再次找到玩家并将他们再向下移动一步。然后你会再次遇到它们,显然会再次移动它们。一遍又一遍。
为避免这种情况,请在找到播放器后完全停止。不要一直寻找播放器。在不了解您的代码的情况下,一种方法是使用循环标签来跳出两个循环:
outerloop:
for (int i = 0; i < currentPos.length; i++) {
for (int j = 0; j < currentPos[0].length; j++) {
if (currentPos[i][j].equals("P")) {
if (direction.equals("north")) {
if (currentPos[i - 1][j].equals("---")) {
continue;
} else {
currentPos[i][j] = " ";
currentPos[i - 2][j] = "P";
break outerloop;
}
}
if (direction.equals("south")) {
if (currentPos[i + 1][j].equals("---")) {
continue;
} else {
currentPos[i][j] = " ";
currentPos[i + 2][j] = "P";
break outerloop;
}
}
}
}
}