游戏圈精英吧 关注:842贴子:1,310
  • 16回复贴,共1

【策划-数值】如何高效设计游戏——关于战斗力计算方式的总结

只看楼主收藏回复

前言
  有关于角色的战斗力,大家都不会陌生,几乎每一款游戏都有在计算相关角色的战斗力。 无论采用何种形式、方法,目的只有一个,就是想让玩家比较轻松直接的对比出角色的综合能力。
  在这里,笔者将综合一些情况,与大家讨论一下战斗力的计算方法与有效性验证。
  不过在这之前,按照惯例,还是先给大家讲一下个人的“扭曲”价值观与经验。


IP属地:北京1楼2014-05-08 09:44回复
    游戏策划新人学习交流群 群号【240092795】1000人交流群
    申请进入要求:
    希望进入游戏圈,不管是做策划、运营、市场、商务、媒介,都可以申请加入。
    各公司的HR也可进入,招聘各岗位实习生、新人。
    -----------------------------------------------------------------------------------------------------
    游戏策划交流群 群号【59941158】 2000人交流群
    申请进入要求:
    1.在职游戏策划【端游、页游、手游、TV游不限】
    2.喜爱交流、探讨策划技能经验的朋友
    3.入群请著名公司-职位
    ***************************每周日下午4点半经验分享讲座********************************
    -----------------------------------------------------------------------------------------------------
    游戏圈娱乐交友总部 群号【49232244】1000人交流群
    申请进入要求:
    1.游戏圈从业者【策划、运营、市场、商务、媒介、程序、美术】
    2.喜欢聊天,愿意交友的可以加入


    IP属地:北京2楼2014-05-08 09:48
    回复
      RPG 游戏中的战斗力计算模型
        我们先考虑一种简单的模型。
        游戏角色要想进行战斗计算,首先两个属性是必不可少的,HP、ATK。所以我们先模拟一下 只有 HP、ATK 参与计算的两人对战模型。定义:UnitName(HP,ATK)为一个战斗单位。先我 们有两个战斗单位,其中 UnitA(200,50),UnitB(400,20)。我们假定双方的攻击速度皆为每 单位时间(或者回合)行动一次。那么战斗过程可能为:


      IP属地:北京4楼2014-05-08 09:48
      回复
        第一回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(180,50),UnitB(350,20)
        第二回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(160,50),UnitB(300,20)
        第三回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(140,50),UnitB(250,20)
        第四回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(120,50),UnitB(200,20)
        第五回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(100,50),UnitB(150,20)
        第六回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(80,50),UnitB(100,20)
        第七回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(60,50),UnitB(50,20)
        第八回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(40,50),UnitB(0,20)
        =====UnitB 战败======


        IP属地:北京5楼2014-05-08 09:49
        回复
            我们稍微调整一下 UnitB 的数值,UnitB(400,25),再模拟一次战斗过程,看看会有什么变 化。(由于先手机制造成战斗结果不公平,所以在同一回合内,任一方的 HP 先为 0 判定为该方 战败,若双方 HP 同时为 0,则判定平均)
          第一回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(175,50),UnitB(350,20)
          第二回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(150,50),UnitB(300,20)
          第三回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(125,50),UnitB(250,20)
          第四回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(100,50),UnitB(200,20)
          第五回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(75,50),UnitB(150,20)
          第六回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(50,50),UnitB(100,20)
          第七回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(25,50),UnitB(50,20)
          第八回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(0,50),UnitB(0,20)
          =====双方战平======


          IP属地:北京6楼2014-05-08 09:49
          回复
              我们再来为 UnitB 调整一下数值,UnitB(500,20),再模拟一次战斗过程。
            第一回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(180,50),UnitB(450,20)
            第二回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(160,50),UnitB(400,20)
            第三回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(140,50),UnitB(350,20)
            第四回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(120,50),UnitB(300,20)
            第五回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(100,50),UnitB(250,20)
            第六回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(80,50),UnitB(200,20)
            第七回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(60,50),UnitB(150,20)
            第八回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(40,50),UnitB(100,20)
            第九回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(20,50),UnitB(50,20)
            第十回合 UnitA 攻击 UnitB,UnitB 攻击 UnitA【结果为】UnitA(0,50),UnitB(0,20)
            =====双方战平=====


            IP属地:北京7楼2014-05-08 09:49
            回复
              一个战斗过程的简化运用
                两个战斗单位的战斗过程,就是双方战斗力相减的过程。举例:
                有两个单位 UnitA(200,50),UnitB(300,20),经过战斗力的计算,得 UnitA:10000,UnitB:6000。根据战斗力显示,UnitA 会获得明显的胜利。
              这里有一个方法,可以直接简化战斗过程运算得出结果,我们将双方的战斗力相减,的UnitA的剩余战斗力为4000。按照之前的公式,将这个剩余战斗力除以UnitA的ATK属性,就会获得UnitA的HP属性。根据计算得,UnitA获胜,并且剩余HP为80。请读者自行验证。


              IP属地:北京9楼2014-05-08 09:51
              回复
                  从以上的分析中,我们可以看出,在有 DEF 属性参与战斗计算的时候,一方的战斗力不是 一个定值,并且,三个单位的战斗力也不具有传递性。例如:
                  我们定义一个战斗单位,UnitName(HP,ATK,DEF,SPD)。
                  有如下 3 个战斗单位,UnitA(200,30,10,1),UnitB(450,20,15,0.5),UnitC(200,20,5,3)。
                  经过计算,我们发现三方的战斗力关系是,A>B,B>C,但却 C>A。
                  这是由于,UnitC 的攻击与 UnitB 的防御的差值过小,以至于 UnitC 的每一份攻防差的收益 过低,造成了 UnitC 出乎意料的输给了 UnitB。
                  这种现象不可避免。但是,通过多次试验以及分析函数图像得出,当攻击力远远大于防御 力的时候,这种现象发生的机会将会变少,并且有理由相信,在极限状态下,这种现象将不会存 在。
                
                  因此,我们可以人为的在规划数值的时候,将攻防的差距尽量拉大。从而减少这种现象的 发生。
                  不过,这种现象也是一种策略性的玩法,因为它符合石头剪刀布的封闭克制关系。


                IP属地:北京12楼2014-05-08 09:54
                回复
                  塔防游戏中的战斗力计算模型
                    笔者在之前的文章中已经较为系统的给出了塔防的数学模型,只是那篇文章写的较早,以 现在的眼光看来,比较杂乱无章,所以整理好思路,重新总结一遍。
                    我们定义防御塔拥有三个属性,TowerName(ATK,FRQ,RGE),敌方单位 UnitName(HP, SPD)。已知,敌方单位总是穿过防御塔的攻击范围与路径的交集,在这里我们定义为 ELP(The Effective Length of Path)。
                    若,我方防御塔刚好能够杀死敌方一个单位,则用数学表达式抽象为:



                  IP属地:北京13楼2014-05-08 09:56
                  回复
                    多个防御塔攻击一个敌方单位
                      在这种情况下,由于各个防御塔之间不互相干扰,所以所有防御塔可进行战斗力的加法运 算来衡量我方总战斗力是否能够杀死该敌方单位。
                    多个防御塔攻击多个敌方单位
                      在这种情况下,模型会变得稍微复杂,我们将不能简单的进行加法运算从而对比防御塔与 敌方单位战斗力的大小。
                      这是因为,防御塔的“抬手效应”与敌方单位的队伍间隔会极大影响战斗结果,试想一种 极端情况下,10 个敌方单位聚集在一小块范围下移动,当防御塔击杀第一个敌方单位的时候, 再也无力击杀下一个单位。
                      不过,为了考虑到设计游戏的实际操作性,我们通常会合理规划每个敌方单位的间隔距离, 从而使得方便计算。在这种理想状态下,该模型还是可以良好运行的。


                    IP属地:北京15楼2014-05-08 09:58
                    回复
                      横向对比现有的游戏
                        之前看到很多游戏都有计算过战斗单位的战斗力,但是几乎所有都采用同样的一种方法 -------加权多项式。
                        这种方法原理是,游戏设计者评估一个战斗单位的每一项属性,并且把每一项属性顶一个 权值,最后以加法运算得出战斗力。如:

                        但笔者认为这种计算方式利弊并存。坏处是,这种计算方式并不科学,不能较为可观的衡量该角 色的战斗能力。好处是,这种计算方式直观容易理解,并且对比笔者总结的模型有一个最大的好 处,就是数值小,并且数值增长幅度也小。
                      
                        所以笔者建议,以上数学模型适用于战斗平衡的调整以及数值规划。不建议让用户观看理 解。


                      IP属地:北京16楼2014-05-08 09:59
                      回复
                        结束语
                          至此,想要总结的模型都已结束。
                          不知道大家有没有关心这样一件事情,从以上两个模型,我们都可以看出数学等式的一种 对称美,就好像,被人刻意安排一样。但我认为这并不是一种巧合,我有理由相信对于其他类型 的游戏来说,其战斗力的计算同样为因式的基本模型。
                          其实游戏中的一些数学模型非常简单,只是大家很少去关注,去抽象,去总结。非常希望 有识之士能够一起来总结一些规律,一起来构建起这座大厦。为业内贡献一份力量。
                        注:关于RPG角色数值模型,参考自网易游戏理论研究室的相关资料,但略有修改。


                        IP属地:北京17楼2014-05-08 10:00
                        回复
                          学习下


                          IP属地:福建来自Android客户端18楼2014-05-16 11:29
                          回复
                            防沉,顺便学习下!


                            IP属地:浙江19楼2014-05-24 22:29
                            回复