试图遍历一个二维数组,却没有得到正确的值?

Trying to go through a 2d array, and not getting the correct values?

所以目前我正在制作迷宫游戏,当然要成为迷宫游戏就必须有墙。墙壁需要阻止玩家越过它们。我在检查碰撞时遇到问题。它在某些地方有效,而在其他地方则无效。我目前的方法是通过我的二维数组,通过将他们当前的 x 和 y 除以 50 来找到玩家试图继续前进的数字,然后使用这两个数字来尝试查看玩家是否会与墙碰撞或不。发生的事情是它阻止玩家移动到一些墙,而另一些则不能。此外,它还会在没有墙的地方停止播放器(值为 2)。我觉得数学有点乱,但我想不通是什么。这是我如何制作迷宫的代码,以及制作它的数组:

private int[][] mazeWalls = { //top of the maze
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
        {1, 2, 2, 2, 2, 2, 2, 1, 2, 1},
        {1, 2, 2, 2, 2, 2, 2, 1, 2, 1},
        {1, 2, 2, 2, 2, 2, 2, 1, 2, 1},
        {1, 1, 1, 1, 2, 2, 2, 2, 2, 1},
/*left side*/{1, 2, 2, 2, 2, 2, 2, 2, 2, 1}, //right side
        {1, 2, 2, 2, 2, 2, 2, 1, 2, 1},
        {1, 2, 2, 2, 2, 2, 2, 1, 2, 1},
        {1, 2, 2, 2, 2, 2, 2, 1, 2, 1},
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
                                //bottom of the maze
};

public void paintMaze(Graphics g){
    for(int row = 0; row < mazeWalls.length; row++){ //example of loops
        for(int col = 0; col < mazeWalls[row].length; col++){ //getting the positions set up
            if(mazeWalls[row][col] == 1){
                g.setColor(Color.RED); //color of the walls
                g.fillRect(col * 50, row * 50, 50, 50); //col times 50 is the x coordinate, and row times 50 is the y coordinate
            }
        }
    }
}

下面是我如何检查碰撞的代码 class:

public void collisionChecker(int playerX, int playerY){ //takes the user's location and then checks if they are running into the wall
    if(mazeWalls[playerX / 50][playerY / 50] == 1 ){
        setCollision(true);
    }
    else if(mazeWalls[playerX / 50][playerY / 50] != 1){
        setCollision(false); //just in case
    }
}

我觉得它应该可以工作,但出于某种原因(我认为它是除玩家坐标后的数字之类的东西)它不是。

按照惯例,二维数组中的第一个索引是行索引,第二个是列索引,因此您的坐标是错误的:

public void collisionChecker(int playerX, int playerY){ //takes the user's location and then checks if they are running into the wall
    if(mazeWalls[playerY / 50][playerX / 50] == 1 ){
        setCollision(true);
    }
    else if(mazeWalls[playerY / 50][playerX / 50] != 1){
        setCollision(false); //just in case
    }
}

这段代码可以简化为

public void collisionChecker(int playerX, int playerY){ //takes the user's location and then checks if they are running into the wall
    setCollision(mazeWalls[playerY / 50][playerX / 50] == 1);
}