java迷宫游戏错误仅在一个方向上进行,使用数组

时间:2017-12-21 22:54:43

标签: java arrays maze direction

所以我的问题是我必须创建这个迷宫游戏。一切都很好,除了在迷宫中向南移动#34;因此,我扫描玩家想去的地方,并根据编辑玩家的位置" 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]完全一致。

在我检查墙壁之前(if [i-1] [j] .equals(&#34; ---&#34;)){),南方总会给出一个出界错误。现在,我检查了一堵墙,它向南走,直到它碰到一堵墙。

1 个答案:

答案 0 :(得分:1)

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;

                }
            }
        }

    }
}