撰写了文章 发布于 2020-03-10 14:34:21
【翻译】程序化随机地牢生成1
原文地址:https://github.com/adnzzzzZ/blog/issues/1
这篇文章简要地介绍了一种使用代码生成随机地牢的技术,该技术一定程度基于下图展示的技术:

1. 网格生成
生成一个网格图,其中每一个方块我们称为一个网格:

2. 网格难度着色
将其中x个网格涂成红色(表示困难),y个网格涂成蓝色(表示中等),z个网格涂成绿色(表示简单),使 x+y+z=n,n为网格的数量,x,y和z用来控制难度
首先,将x个网格涂成红色,保证没有红色网格相邻
然后,对于每一个红色网格,将其相邻的一个网格涂成蓝色,另一个相邻的网格涂成绿色
最后,用每种颜色剩余的数量将剩余网格随机上色

3. 创建地牢路径
选择两个相距足够远的网格节点,在它们之间开辟一条路径,同时尽可能避开红色房间。
如果你选择了一个适当的x值,由于红色网格之间不能相邻,并且寻路算法也不适合对角线,因此两个网格节点间将创建一条不太直接的路径

对于路径中的所有网格节点,添加与其相邻的红色、蓝色或绿色相邻网格节点,这应该会增加地牢中可行路径和整体复杂性(难度)的可能性

4. 房间的创建与连接
根据预期的房间大小将较小的网格节点合并为较大的网格。保证较高的机率使用较小的宽度/高度,较低的机率使用较大的宽度/高度

生成房间之间的所有可能的连接

随机删除连接,直到满足每个房间一定数量的连接。
如果 n =总房间数量,则将 n * a 个房间的连接数设置为> = 4,n * b 个房间的连接数设置为3,n * c 个房间的连接数设置为 2,n * d 个房间的连接数设置为 1,使得 a + b + c + d = 1
控制 a,b,c和d 可让你控制地牢的复杂程度。 如果 c 或 d 远大于 a 或 b,那么将不会有许多错综复杂的路径,它将会有很多死胡同。 如果 a 或b 更高,则地牢将四通八达,因此也更容易

重新连接孤立的房间。由于最后一步是完全随机的,因此有的房间很有可能无法到达

为了解决这个问题:
找出存在多少个孤立的房间组(很多种算法)
随机选择一个房间组,遍历其中的每一个房间,检查是否与其他房间组里的房间相邻,如果相邻,则连接它们
重复前面的步骤,直到只剩下一个房间组(所有房间组都已连接)

5. 结束语
基本思路就是这样。不过还有更多东西可以扩充,例如:添加特殊房间、将其中一些房间设置成隐藏房间等。
基本上,我在创建新的地下城时会控制一些参数:地下城的宽度/高度; 困难,中等和简单房间的百分比;将哪种颜色的邻居添加到原始路径,以及具有 > = 4、3、2或1个连接的房间的百分比, 我认为通过这些参数足以控制地牢的难度/难度
云梦渊泽 1年前
感觉还可以更抽象
发布
快递安卡拉牛 1年前
发布
助理游戏策划 1年前
https://www.jianshu.com/p/c276127d1125
死亡细胞团队的分享
发布