gentry09 发表于 2020-10-7 17:52:00

随机障碍物地图的做法分享和疑问

年初的时候就想做一下随机地图,但是当时刚开始学,不敢随便试,用的是二维不重复生成的方式。
这次更新后,发现有个迷宫泰伦的图,想起来可以用一下算法。
基本上网上搜 "迷宫/随机地图/地牢+算法"就有一些介绍和例子了。

因为想做一个生成后有大口子的随机地图,最后用的是细胞自动机方法。具体思路可参照这篇文章https://blog.csdn.net/qq_33951440/article/details/81233857

附件是我用到的基本功能块,基本流程是
1、初始化地图;在地图上随机生成障碍/可通行区域
2、随机/固定位置生成建筑/资源;也试过放到最后,搜索足够大小的可通行区域,然后生成,不过比较缓慢,没采用。
3、演化刷新;依照算法理念,遍历各点,周围障碍多就把当前点设为障碍,周围通道多就把当前点设为通道;一般5次左右就稳定下来了(对应初始化比例54左右)。
4、区域生长法标记地图;主要是查看有没有封闭区域,有就得打通
5、依照上一步的结果,如果有封闭区域,就打通;本来是想找两个封闭区域间最短的距离,然后打通,执行起来比较麻烦,改用搜索每一列是否存在两个区域,有就从那里开始找随机格子按左上下右的方向顺序打通的方式
生成的地图大概这样,绿色是障碍物,蓝色是基地,其它就是通行区域。


目前,问题有2个
1、如果每个点的障碍物用一个建筑表示,占有资源比较多,大概5000个左右小地图就会闪烁,如果取消小地图上的建筑显示,那又不好判断哪个地方是可通行区域,哪个地方是障碍。不知道用泼溅图能不能在小地图上显示障碍物纹理?
2、除了小地图外,大地图上单位多了也会卡顿。合并相邻多个障碍点,用地形变形演算体+足印表示障碍物区域,好处是相同演算体的地形会自动合并,填充障碍物起来比较容易,但是边缘区域过渡痕迹比较严重,估计得用8个方向的悬崖纹理模型贴上去实现,因为电脑性能不大好,这个暂时无法验证。


附上附件




Nostalie 发表于 2020-10-7 23:30:01

本帖最后由 Nostalie 于 2020-10-7 23:39 编辑

你可以参考研究一下blz防卫局青蛙和七键用马甲单位做的地形编辑器。

yxxiaobin 发表于 2020-10-11 19:44:51

https://bbs.islga.org/read-htm-tid-2800782-page-1-fpage-1.html
这是我以前发过的一篇帖子,里边有一些东西或许会对你有些帮助。
这里边核心的思想就是模块化地形。也就是说,实现预置若干方案,然后抽取后组合,形成实际地形。比如一块地形,我预置3种不同模板,每种模板都会把地形分割一些区域(模板之间不同),每块区域又预置3种不同造型,比如A模板上的左上区域,设计成绿地,绿地可以长树,但树有3中不同长法,右下区域设计成沙地,沙地可以有岩石,岩石也有3中不同摆法。假设每张模板分割出3个区域,每个区域3种变化,那么这张模板实际变化就是3^3=27种,我们做3张模板,那么一块地的生成样式就会有81种。我们只需要设计10快以内的地,就能做出全变万化的效果。然后根据地和地之间的区别,规定哪块地不能和哪块地连接。也可以做成任意组合无限拼接方案,只是会比较费脑子(具体参考无限拼接地板砖的设计)。
这样的动态地形好处有几种。1,能够更好处理过渡,相比之下完全随机更容易出现生硬的过渡。2地形处理简单,无论是新增还是还原,需要记录的数据都会大幅度减少。

基本含义 发表于 2020-12-18 18:16:32

感谢楼主分享的模板,奈何我太笨根本没看懂,我想问我可以在自己的地图里直接使用这个模板吗,如果可以但有什么要求的话请联系我,这是我的qq号:292428249

gentry09 发表于 2021-7-2 21:19:41

基本含义 发表于 2020-12-18 18:16
感谢楼主分享的模板,奈何我太笨根本没看懂,我想问我可以在自己的地图里直接使用这个模板吗,如果可以但有 ...

随便用,不客气。
这是为了分享和讨论用的模板。

OB~ 发表于 2021-7-7 13:13:56

Nostalie 发表于 2020-10-7 23:30
你可以参考研究一下blz防卫局青蛙和七键用马甲单位做的地形编辑器。

这个公开发布了吗?请问叫什么名字,B站只能看见演示视频
页: [1]
查看完整版本: 随机障碍物地图的做法分享和疑问