策划基本知识:游戏中战斗力计算方法
发表于2017-07-21
文无第一,武无第二,严格意义上来讲战力的评估说到底就是反应参评对象战斗胜率的一个指标,谁的赢面更大,那么他就应该拥有更加高的战斗力数值。下面就给大家介绍下策划的基本知识,游戏中战斗力计算方法、
但是这个参考指标只能在一定程度下影响战斗的最后结果,而实际的结果还要看实际操作对象的差别。因为战斗情况复杂多样,在游戏设计中,战力的指标往往无法精确定位为玩家真实战斗力,当下大部分游戏中玩家的战力高低实际上是反应的玩家所获取的战斗数值(攻击,防御等)的综合指标。
总结来看,游戏数值中的战斗力数值需要满足的需求如下(根据侧重点不同而选择优先满足不同的需求,一般情况下战力数值很难完美满足所有要求):
战斗参考:好的战力评估数值,应该最大限度的趋近于玩家真实战斗力,应该对对战双方对战结果有比较精确地预估性(战力数值高低和战斗结果应该具备一致性)
·属性指标:玩家战斗力数值应该是对玩家进攻能力(攻击,穿甲,百分比加成),承受能力(生命,护甲,格挡,闪避)各项数值的一个综合评估结果。玩家获取的任何数值都应该在战斗力上有所反馈。
试想一下如果玩家努力的获取了游戏数值而看不到自己战斗力的提升,那会是怎样糟糕的数值体验。游戏数值的投放说到底完全取决于你所希望提供给玩家怎样的体验
成长指示:玩家的战力数值会随着玩家的游戏进度变化而发生变化,会跟随着玩家各项属性的提升而提升。这是比较容易满足的需求。
动态变化:战力的相对性是战力数值公式设计中的一个难点,我们在设计战斗力计算公式时,往往会因为战斗公式本身的复杂性,使我们在对某个个体战力进行评估时需要用刀对手的信息。
比如用木头人法,标准模板法等都需要有一个固定的指标来作为战力评判的标准,因此根据标准模块计算的战力在反应两个复杂个体对战情况时会有偏差。
从这里开始,我将根据上面我提到的指标来探讨设计战斗力计算公式的思路(主要是以属性投放为基础和真实战斗状况模拟两种思路),如有谬误,请别拍砖!
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、得到这样的战斗力计算公式后,还需要对其合理性进行验证(怎么验证以后再讲)
关于基于战斗模拟的战斗力数值计算现在就讲到这里,等我参悟到了更高明的方法后再来进行补充!欢迎指教!
但是这个参考指标只能在一定程度下影响战斗的最后结果,而实际的结果还要看实际操作对象的差别。因为战斗情况复杂多样,在游戏设计中,战力的指标往往无法精确定位为玩家真实战斗力,当下大部分游戏中玩家的战力高低实际上是反应的玩家所获取的战斗数值(攻击,防御等)的综合指标。
总结来看,游戏数值中的战斗力数值需要满足的需求如下(根据侧重点不同而选择优先满足不同的需求,一般情况下战力数值很难完美满足所有要求):
战斗参考:好的战力评估数值,应该最大限度的趋近于玩家真实战斗力,应该对对战双方对战结果有比较精确地预估性(战力数值高低和战斗结果应该具备一致性)
·属性指标:玩家战斗力数值应该是对玩家进攻能力(攻击,穿甲,百分比加成),承受能力(生命,护甲,格挡,闪避)各项数值的一个综合评估结果。玩家获取的任何数值都应该在战斗力上有所反馈。
试想一下如果玩家努力的获取了游戏数值而看不到自己战斗力的提升,那会是怎样糟糕的数值体验。游戏数值的投放说到底完全取决于你所希望提供给玩家怎样的体验
成长指示:玩家的战力数值会随着玩家的游戏进度变化而发生变化,会跟随着玩家各项属性的提升而提升。这是比较容易满足的需求。
动态变化:战力的相对性是战力数值公式设计中的一个难点,我们在设计战斗力计算公式时,往往会因为战斗公式本身的复杂性,使我们在对某个个体战力进行评估时需要用刀对手的信息。
比如用木头人法,标准模板法等都需要有一个固定的指标来作为战力评判的标准,因此根据标准模块计算的战力在反应两个复杂个体对战情况时会有偏差。
从这里开始,我将根据上面我提到的指标来探讨设计战斗力计算公式的思路(主要是以属性投放为基础和真实战斗状况模拟两种思路),如有谬误,请别拍砖!
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、得到这样的战斗力计算公式后,还需要对其合理性进行验证(怎么验证以后再讲)
关于基于战斗模拟的战斗力数值计算现在就讲到这里,等我参悟到了更高明的方法后再来进行补充!欢迎指教!