塔防基础数值模型(一)

一直以来都在尝试自己构建一个塔防的数值模型,现在感觉已经理解的差不多了,所以尝试整理一下。 首先要说的是,不同的塔对抗不同的怪会有着不同的战斗效率,因此一个详尽的数值模型表应该是一个二维表,可以评估每一种塔对每一种怪的战斗效率,这样就能找出是否有统治性策略的塔,从而对游戏的平衡性进行游戏。

1,塔

塔的基础属性有以下三部分:

  • DPH:单次攻击的伤害,这里不考虑暴击与攻击上下限浮动。
  • 攻击规模:一次攻击能够攻击到多少个怪物。
  • 攻击速度:单位时间内攻击次数,我们可以1秒或60帧来计算,单位时间同时还会用于怪物移动速度的计算。单位为次/秒。
  • 攻击间隔:攻击速度的倒数,指塔两次攻击之间的时间间隔。单位为秒。
  • 射程:攻击的最大距离。有的游戏中的塔还会有最小距离的设计。

2,怪

怪的基础属性有以下几部分:

  • 生命值:生命值≤0时怪物会死亡。
  • 移动速度:单位时间内移动的距离,可以以1秒或60帧来计算。
  • 时间间隔:若某一类怪是以一组的形式登场,每一只怪与下一只怪刷出时间的间隔。同上,时间单位也可以是秒、毫秒或帧。
  • 空间间隔:时间间隔*移动速度。该组怪在移动时每个怪与下一个怪的间距。
  • 个数:若某一类怪是以一组的形式登场,这一组共有多少个。

3,runtime属性

以下由塔和怪的基础属性计算出来的,在游戏过程中动态变化出来的属性:

  • 有效路径覆盖:指的是某个怪在塔的射程范围内所移动的距离。
  • 通过时间:指的是某个怪通过有效路径覆盖所要消耗的时间,该值=有效路径覆盖÷移动速度。
  • 过量伤害:指的是某个塔在击杀某个怪时浪费掉的伤害值。计算方法为怪的生命值对塔的DPH求余数,若为0,则过量伤害=0;若不为0,则=DPH-余数。
    例:塔的攻击力为3,怪物生命值为6,则过量伤害=0;若怪物生命值为7,则过量伤害=2。塔的攻击力为100,怪物的生命值为20,则过量伤害=80。
  • 击杀次数:指的是某个塔击杀某个怪所需要的攻击次数。计算方法为怪物的生命值/塔的DPH,小数部分向上舍入。
  • 例:塔的攻击力为3,怪物生命值为7,则击杀次数为3。
  • 过量伤害效率:这个值为过量伤害/(DPH*击杀次数),指的是塔击杀某个怪物所浪费的火力所占总火力输出的百分比。0<=这个值<1。
    例:塔的攻击力为3,怪物生命值为6,则过量伤害效率=0。若怪物生命值为7,则过量伤害效率=2/9。若塔的攻击力为100,怪物生命值为20,则过量伤害效率=80/100。
  • 击杀时间:指的是某个塔击杀某个怪所需要的时间,计算方法为击杀次数*攻击速度。
  • 击杀距离:指的是从开始攻击某个怪物到打死这个怪物,这个怪物所走的距离。计算方法为击杀时间*移动速度。
    结论1:若击杀距离>有效路径覆盖,则一个怪也打不死。这个很好理解。
  • 若塔打死了怪物组的第一只怪后,第二只怪还没有进入有效覆盖路径,则该怪物组无论有多长所有怪都会打死,这引出了结论2:若击杀距离<有效路径覆盖且击杀距离<空间间隔,则整个怪物组都会被消灭。
  • 麻烦的是第三种情况下,防御塔能打死几个怪。
    
    012345
    怪    塔
    
    看上面的例子,假设有效覆盖路径为5,击杀距离为4,怪物间距为3。当塔打死了第一个怪的时候,怪物死在了4的位置,第二个怪则已经进入有效覆盖路径1了。当第二个怪被打死在5上的时候,第三个怪走到了2。第三个怪距离不够4了,无法被打死了,因此一共打死了两只怪,计算公式为:
    
    (有效覆盖路径-击杀距离)/(击杀距离-空间间隔)
    ※两个括号中的值都必须为正。
    
    这就是结论3
  • 怪物组强度:这个值等于怪物的HP*怪物的移动速度/怪物的移动间隔。HP的单位为血,移动速度的单位为距离/秒,移动间隔的单位为距离,因此这个值的单位为血/秒
    这个值的意义在于,上一条中的击杀时间只能计算单体攻击的防御塔能否阻止某一个怪物组的通过,却无法计算某个怪物组能否在范围伤害的防御塔的进攻下通过。有了这个值和下一个值,我们就能进行计算了。
  • 有效DPS:这个值在粗略的情况下可以用DPH*攻击速度的方法来计算,但这并不精确,这是因为过量伤害的存在,所以正确的算法是DPH*攻击速度*(1-过量伤害效率)。DPH的单位为血,攻击速度的单位为1/秒,因此这个值的单位为血/秒
  • 若这个值高于怪物组强度,在不考虑攻击规模的情况下,则理论上怪物组一定可以被该塔消灭,即便是在无限长的情况下。
  • 有效攻击规模:这个值因塔的攻击方式而定。在我们仅考虑1个塔对1种怪的时候这个值较为容易计算,而在情况复杂时则难以计算。这个值也是一直以来最麻烦的所在。为了更加方便的估算这个值,我采取以下简化了的防御塔与怪物攻击模型:
    假设防御塔占1个格子,他的周围有8个格子,怪物会从这8个格子中走过,并且怪物同时只会存在在一个格子中。在这种模型中,怪物的移动速度就被替换成了从一个格子走到下一个格子需要的时间的倒数。这种模型的方便之处在于能够简便地指出塔在攻击的一瞬间,每个怪都应该在哪个格子中,这样就能算出有效攻击规模了。
    
    怪 怪 怪
      
    怪 怪 怪
    
    假设某种塔在攻击时,可以对某一个格子内的全部怪物造成伤害,则攻击规模等于那个格子中的怪物数量。假设某个塔能够同时对周围8个格子造成伤害,则攻击规模等于8个格子中所有怪的数量。
    进一步的,若有效DPS*有效供给规模>怪物组强度,则在怪物组长度无限的情况下,也无法通过这个塔。

以上为我能想到的塔防的基础数值模型,可以用来估算绝大多数塔防游戏中塔与怪物组对抗的结果。由于本文已经很长了,还有一些更复杂的涉及塔与怪行为的内容我打算再另写一篇文章。

发布者:Templar Aiur

85后,一个做《星际争霸II》MOD起家的策划,一直在追寻牛逼的道路上徘徊

加入对话

2条评论

留下评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google photo

You are commenting using your Google account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s