洞窟类地牢生成

作者:MimicNix
2021-04-19
17 12 0

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 附近)或者宝箱周围陷阱的生成评分就高

大致效果就是这样(图上没显示怪物和陷阱)


本文旨在阐述地牢生成的思路和概念。

实现上有诸多细节,多与细胞自动机与图像处理算法有关。本人精力有限,这里就不多赘述。