如果你也喜欢rogue like,喜欢研究随机生成地图的算法,可以看一下Eagle Island 的开发者分享的这篇文章:
渐进式地图设计思路。
The theory behind beautiful procedural 2D worlds
Eagle Island的世界地图类似Metroidvania,由很多随机生成的小地图(也称为房间)组成。这个游戏是一个横版的2d平台跳跃类游戏,所以本文主要介绍基于瓦片(tile)的小地图的生成方式。
第一步,生成初始房间
根据房间在大地图里的位置,留出入口和出口,然后在剩余位置填充边框。注意房间的尺寸可以任意尺寸,这样会比较自然。
第二步,从角落开始填充凹型块(concave fillers)
如图,角落里填充的块就是凹进去的形状。注意不要覆盖出入口。
第三步,填充凸型块(convex fillers)
如下图中粉色块就是凸型块。
注意,尽量用算法而不是预先设计好的模板来生成这样的凸型块,不然玩家很容易发现重复的地形。
第四步,填充悬浮块(floating fillers)
如图中绿色块。
这些块可以与之前填充好的块重叠,这样可以随机出各种形状的地形。
第五步,测试路线。
现在可以测试这个房间是否拥有一条完整的通线,如下图的白线就是从入口到出口的一条通道。
如果不存在完整的通线,可以考虑挖一条出来,或者重复之前的步骤重新生成一个房间。
第六步,测试路线的可行性。
有通路不代表就可以走。
下图中,左边的平台只能从左侧跳上去,不过不影响。而右边的平台就有问题了,玩家没法跳上去。
第七步,修复路线
下图中,青色块就是升起的地面,这样玩家就可以跳到刚刚没法跳上去的平台了。
哒哒,完成!
最后,填充图片,这样一个房间就完成了。
对比一下,下图中的各个色块就是之前算法中各步骤中生成的。
注:我并没有确认,他们是用这个算法在游戏中动态生成地图,还是基于这个算法设计了一个工具给关卡设计师用。不过,并不影响学习哈。
欢迎关注我的公众号:阿斌的日常,一起开心做游戏。
感谢分享,感觉用这样的思路生成3D洞穴也应该可行的。