随机性、合理性——跑酷类游戏无限生成关卡算法研究

2016-03-19

GameRes游资网授权发布 无限续关类游戏(类似天天酷跑)是如何无限生成关卡的?其中运用了什么算法?

本人就个人理解和实践经验做一些归纳和解释,同时带上编程和设计思路:

1. 首先,关键就是随机。


这里提到的“无限”实际上就是一个随机的过程。随机保证不断有关卡出现在玩家眼前同时又让有玩家有新鲜感,造成“无限续关”的感觉(以下伪代码);

2. 解决了随机问题,接下来就是合理问题。

如何让新生成的关卡符合玩家之前的游玩体验,并且保证是可以通关的?可以用两种方式解决:

(1)约束,对新生成的元素(如怪物、地形等随机点)做出一定的限制,以使其符合之间设计的关卡通识。在此用Minecraft的生成算法举个例子,例如怪物只能在晚上出现(时间变量限制),只能在亮度低的地方出现(生成时若检测亮度数值不符合则不生成),例如沙砾会在水边生成(检测周围地格)等,这些附加条件都属于约束,以保证新生成出来的关卡与原来的关卡保持合理一致;

  1. 循环(地形生成周期)
  2. {
  3.   如果(条件合理 如:目前地形 == 沙漠)
  4.      生成沙砾();
  5.   或者(目前地形 == 海洋)
  6.      生成水面();
  7. }
复制代码

(2)模板,用固有的(或者可以调整某些参数的)关卡模板(一组预先定义好的生成函数)来生成新关卡。这种方式生成的关卡变化较小,但往往设计感较强。而且通过调整参数(怪物浓度、资源密度、水域宽度等)可以创造出具有相当差异的新关卡。同时这种方式对合理性的解决往往更加有效稳定,相比之下随机约束的方式有时考虑不周产生“坏关”或“卡关”的概率会高一些。不过模板法相对的对游戏设计的要求更高一些(以下伪代码)

  1. 循环(地形生成周期)
  2. {
  3.   整数 a = 随机正整数;
  4.   如果(a 等于 1)
  5.     随机生成();
  6.   或者(a 等于 2)
  7.     碎裂地形模板();
  8. }

  9. 碎裂地形模板(碎裂程度,砖块浓度)
  10. {
  11.   循环(地形生成周期)
  12.   {
  13.     如果(条件合理 如:目前地形 == 沙漠)
  14.        每 砖块浓度
  15. 生成 碎裂程度的 砖块;
  16.   }
  17. }
复制代码

这两种方法并不冲突,可以兼而有之。在跳跃游戏《涂鸦跳跃》(Doodle Jump)中,玩家既会遇到随机生成的跳板,也会遇到有预先设计好的跳板群(例如一条就塌需要连跳的一段关卡),可以说随机生成的部分考验了玩家的基本素质(底力),而模板部分考验了玩家的经验。两种方法结合,给玩家更佳全面的体验。


图左方的黄色跳板跳过之后便会开始碎裂,需要连续向上移动,是预先设计好的模板生成的。图右方的部分则是随机生成。

3.关于难度递增问题。

通过调整上述生成算法中的参数、环境值、变量等,难度会自然而然地提升。但是若要做到合理量化,这就涉及到数值策划的数学问题了,首先需要一个数学模型来说明“难度”这个目标量是如何随着“怪物浓度”、“可站地格”等数值变化的。这个模型应由设计者结合关卡结构和实际体验决定。

例如: (α为难度值,β为怪物浓度,γ为可站地格)

其次,设定难度增长曲线。也就是难度随着时间、关数等增长的函数。

例如: (α为难度值,λ为递增参数,χ为当前时间)

这是一个简单的难度增长曲线,难度随时间线性增长。

之后,根据难度增长曲线,确定变量随时间增长的函数

联立得

就是最终怪物浓度,和可站地格随时间和另一个参数变化的公式。

相关阅读跑酷游戏关卡设计怎么实现难度量化?


最新评论
暂无评论
参与评论

商务合作 查看更多

编辑推荐 查看更多
【爆款新游】【潜力佳作】分析系列
推广