Java 将顶点[]转换为图形

Java 将顶点[]转换为图形,java,matrix,graph,vertex,edges,Java,Matrix,Graph,Vertex,Edges,我正在制作一个吃豆人游戏,目前正在制作鬼AI。我计划使用Dijkstra的算法进行寻路。我的问题是,当我的游戏加载时,图形的顶点存储在一个矩阵中。我试图像这样分配每个顶点的所有边 for(int x = 0; x<40; x++) { for(int y = 0; y<40; y++) { Vertex vertex = map[x][y]; vertex.adjacencies = ne

我正在制作一个吃豆人游戏,目前正在制作鬼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)};
        }
    }

对于(int x=0;x您应该以“border”1开始循环,如下所示:

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

因为,当您使用map[x-1][y]创建边时,x开始为0,它将-1作为数组索引,因此它会抛出一个数组越界异常。

一个简单的方法是在边周围包含一个不可遍历的边界

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


你仍然需要处理pacman在左右两侧之间的圆柱形移动。

你不需要太多的if语句。只需要4。另一方面,你需要存储它们吗?为什么不根据需要从矩阵中获取它们?每个角多一个,每个边一个,不是角不需要。你需要一个if用于北部,南一个,西一个,东一个。