在Java中生成迷宫,而不是作为网格(即Matrix NxN),而是作为图形

时间:2012-01-19 18:11:12

标签: java algorithm maze

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

  • 迷宫的每个Room代表图中的顶点
  • 迷宫中的每个Connector代表图表中的边缘

连接器可以是: 1.外门 2.外部房间 3.外墙

我的问题是,如何从(x,y)坐标构建图形(在运行时,我想构建迷宫,而用户插入坐标)? 我之前从未使用过Java(或任何其他语言)的图形,所以我不太清楚如何做到这一点。

你可以解释一下吗?

修改 的 在游戏中,有宝藏,每个玩家都需要至少获得一个宝藏。 *每个玩家,在游戏中都有自己的一步(可能是优先队列,有助于确定哪个玩家是下一个玩家),每个玩家在移动时都可以在迷宫中移动一步。

2 个答案:

答案 0 :(得分:1)

那么,你可以为节点创建一个类,一个连接器的基类,可以为具体类型的连接器(或者有一个类型标志)进行子类化,然后在运行时添加连接器和节点之间的关系。 p>

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

答案 1 :(得分:1)

您可以使用带有边缘表的“顶点”列表来定义迷宫。基本上,您的房间列表将是图表中的顶点。

List<Room> rooms;  // vertex each room will have an x,y location
boolean[][] edges;     // the columns and row are indexes into rooms

因此边缘列表将是edge = new boolean [rooms.size] [rooms.size]矩阵。如果房间1有一个连接到房间2的走廊,那么边[1] [2] =真(你也可以标记边[2] [1] =真)。这样你就可以将房间1连接到2,将2连接到1。

对于连接器类型,您可以使用Enum而不是布尔值。 Enum.EXTERNAL_WALL,DOOR,NO_CONNECTION等