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

标签 java arrays maze direction

所以我的问题是我必须创建这个迷宫游戏。除了在“迷宫”中向南移动外,一切正常。因此,我扫描玩家想去的地方,并根据该结果编辑玩家“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("---")){),南边总是会给出越界错误。现在我检查是否有墙,它就会向南移动,直到撞到墙为止。

最佳答案

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;

                }
            }
        }

    }
}

关于java迷宫游戏错误仅朝一个方向进行,使用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47933796/

相关文章:

java - 使用 jersey 客户端调用 Google oauth

java - 如何从Java中的多个方法中进行绘制?

java - 耗尽结果集错误

javascript - 试图定位某人在 Vanilla JS 中点击的属性

java - 迷宫解算器陷入死胡同的循环中

java - 为什么 BitmapFactory.decodeFile 返回 null?

android - 我可以通过数组定义多个 LinearLayouts 吗?

arrays - 如何在 bash 的数组中动态迭代

java - 递归:解决进口迷宫?

java - 不知何故,在递归过程中,对象在 list.add(object) 之后发生了变异。解释?