随机地图,或是随机地牢,有很多实现方式。目前比较流行的方法是使用随机房间+剖分三角形加 prime算法生成。
还有一种方式就是反解有权图。个人认为反接有权图布局逻辑更可控一些。

需求

随机生成地图,且尽量扩大变化因子,以下是大致需求内容

  1. 房间位置随机
  2. 房间大小随机(可接受倍数)
  3. 起始房间(出生点)
  4. 带锁的房间(宝藏房,道具房)
  5. 终点房间前boss房(boss关卡)
  6. 钥匙房 (钥匙要出现在锁之前)
  7. 道具房(装备、解密道具)
  8. 服务房(存档、购物)
  9. 有怪房
  10. 每个房间最多可有包括入口在内的4个门
  11. 某些房间可以多路互联
设计思路

从我们玩游戏的经验中反向推理,发现人物闯关的行为路线其实是一个多叉树,或是一个有向有权图。所以要搞定随机地图,先要搞定随机内容策划,再考虑铺图的事情

设计一个有向有权图

关于图的基础,不清楚的可以在我的博客中找到《数据基础结构》里面关于图的介绍与计算。

这就是个图:


权值




A

B

C

D


转换成我们需要的样子就是:


路径长度





出生房

有怪房

道具房

boss房

终点房


知道我们的数据结构长的样子,下面就可以考虑构建了。
首先我们要知道房间类型产生的顺序。为什么需要知道这个,因为你不可能出生房紧邻钟点房吧,那还玩个屁呀。一般游戏流程不都是出生点>打怪>捡东西>解谜>打boss>过关 这种么。其中还有些宽度比较大的随机成分,比如是否有宝藏房,有几个。是否打boss,打几个等等,都属于平级可扩展的房子。这些都要考虑进去。下面我将这些房间分成等级,然后就可以按重要程度分配随机因子了。

房间等级












出生房

有怪房

宝藏房

道具房

钥匙房

有怪房

道具房

怪物房

宝藏房

有锁房

终点房


大致是这么个情况。房间顺序从上至下,在同一行的属于平级房。可以看到,像有怪房这样的房间下级房间的种类选择很多。有时候为了增加游戏的难度和游戏时间,这部分可以指定循环生成的次数,达到丰富地图内容的目的。当然,地图的大小、怪物、奖励也要相应的做好调整。毕竟反复的打同样的房子。。。你逗我??需要注意的是钥匙房和锁房的数量要一致,并且钥匙房要出现在锁房之前。否则。。。。作出这么傻逼的游戏玩家一会杀了你。