1

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

  • 每个Room迷宫都代表图中的一个顶点
  • 迷宫中的每个Connector都代表图中的一条边

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

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

你能解释一下吗?

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

4

2 回答 2

1

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

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

所以边缘列表将是一个边缘 = new boolean[ rooms.size ][ rooms.size ] 矩阵。如果房间 1 有连接房间 2 的走廊,则 edges[1][2] = true(您也可以标记 edges[2][1] = true)。这样一来,房间 1 连接到 2,房间 2 连接到 1。

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

于 2012-01-19T18:21:02.573 回答
1

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

你的描述有点模糊,所以就足够了。基本上,图表并没有什么特别之处(除非您需要非常大的图表和用于这些的搜索算法等,但现在这将是矫枉过正)。

于 2012-01-19T18:17:55.973 回答