用Java生成迷宫,不是网格(即矩阵NxN),而是图形

用Java生成迷宫,不是网格(即矩阵NxN),而是图形,java,algorithm,maze,Java,Algorithm,Maze,我需要生成一个程序,其中包括建立一个迷宫,游戏涉及到60-70名玩家。 问题是,我不想使用网格,因为我认为它会浪费太多内存,而且这种表示(=网格)的复杂性不会那么容易。 经过思考,我决定使用一个图表,其中: 迷宫的每个房间将代表图形中的一个顶点 迷宫中的每个连接器将代表图形中的一条边 连接器可以是: 1.外门 2.外屋 3.外墙 我的问题是,如何从(x,y)坐标构建图形(在运行时,我希望在用户插入坐标时构建迷宫)? 我以前从未在Java(或任何其他语言)中使用过图形,所以我不太清楚如何使用它

我需要生成一个程序,其中包括建立一个迷宫,游戏涉及到60-70名玩家。 问题是,我不想使用网格,因为我认为它会浪费太多内存,而且这种表示(=网格)的复杂性不会那么容易。 经过思考,我决定使用一个图表,其中:

  • 迷宫的每个
    房间
    将代表图形中的一个顶点
  • 迷宫中的每个
    连接器
    将代表图形中的一条边
连接器可以是: 1.外门 2.外屋 3.外墙

我的问题是,如何从(x,y)坐标构建图形(在运行时,我希望在用户插入坐标时构建迷宫)? 我以前从未在Java(或任何其他语言)中使用过图形,所以我不太清楚如何使用它

你能解释一下吗

编辑: 在游戏中,有宝藏,每个玩家至少需要得到一个宝藏。
*每个玩家在游戏中都有自己的步骤(可能类似于优先级队列,可以帮助确定下一个玩家是谁),每个玩家在移动时,可以在迷宫中移动一步

好的,您可以为节点创建一个类,为连接器创建一个基类,该基类可以为具体类型的连接器子类(或具有类型标志),然后在运行时添加连接器和节点之间的关系


你的描述有点含糊,这样就足够了。基本上,图形没有什么特别之处(除非你需要真正大的图形和搜索算法等,但现在这样做太过分了)。

你可以使用带有边表的顶点列表来定义迷宫。实际上,房间列表是图形中的顶点

List<Room> rooms;  // vertex each room will have an x,y location
boolean[][] edges;     // the columns and row are indexes into rooms
列出房间;//顶点每个房间都有一个x,y位置
布尔[][]边;//列和行是房间的索引
因此,边列表将是一个边=新的布尔[rooms.size][rooms.size]矩阵。如果房间1有一个走廊连接到房间2,则边[1][2]=true(您也可以将边[2][1]=true标记)。这样,房间1连接到2,房间2连接到1


对于连接器类型,可以使用枚举而不是布尔值。列举外墙、门、无连接等。

为什么有这么多连接器?当然你只需要门口。这就是我的导师想要的:)所以我必须使用这些说明。那么你对非欧几里德迷宫没问题吧?你不担心你会伤了你球员的脑筋吗?