我正在设计一个带有随机生成的地牢的游戏。我想将其视为一个连接的,无向的图,其中节点是房间,边缘是门或走廊。然后,我选择一个“侧面”节点作为地牢入口,计算该入口与所有其他节点之间的距离,并确定最远的节点之一是地牢的“目标”(宝藏,上司,公主等)。
我看到了两种生成最终地牢地形的方法:
- 首先生成一个随机图,然后在考虑边缘连接的情况下尝试用随机位置的房间填充2d世界。我认为这有时会很困难,因为可能会将房间生成器“锁定”以尝试将其放置在不可能的地方。
- 生成第一个房间,将它们随机放置在合适的位置,然后将结果映射到节点和边缘。我决定尝试一下。
我的想法包括:
- 首先生成一个包含整个地下城的大房间。
- 在大房间内的任意位置放置一堵墙,将大房间分成2个不同面积的小房间。
- 然后,我继续将每个房间划分为2个,直到它们变得太小或房间总数达到最大值(或其他任何条件)为止。每个新房间都是一个节点。
- 完成后,我检查每个房间并找到所有其他相邻的房间,将2个节点标记为通过边连接。
这样,我确保所有房间在2D世界中都有可能的位置,并通过连接的图形正确映射。
我的问题是连接房间的门和走廊太多。
因此,我想使用一种算法来减少连接的无向图的边数,但最后保持连接状态(所有节点保持可达)。
如果您想知道,您的想法基本上是一个二叉搜索树。我用了 它确实是相当不错的地牢,很容易。:)
—
共产党鸭子
仅供参考:完整的图形在所有顶点对之间都有边,因此(假设不允许有重复的边),您不能删除任何边而仍然有完整的图形。正确的术语是连通图。
—
Michael Madsen
二进制搜索树,连接图,右。我对常规名称感到很失望。
—
Splo