Nova 编辑注
这又是一片涉及洞窟类地牢生成方法的文章,更多的是实现的思路,其中的部分内容跟我们之前发布的一篇文章《随机生成 Tile Based 地图之——洞穴》极其相关,建议同时阅读:
https://indienova.com/indie-game-development/procedural-content-generation-tile-based-random-cave-map/
前言
最近在扩展地牢类型
首先实现的是洞窟类地牢
一、洞窟生成
具体的实现方法是采用元细胞自动机,因为看起来的效果最自然。
实现流程
- 首先在地图上生成随机墙(45%)
- 用元细胞自动机 45 规则迭代
迭代 5 次
洞窟的雏形已经显现
但是地牢的所有位置都应该可以抵达。
有两种方法可以解决:
- 填补小的空洞
- 将较大的洞窟连通起来
流程:
- 首先用 FillFlow 算法检测出所有连通区域
- 计算所有区域面积
- 只保留面积最大的几个,过小的洞直接填掉
- 将剩下次一级的洞窟的中心点去比对最大洞窟区域的点,找一个最近的位置。
- 然后再从这个位置找一个本洞窟最近的点,然后挖个通道过去
挖通道可以用直线,也可以用随机的趋势去走。
二、地牢的内容放置
1. 首先要考虑的是出入口
流程
对洞窟生成一张评分图
评分的依据是这个点周围 9*9 的格子中有多少个墙
上图中左上角就是地牢的评分图
越是冷色调,评分越高
随机挑选一个评分最高的位置放置入口
然后将这个点周围的区域评分清零(也就是变成红色)
然后在剩余最高评分的几个点中挑一个离入口最远的地方放置出口
然后再将出口地区周围评分清零
以后每次放置一个地牢元素后都要把该点周围的地区评分清零,避免地面元素过于聚拢
2. 接下来就是放置宝箱祭坛等元素
可以利用地牢出口的生成方法继续生成
但是有时候有些元素你会希望他们生成在角落中,这样就需要重新生成一张评分图
例如首先本格是空地,然后周围墙的元素越多评分越高。当然原本有墙的地方评分是 0
然后检测之前生成过的元素,将部分区域评分提高或者拉低
然后再利用这张评分图去放置你所需要的元素
3. 怪物陷阱的生成
同理,可以参考用评分图的方式去生成。
比如空旷地区评分较高,如果加上宝箱那就更高
部分群居的怪物还可以增加周围区域本类怪物生成的评分
通道地域(墙与地面 1:1 附近)或者宝箱周围陷阱的生成评分就高
大致效果就是这样(图上没显示怪物和陷阱)
本文旨在阐述地牢生成的思路和概念。
实现上有诸多细节,多与细胞自动机与图像处理算法有关。本人精力有限,这里就不多赘述。