0

我正在制作 Pac-Man 游戏,目前正在研究 Ghosts AI。我计划使用 Dijkstra 的算法进行寻路。我的问题是,当我的游戏加载时,图形的顶点存储在矩阵中。我正在尝试像这样分配每个顶点的所有边缘

    for(int x = 0; x<40; x++)
    {
        for(int y = 0; y<40; y++)
        {
            Vertex vertex = map[x][y];
            vertex.adjacencies = new Edge[]{new Edge(map[x-1][y], 1), new Edge(map[x+1][y], 1), new Edge(map[x][y-1], 1), new Edge(map[x][y+1], 1)};
        }
    }

问题是它有时会抛出一个数组越界异常。如果不使用大量 if 语句来检查当前顶点是否在图的边缘,我将如何解决这个问题?

4

2 回答 2

0

您应该以 1 的“边界”开始循环,如下所示:

for(int x = 1; x < 39; x++)

因为,当您使用 map[x-1][y] 以 ax 开始为 0 创建边时,它将 -1 作为数组索引,因此它会引发 Array Out of Bounds 异常。

于 2013-05-18T13:10:05.103 回答
0

一种简单的方法是在边缘周围包含不可穿越的边界。

例如,如果您的实际地图是 40x40,则可以声明一个 42x42 数组。第 0 行和第 n 行是不可遍历的,第 0 列和第 n 列也是如此。

您仍然需要处理 pacman 在左侧和右侧之间的圆柱形行程。

于 2013-05-18T13:10:30.993 回答