所以我的问题是我必须创建这个迷宫游戏。除了在“迷宫”中向南移动外,其他一切都正常。因此,我扫描了玩家想要去的地方,并根据该编辑将玩家“ P”放置在数组中的位置。可以向北,向东或向西走,但不能向南走。

代码背景:因此,我有一个11 * 11数组,并且在其中一个元素中等于P。根据用户输入,如果没有墙,则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]上也能正常工作。

在检查墙壁(如果[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;

                }
            }
        }

    }
}

10-04 18:33