游戏设计—游戏中战斗力计算方法(整理)

一、总结

一句话总结:用初始战斗力除以各项初始属性得到各属性的权重,然后加权得出战力计算公式

 

1、设计战斗力计算公式的两种思路?

主要是以属性投放为基础和真实战斗状况模拟两种思路

属性投放为基础用初始战斗力除以各项初始属性得到各属性的权重(权重得到可以通过不同属性比例砍倒对方的时长相同来确定,其实也就是下面的真实战斗状况模拟为基础),然后加权得出战力计算公式

真实战斗状况模拟为基础:用多个实例

 

2、怎么解决属性投放为基础的战力计算方式的“不能精确反应玩家的真实战斗力”的缺点?

通过 战力碾压公式来保证高战力玩家的战斗能力

低战VS高战:低战玩家对高战玩家有效输出按战力差缩减

高战VS低战:高战玩家对低战玩家有效输出按战力差增加

 

3、真实战斗状况模拟为基础的战力计算方式中,怎么知道哪个玩家战力强?

两个人互砍,谁先砍死对方,或者说谁砍死对方用的时间少

其实也就是战斗时长

 

4、真实战斗状况模拟为基础的战力计算方式中,最重要的两个属性承受伤害的能力def,制造伤害的能力atk是静态的还是动态的

都是动态的

承受伤害的能力def,制造伤害的能力atk,都是动态的,这两个数值的结果会随着遇到的对手变动而变动。

 

5、在属性投放为基础的战力计算方式中,怎么得到每个属性的权重?

采用分别递增两个不同的属性,其它属性一样,让他们战斗,让他们同归于尽,就能知道两个属性之间的对应的比例关系。

 

说明:我方敌方对应行是互为敌手的,而且在这个模拟过程中,结果全部是同归于尽(灭敌时间一致)

两方的属性虽然不同,但是干掉对方的时间是一致的,这说明我们可以近似的认为防御2的我方和生命25敌方战斗力相同;防御5的我方和生命50的敌方战斗力相同。

 

6、在最简单的战力计算模型中(只有HP和APK两个属性),战力的计算公式是怎样的?

HP*APK大着战力大

 

 

二、策划基本知识:游戏中战斗力计算方法

文无第一,武无第二,严格意义上来讲战力的评估说到底就是反应参评对象战斗胜率的一个指标,谁的赢面更大,那么他就应该拥有更加高的战斗力数值。

但是这个参考指标只能在一定程度下影响战斗的最后结果,而实际的结果还要看实际操作对象的差别。因为战斗情况复杂多样,在游戏设计中,战力的指标往往无法精确定位为玩家真实战斗力,当下大部分游戏中玩家的战力高低实际上是反应的玩家所获取的战斗数值(攻击,防御等)的综合指标。

总结来看,游戏数值中的战斗力数值需要满足的需求如下(根据侧重点不同而选择优先满足不同的需求,一般情况下战力数值很难完美满足所有要求):

战斗参考:好的战力评估数值,应该最大限度的趋近于玩家真实战斗力,应该对对战双方对战结果有比较精确地预估性(战力数值高低和战斗结果应该具备一致性


·属性指标:玩家战斗力数值应该是对玩家进攻能力(攻击,穿甲,百分比加成),承受能力(生命,护甲,格挡,闪避)各项数值的一个综合评估结果。玩家获取的任何数值都应该在战斗力上有所反馈。

试想一下如果玩家努力的获取了游戏数值而看不到自己战斗力的提升,那会是怎样糟糕的数值体验。游戏数值的投放说到底完全取决于你所希望提供给玩家怎样的体验


成长指示:玩家的战力数值会随着玩家的游戏进度变化而发生变化,会跟随着玩家各项属性的提升而提升。这是比较容易满足的需求。


动态变化:战力的相对性是战力数值公式设计中的一个难点,我们在设计战斗力计算公式时,往往会因为战斗公式本身的复杂性,使我们在对某个个体战力进行评估时需要用到对手的信息。

比如用木头人法标准模板法等都需要有一个固定的指标来作为战力评判的标准,因此根据标准模块计算的战力在反应两个复杂个体对战情况时会有偏差。

从这里开始,我将根据上面我提到的指标来探讨设计战斗力计算公式的思路(主要是以属性投放为基础真实战斗状况模拟两种思路),如有谬误,请别拍砖!

1.1   以属性投放为基础的战力公式设计

实际上目前国内的大部分游戏战斗力的计算都是以此为模板的,这种计算方法的核心思想大概是这样的:

确定一个基础数值模板:(难点:模板的确定)


然后严格控制各项数值的投放比例,这样游戏的任何阶段玩家的角色数值大概如下:


而各项属性的价值换算直接根据各项数值的获取难度来进行计算(投放比例)

即各项数值的战力价值如下:


经过整合处理后即可得到简单的以属性为基础的战斗力计算公式

对该类战力计算公式持怀疑态度的朋友请自行验证《龙之谷》,《全民无双》等游戏中的战力计算方式。验证方法,用初始战斗力除以各项初始属性得到各属性的权重,然后得出战力计算公式。改变属性再来验证这个公式即可。

为什么?

为什么国内很多游戏会以此为基础来计算玩家的战斗力?他到底有什么优点?使用起来又会遇到哪些困难?

1.1.1  属性加权战力计算的特点

·优点:直观,简单,粗暴

千万不要小看直观的作用,实际上游戏玩家,特别以国内游戏玩家为主,他们在玩游戏的时候大多数是受数值体验驱使,而他们的游戏核心追求也是游戏数值,战斗力作为评估玩家战力指标的重要数值,必然会受到玩家的追逐。

一个能够直观的展示玩家游戏进度,游戏属性的战力计算系统会是刺激玩家提升游戏属性重要指标(说得委婉一点,说白了就是卖属性的时候比较好吹嘘

·缺点:不能精确反应玩家的真实战斗力

可能由该方法计算出的战斗力不一定能真实的反应玩家的战斗能力,(评估两个玩家战力高低最正确的方法是让两个玩家对砍,砍翻对方用时更少的战力更高

为了保证战力数值的价值,一般情况下可以通过其他方式来保证该方法计算出的战斗力的指示作用。(一般这类游戏的战斗系统中,会有战力碾压公式,通过战力碾压公式来保证高战力玩家的战斗能力


通过战力公式,能够在一定程度上保证属性加权战力的指示价值,这也是大多数游戏中都会采用的方法。

·难点:怎么确定数值模板和权重?

用属性加权求和来计算战力最大的难点就是各项权重的确定,很显然,在任何游戏中角色属性的基础模板肯定不会是策划一拍脑袋就能决定的,当然也不排除确实有拍脑袋决定数值的情况,但是大多数正规一点的游戏研发团队中,游戏的各项数值虽然不一定经过严格的学术推导,但是肯定会是基于某种需求下的数值建模

实际上,在大多数MMORPG中,角色的初始属性,各项数值的投放比例的参考都基于想要给玩家提供一个合理的战斗体验。

问题来了,什么是合理的战斗体验?

上图已经说明了这个合理需要保证的一个核心指标:战斗时长即结束战斗的合理战斗时长,当然这个合理的时长会因为需求的不同而不同,而时长的计算方式也会因为战斗公式的不同而不同。

关于战斗时长和战斗公式的表述,我会在下一篇文章中详细介绍。(下一篇文章我会详细介绍1V1简单的战斗模拟器制作和战斗模板的确定)

到这里,以属性投放为标准的战力计算公式就告一段落了,下个部分再来探讨以真实战斗能力为基础来计算战斗力的情况。

1.2斗模拟为基础的战力计算公式

以战斗模拟为基础的战力计算公式,一般来说,一个个体的战斗力体现在两个方面:承受伤害的能力def,制造伤害的能力atk

在知道两方的各项属性的前提下,我们是能够精确地对双方战力进行评估的,比如下面这个例子:

事例1:一个100血的战士,看到了一只血为90野猪,战士上去砍野猪,野猪同时开始反击。战士每秒的伤害是20(先略去战斗公式和秒伤的换算),野猪每秒的伤害为10。那么整个战斗过程可以用函数图像表述:


从这个图,我们可以看到一些规律:

战士和野猪的初始血量是整个曲线的起始点,整个战斗过程就是从起始点回到某个坐标轴的过程。整个战斗过程沿着直线移动,这条直线的斜率,就是战士和野猪的输出速度之比。

在这个过程中,我们可以看到,作为互相斗争的双方,都至少存在两个因素,一个是生命,用以保证自己的生存。这个值在有些战斗情况下是人数/耐久等等,也即是前面我所说到的承受伤害的能力def。另一个则是伤害,用以破坏对方的生存,也就是前面提到的制造伤害的能力atk。

而衡量胜负的唯一标准:其实是时间,谁能在最短的时间内破坏对方的生存条件,谁就会获得胜利。所以我们可以得到一个最简单的结论:战斗的结果,取决于一个值:


显然,通过上面的分析,可以得出结论,玩家的战斗力实际上是玩家死之前输出对时间的一个积分。而输出时间正比于玩家承受能力。

所以,在多数情况下可以近似的认为:战斗力=输出*承受,如果以单位的承受作为横坐标,输出作为纵坐标,那么输出与承受所组成的图形面积,就是一个单位的战斗力。如下图:


知道了战斗力在真实战斗过程中的衡量指标,那么是否我们就能如愿的得出一个通用的战斗力计算公式?


举个例子说明找出这样的战力计算公式有多么蛋疼!

事例2:

已知战斗公式:有效输出=己方攻击-敌方防御(一大堆修正巴拉巴拉)

好了,这就意味着在这个公式下玩家的承受能力def=HP+ Arm(护甲)

而输出能力在不知道敌方护甲的前提下输出能力=玩家atk(战力计算在遇敌之前,所以只能用自身攻击数值代替)

这样,看看下面这组图就明白这样的计算方法有多蛋疼。


为什么会这样?

原因只有一个,不管怎么分析,想要得到静态计算战力的公式在基于战斗模拟的前提下都是不现实的

因为衡量战斗力的指标承受伤害的能力def,制造伤害的能力atk,都是动态的,这两个数值的结果会随着遇到的对手变动而变动

但是这也不意味着我们去做这样的尝试没有意义,可能我们很难找到基于战斗公式的衡量玩家真实战斗力计算公式,但是通过一些特殊的手段,我们是能够得出各种数值之间的等价关系的。

在以如下战斗公式为基础的游戏中:


Atk:攻击
Pen:护甲穿透
Def:护甲
可以通过简单的战斗模拟,得出属性与属性之间的等价关系;

前提是投放的时候也要按照一定的比例投放各属性数值,这两个比例不等价,但是这个原则要遵守,比例关系成立的前提是彼此之间线性相关,而各属性线性相关的前提是他们的投放成比例


说明:我方敌方对应行是互为敌手的,而且在这个模拟过程中,结果全部是同归于尽(灭敌时间一致)

两方的属性虽然不同,但是干掉对方的时间是一致的,这说明我们可以近似的认为防御2的我方和生命25敌方战斗力相同防御5的我方和生命50的敌方战斗力相同

根据战斗模拟;最后可以得出基于上述战斗公式,并且以如下模板投放战力时:


可得各个属性对战斗力的贡献系数(权重):


注意:

1、这个权重并不等于投放比例的倒数

2、想要得出线性相关的权重,必要的前提是各种属性的投放比例也是接近线性的(即按照一定的模板投放),理由是,当他们按照一定比例投放,战斗公式可以简化为只有一个参数的公式

      随意投放时战斗公式变量数(多个):


      按比例投放时,战斗公式变量数(一个):


3、关于怎样得到这一组数据方法有很多,消元后理论分析也好,拉表取数值后以大量数据为基础进行回归分析也好,只要能够得出大概的比例就行

4、得到这样的战斗力计算公式后,还需要对其合理性进行验证(怎么验证以后再讲)

 

参考:策划基本知识:游戏中战斗力计算方法-GameRes游资网
https://www.gameres.com/765323.html

 

 

二、如何高效设计游戏——关于战斗力计算方式的总结

前言

  有关于角色的战斗力,大家都不会陌生,几乎每一款游戏都有在计算相关角色的战斗力。
无论采用何种形式、方法,目的只有一个,就是想让玩家比较轻松直接的对比出角色的综合能力。


  在这里,笔者将综合一些情况,与大家讨论一下战斗力的计算方法与有效性验证。

  不过在这之前,按照惯例,还是先给大家讲一下个人的“扭曲”价值观与经验。




  在日常工作中,我们总会发现有一些数值策划,他们的表格做的很漂亮,并且你点击任何
一个单元格,总会让你发现一长串让你无法继续阅读下去的公式,长到令人发指!这些数字环环 嵌套,相互关联,找了半天也很难找到计算的源头。这就是俗称【数值表格的关联性】,并且这 也广泛被业内定位为数值能力好坏的指标,或者
招聘面试数值策划的标准

  笔者忍不住要吐槽,不过我想吐槽的不是【数值表格的关联性】而是这一【自动化】的设
计过程。


  很幸运,我亲眼目睹了几个这样的表格,均出自大师之手。

  所谓的数值规划,我个人理解的作用是——多人合作的时候,能够让其他策划看得懂你在
相关数值设计中的思路,并且也给自己一个总体纲要的规划。但是我看到的一份数值规划表格中, 所有数值全部都关联化,牵一动百,妄图将所有数值设计过程全部自动化。每一个层面,每一个 梯度,每一个兴奋点,每一个时间点,所有数值都存在着一个硬性的标杆公式强行控制每一个数 值。最后所有角色单位的数值也都与之前的“标尺”硬性关联,得出最终数值成品(虽然他还有 余力可以“微调”)。


  笔者想说的是,游戏是一件艺术品,那里面承载了设计者的个性结晶。玩家的需求是在游
戏中获得挑战,获得惊喜,获得心意。不是一套自动化就可以得出的产物。自动化,就意味着里 面许多小细节设计者都忽视了。


  最后那份数值产出,代入到产品中,大家看到了些许问题。他忽视了角色单位的差异性,
因为自动化导致了所有角色数值属性都是线性相关的;他忽视了关卡难度的兴奋感,因为所有关 卡数值全都是线性相关地上升,并且其中还会涉及到关卡的递进难度是否会超出预料的问题;他


  只关注于武器、等级、缘分 BUFF 等综合能力占比,却忽视了这些能力组成在每个阶段变化不一,
所以在代入产品后,发现很多数值超出或低于期望。


  笔者认为,一份好的数值规划,首先需要具有良好的易读性,因为这个不只是给你自己看
的,多数是给别人看的。其次它只起到
规划参考的作用,而不是标尺的作用,不要被自己的数值
规划限制住游戏数值的无限可能。我们制作数值规划的目的应该不会是让今后的数值都在规划数 值中乘以一个系数吧?最后代入产品中,发现处处硬坎,处处单一,然后以“数值不可能是一下 子就出来”的名义“微调”到底。
最后“微调”到亲爹亲妈(那份数值规划)都不认识的地步,
当初何苦花那么长的时间做一份那么华丽的数值规划,意义何在?


  回归本文正题。




RPG
游戏中的战斗力计算模型


  我们先考虑一种简单的模型。

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


  • 第一回合 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 战败======

  我们稍微调整一下 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)


  =====双方战平======

  我们再来为 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)


  =====双方战平=====

  从以上三个结果中,读者们可能会发现一些规律,现在我们将对这个模型进行数学抽象。

  在只有 HP、ATK 两个属性参与战斗计算的过程中,我们判定一方战败的依据是其
HP 为 0。 在一场双角色 A、B 对砍的战斗模型中,判定角色 A 胜利的依据是,谁坚挺的时间长(HP 最后 变为 0 的一方)谁获得胜利:

 

 


  即

 

 


  得

 

 



  由此我们得出,只有当一方角色单位的值 HP*ATK 大于另一方角色单位的值 HP*ATK
才能获得胜 利。


  因此我们将角色单位的值 HP*ATK 定义为战斗力。 我们回头根据上面的 3
场战斗来验证一下结论是否一致?


  一个战斗过程的简化运用

  两个战斗单位的战斗过程,就是双方战斗力相减的过程。举例:

  有两个单位 UnitA(200,50),UnitB(300,20),经过战斗力的计算,得
UnitA:10000,UnitB:6000。根据战斗力显示,UnitA 会获得明显的胜利。

这里有一个方法,可以直接简化战斗过程运算得出结果,我们将双方的战斗力相减,的UnitA的剩余战斗力为4000。按照之前的公式,将这个剩余战斗力除以UnitAATK属性,就会获得UnitAHP属性。根据计算得,UnitA获胜,并且剩余HP80。请读者自行验证。


  基于基础战斗模型引入
SPD(速度)值


  多数游戏对于速度值 SPD 的定义为,该角色单位时间的行动次数 times/time,或者定义为FQR(频率值)。(对于其他的速度值的定义请向此方向转换)
那么基于之前的结论,若角色 A 想要胜出,则:


 

 


  即

 

 



  得

 

 



  由此得出,只有一方角色单位的属性值 HP*ATK*SPD 大于另一方角色单位的属性值
HP*ATK*SPD 才能获得胜利。


  同样的我们将角色单位的值 HP*ATK*SPD 定义为该角色的战斗力。 由于模型同理,笔者将不在这里赘述验证过程,请读者自己验证。

  基于基础战斗模型引入
DEF(防御)值


  在这种情况下,模型变得有些复杂,因为战斗结果不再那么纯粹,一方的战斗力是受对方影响的,为相对战斗力

  这里我们一伤害公式 ATK-DEF 为例进行证明,其他公式所得出的结果虽不同,但是同理。
若 A 胜出,则:


 

 


  即:

 

 



  得


 

 



  到这里,我们可以观察出,一方的战斗力是如何受对方影响的。

  在这种情况下,我们称,该角色的战斗力是相对的,而非绝对的。

  如何在相对中寻找绝对(适用环境局限,需待多方验证)

  从以上的分析中,我们可以看出,在有 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。


  这种现象不可避免。但是,通过多次试验以及分析函数图像得出,当攻击力远远大于防御
力的时候,这种现象发生的机会将会变少,并且有理由相信,在极限状态下,这种现象将不会存 在。


  因此,我们可以人为的在规划数值的时候,将攻防的差距尽量拉大。从而减少这种现象的
发生


  不过,这种现象也是一种策略性的玩法,因为它符合石头剪刀布的封闭克制关系

  塔防游戏中的战斗力计算模型

  笔者在之前的文章中已经较为系统的给出了塔防的数学模型,只是那篇文章写的较早,以
现在的眼光看来,比较杂乱无章,所以整理好思路,重新总结一遍。


  我们定义防御塔拥有三个属性,TowerName(ATK,FRQ,RGE),敌方单位
UnitName(HP, SPD)。已知,敌方单位总是穿过防御塔的攻击范围与路径的交集,在这里我们定义为 ELP(The Effective Length of Path)。


  若,我方防御塔刚好能够杀死敌方一个单位,则用数学表达式抽象为:

 

 


 

 



  由于,在多数情况下,ELP 的长度都与防御塔的范围半径相近,所以有

 

 


  得

 

 

 


  这样,我们得出了一个完美对称的等式,左边全都是敌方单位的属性,而右边全都是防御塔的属
性。因此我们定义一个值 SET 作为衡量双方的战斗力大小的值。对于防御塔来说,其战斗力为

 

 


  对于地方单位来说,其战斗力为

 

 


  当防御塔 ATK*FRQ*RGE 大于敌方单位 HP*SPD 时,则防御塔能够在无干扰的环境下轻松杀死敌
方一个单位;当防御塔 ATK*FRQ*RGE 等于敌方单位 HP*SPD 时,则防御塔能够在无干扰的环境 下刚好杀死一个单位;当防御塔 ATK*FRQ*RGE 小于敌方单位 HP*SPD 时,则防御塔很难杀死一 个敌方单位。


  多个防御塔攻击一个敌方单位

  在这种情况下,由于各个防御塔之间不互相干扰,所以所有防御塔可进行战斗力的加法运
算来衡量我方总战斗力是否能够杀死该敌方单位。


  多个防御塔攻击多个敌方单位

  在这种情况下,模型会变得稍微复杂,我们将不能简单的进行加法运算从而对比防御塔与
敌方单位战斗力的大小。


  这是因为,防御塔的“抬手效应”与敌方单位的队伍间隔会极大影响战斗结果,试想一种
极端情况下,10 个敌方单位聚集在一小块范围下移动,当防御塔击杀第一个敌方单位的时候, 再也无力击杀下一个单位。


  不过,为了考虑到设计游戏的实际操作性,我们通常会合理规划每个敌方单位的间隔距离,
从而使得方便计算。在这种理想状态下,该模型还是可以良好运行的。


  横向对比现有的游戏

  之前看到很多游戏都有计算过战斗单位的战斗力,但是几乎所有都采用同样的一种方法
——-加权多项式。


  这种方法原理是,游戏设计者评估一个战斗单位的每一项属性,并且把每一项属性顶一个
权值,最后以加法运算得出战斗力。如:

 

 


  但笔者认为这种计算方式利弊并存。坏处是,这种计算方式并不科学,不能较为可观的衡量该角
色的战斗能力。好处是,这种计算方式直观容易理解,并且对比笔者总结的模型有一个最大的好 处,就是数值小,并且数值增长幅度也小。


  所以笔者建议,以上数学模型适用于战斗平衡的调整以及数值规划。不建议让用户观看理
解。


  结束语

  至此,想要总结的模型都已结束。

  不知道大家有没有关心这样一件事情,从以上两个模型,我们都可以看出数学等式的一种
对称美,就好像,被人刻意安排一样。但我认为这并不是一种巧合,我有理由相信对于其他类型 的游戏来说,其战斗力的计算同样为因式的基本模型。


  其实游戏中的一些数学模型非常简单,只是大家很少去关注,去抽象,去总结。非常希望
有识之士能够一起来总结一些规律,一起来构建起这座大厦。为业内贡献一份力量。


  注:关于RPG角色数值模型,参考自网易游戏理论研究室的相关资料,但略有修改。

 

参考:如何高效设计游戏——关于战斗力计算方式的总结 – CSDN博客
https://blog.csdn.net/hany3000/article/details/50231479
 

版权声明:本文为Renyi-Fan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Renyi-Fan/p/9517265.html