随机地图,或是随机地牢,有很多实现方式。目前比较流行的方法是使用随机房间+剖分三角形加 prime算法生成。
还有一种方式就是反解有权图。个人认为反接有权图布局逻辑更可控一些。
需求
随机生成地图,且尽量扩大变化因子,以下是大致需求内容
- 房间位置随机
- 房间大小随机(可接受倍数)
- 起始房间(出生点)
- 带锁的房间(宝藏房,道具房)
- 终点房间前boss房(boss关卡)
- 钥匙房 (钥匙要出现在锁之前)
- 道具房(装备、解密道具)
- 服务房(存档、购物)
- 有怪房
- 每个房间最多可有包括入口在内的4个门
- 某些房间可以多路互联
设计思路
从我们玩游戏的经验中反向推理,发现人物闯关的行为路线其实是一个多叉树,或是一个有向有权图。所以要搞定随机地图,先要搞定随机内容策划,再考虑铺图的事情
设计一个有向有权图
关于图的基础,不清楚的可以在我的博客中找到《数据基础结构》里面关于图的介绍与计算。
这就是个图:
权值
A
B
C
D
转换成我们需要的样子就是:
路径长度
出生房
有怪房
道具房
boss房
终点房
知道我们的数据结构长的样子,下面就可以考虑构建了。
首先我们要知道房间类型产生的顺序。为什么需要知道这个,因为你不可能出生房紧邻钟点房吧,那还玩个屁呀。一般游戏流程不都是出生点>打怪>捡东西>解谜>打boss>过关 这种么。其中还有些宽度比较大的随机成分,比如是否有宝藏房,有几个。是否打boss,打几个等等,都属于平级可扩展的房子。这些都要考虑进去。下面我将这些房间分成等级,然后就可以按重要程度分配随机因子了。
房间等级
出生房
有怪房
宝藏房
道具房
钥匙房
有怪房
道具房
怪物房
宝藏房
有锁房
终点房
大致是这么个情况。房间顺序从上至下,在同一行的属于平级房。可以看到,像有怪房这样的房间下级房间的种类选择很多。有时候为了增加游戏的难度和游戏时间,这部分可以指定循环生成的次数,达到丰富地图内容的目的。当然,地图的大小、怪物、奖励也要相应的做好调整。毕竟反复的打同样的房子。。。你逗我??需要注意的是钥匙房和锁房的数量要一致,并且钥匙房要出现在锁房之前。否则。。。。作出这么傻逼的游戏玩家一会杀了你。