乘法公式下的战斗力计算

发表于2015-07-31
评论3 6.4k浏览

用数值来衡量角色的战斗能力对于玩家和策划都是非常有意义的。对于玩家来说,战斗力是养成结果的最直观体现,是玩家养成成就感的最直观来源。对于策划来说,角色战斗力是人物在战斗上的标尺数值,直接影响关卡战斗数值、职业平衡等等;同时,战斗力也是战斗数值和养成数值的接口,是调节养成节奏、控制不同档次玩家差距、分配不同养成系统权重时的最重要参考。


    Einsphoton先生《如何高效设计游戏——关于战斗力计算方式的总结中给出了战斗力计算的基本概念,并给出了一个基于减法公式的相对战斗力的简单例子,但并未涉及乘法公式的内容。

 

    众所周知,乘法公式是游戏常见的另一种计算公式,两者各有特点,并没有优劣之分。但在计算战斗力时,乘法公式比减法公式要简单,且能得到更精确的结果,即绝对战斗力


 

  另外,有了绝对战斗力,我们就可以很方便的解决和战斗力比较相关的问题,如一个人能同时打几个怪等。


 

一、战斗力计算基础


 

    游戏角色战斗必不可少的两个基础属性是攻击和血量,其中攻击的概念可以被抽象成单位时间的伤害,在回合制游戏里就是攻击,在更多的情况下就是DPS。

 

若角色A可以战胜角色B,则易得:

 

     乘法公式下的战斗力计算

 

    即A在B之前杀死了对方,将上式变形可得:

 

     乘法公式下的战斗力计算

 

    当上式满足时,角色A一定可以战胜角色B,反之亦然,因而战斗力的最基础形式即为:

 

     乘法公式下的战斗力计算

 

二、乘法公式下的绝对战斗力


 

     在纯粹的乘法公式体系下,所有的战斗属性都可以被等效成攻击和血量。在此,令考虑攻击、暴击、攻速等属性后的单位时间伤害为等效攻击。同理,等效血量即为考虑生命、护甲、闪避等属性后的角色生存能力。下面以一个基于乘法公式的战斗模型为例来介绍乘法公式下的战斗力计算及其“绝对性”。

 

     设玩家有攻击Atk、暴击Crt、血量Hp、护甲Arm四种属性,战斗逻辑是每秒攻击一次,先根据暴击率判断是否暴击,进而得到最终伤害,再根据对方护甲减伤比将最终伤害减少成实际伤害,最后将对方血量扣除实际伤害。

 

     常见的暴击率CrtRatio和护甲减伤比ArmRatio公式如下:

 

     乘法公式下的战斗力计算

    其中k为一个常数,powerLv是根据等级得到的一个等级修正系数。

 

    当时间足够长时,暴击实际就是将攻击力提升一个固定的百分比,令暴击伤害为150%,则等效攻击EqAtk为:

 

     乘法公式下的战斗力计算

 

    另一方面,护甲减伤比实际是将血量增加了一部分,则等效血量Hp为:

 

     乘法公式下的战斗力计算

    由上可得,此模型的战斗力为:

 

   乘法公式下的战斗力计算

 

    在打木桩的情况下,此式即为角色的“绝对战斗力”,谁由此式计算的值大,谁就一定能获胜。这得益于乘法公式中的防御类属性(如护甲)可以被准确的换算成等效生命,而不用考虑其与攻击类属性的关系,进而避免了减法公式中需要给定一个参考护甲值的问题。

 

    注意,上式计算的实际上是同等级情况下的战斗力,如果双方具有等级差,powerLv需要做相应的替换,这样才能够得出准确战斗力。在具体工作中,往往只计算同等级的战斗力作为该等级战斗力标准数值,但在做成长比较等跨级战斗力比较时,应记住这种比较是近似的而不是准确的。

 

    另外,由上式易得,四种属性与战斗力都是线性关系,这是乘法公式与减法公式最重要的区别之一,也是乘法公式的两种常见具体形式的设计初衷:

     乘法公式下的战斗力计算


 

  三、战斗力比较


 

    由前文已知,战斗力高的角色一定能战胜战斗力低的,但是在实际工作中,尤其是关卡数值上,我们往往更关心一些更复杂的情况,如一个角色能连续打几个怪物,或者一个角色能同时打几个怪物等等。

 

    当角色A战胜角色B时,有:

 

     乘法公式下的战斗力计算


 

    由上式易得,若角色A能连续战胜N个角色B,则:

 

     乘法公式下的战斗力计算


 

    面考虑角色A能同时打几个角色B。设A能同时打N个B,在此情况下,B方的等效攻击实际上是N个等效攻击B的和,当A打死一个B时,即A输出了一个等效血量B的伤害后,B方的等效攻击降为了(N-1)个等效攻击B,由此可得:

 

     乘法公式下的战斗力计算


 

     这两个公式可以作为关卡和怪物数值设计中的重要参考,具体应用方法很多,在此就不赘述了。需要注意的是,由于减法公式体系下不能很好将等效攻击和等效血量拆开,所以上述两式只在乘法公式上能得到准确结果,这也是乘法公式相对减法公式的一个优点。

 

     四、总结


 

    这周末偶然看到了Einsphoton先生《如何高效设计游戏——关于战斗力计算方式的总结一文,因而写了些很浅显的想法,欢迎大家指正,如果也能对读到的人有所启发,我就很高兴了。


 

    另外,角色战斗力做为战斗数值的基础,还有很多值得研究的地方,我会在有时间时把我浅显的想法继续分享给大家。

 

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

3个评论

  • 破戒僧 2015-08-03 1楼
    个人愚见战斗力和数值量化这2个概念有必要界定一下。 个人认为战斗力还是更倾向于面向玩家,让玩家对自身成长的认识更清晰化的一项数值。 而战斗平衡的量化,则可采取两两比对计算各自的胜负情况。即便采用了生存周期x输出效率的方法计算出了各战斗单位的战斗力,也最终还是会检验一次的吧。无论是计算还是代码模拟。 总之,我认为战斗力就是给玩家看的数据。既然这样,战斗力的计算公式应当极尽可能的简化,其次才是其对战斗力的参考价值。目前就玩家习惯而言,相同的战斗力下,具备更高的战斗能量,也是玩家的追求点之一。玩家称之为战力的虚浮程度。所引用的文章中对属性加权和算法的评价,是不恰当的。实际上大多数主流的卡牌游戏都采用加权和的算法来计算战斗力的。
  • ★紫月★ 2015-08-11 2楼
    建议还是用中文
  • 淡然。     2016-02-12 3楼
    感谢楼主分享,辛苦。