基于养成的战力换算---详解战力评估的设计方法
现在的rpg游戏普遍习惯于将玩家的能力转为为一个可以辨识的数值来帮助玩家评估自己和其他人的战斗实力。道具价值,装备价值,养成系统属性价值也都继承这套体系进行评估,因此现在战力评估机制在游戏的养成体系中起着至关重要的作用。
现在普遍认为战力的大小是玩家实力的直接表现,将每个属性值乘以一个系数后相加,即可得到这个角色或系统的战力价值。这种认知存在一定的错误和局限性,我们通常见到的战力评估是一种基于节奏的粗略评估而不是实际的战力体现,因此战力经常会有误差,出现高战力打不过低战力的现象。本文我们将一步一步推导来说明这个问题。
文章导读:
1、基于真实战斗的评估体系
2、基于方便计算的战力误差
3、常用的战力设定方法
4、技能和系统效果战力评估
5、战力压制
基于真实战斗的评估体系
战力的本质是玩家战斗实力的体现,因此战力评估最基础的层面和玩家的属性和战斗公式相关。这里首先要确定玩家战斗的标准模型,我们在战斗公式篇介绍过,一个战斗标准模型包含,生命,攻击,标准回合数这几个最基本的量。
我们在判断谁比较强的时候,就是假设2个单位同事开始进行攻击,谁先杀死对手则算作胜利,若同时间死亡则2者战力对等。因此可以得到如下最基础的公式。
战斗能力强度=攻击力x生命值
推导:假设a的生命值为Ha,a的攻击力为Aa,假设b的生命值为Hb,b的攻击力我Ab那么在时间t回合内a对b造成的伤害为 Aa*t,b对a造成的伤害为Bb*t,假设ab战斗力相等,则表示a和b同时杀死对方。则可以得到如下等式:
Aa*t=Hb
Ab*t=Ha
求解则得到
Aa*Ha=Ab*Hb
基于这样的结论:战力=(攻击力x生命值)*修正系数,加修正系数是为了方面进行查看。
游戏中还有许多其他的属性,我们都会将他们转化为攻击力与生命值的计算公式中进行换算。我们假设:
伤害=攻击-防御
战力=攻击x(生命+防御x回合数)
因为回合数是不稳定的,因此防御在不同的对战中发挥的作用也是不稳定的,因此我们设定防御的价值的时候是基于标准回合数进行计算的。当回合数发生变化的时候,实际战斗力就会发生一定的偏差。然后我们假设增加暴击率和闪避率进去。假设发生暴击产生2倍攻击的伤害,闪避无视一次攻击。那么战力公式转化如下:
战力=攻击*(1+暴击率)*(生命+防御x回合数)*(1+闪避率)
其他属性依次类推得到。
基于方便计算的战力误差
上面的实际战斗效果评估的方式用的人不多,主要原因是玩家在获得装备或物品再系统上获得战力提升的时候,需要能够从数值面板上对其价值进行评估,以上方法就很难进行换算。因此就需要现在比较流行的评估方法,对每一个属性进行评估然后相加。
这种评估方法虽然是不准确的,但是可以接近真实值,我们这里先说明一下如何是不准确的。简单举个例子如下:
假设:标准回合数=10,攻击=100 生命值=1000
那么我们可以设定1点攻击=10点战力,1点生命=1点战力。
那么我们可以得到加法计算这个单位的战力=100*10+1000*1=2000
然后我们根据实际战斗计算得到这个单位的战力实际是
攻击力=200,生命值=500,那么这个单位的战力=200*10+500*1=2500
这里我们让2个角色同时攻击对方,实际上是同时死亡的。看起来似乎误差还挺大,而且这个误差是无法通过调整系数得到对等。
进一步基于增量我们再来看一组例子,可以得到如下的结果:
我们对这个表格进行解析:
若是多个玩家1对玩家2进行攻击。
若是玩家1只能排队对玩家2进行攻击,那么玩家2可以杀死4个玩家1.
若是玩家2只能排队对玩家5进行攻击,那么玩家5可以杀死25个玩家1
一次函数和二次函数随着增长差距越来越大。
其实我们对比这2个公式可以看出。(我不太喜欢用英文缩写,总觉得还得翻译一遍)
战力=攻击力*攻击系数+生命值*生命系数
战力=攻击力*生命值*攻击系数*生命值系数
假设攻击和生命以回合比例b进行投放,那么生命值=攻击力*b
假设攻击系数和生命系数之间的比例为a,那么生命系数=攻击系数*a
代入计算得到
战力=攻击*(a*生命系数+b生命系数)=攻击*生命系数*(b+a)
战力=攻击*生命系数*a*b攻击力*生命系数
若要调整至加法和乘法的战力一致,二者战力之间的关系可化简为 :
(b+a)与a*b*攻击力*生命系数之间的关系
由这里可以看到,回合数b与生命与攻击之间的比值a都是比较小的值,而攻击力是随着成长变大的值,因此可以判断,加法是无法做到准确战力体现的。
鉴于我们一般情况下只用判断同等条件下2个角色之间谁比较厉害。所以我们会通过控制属性投放来忽略这里带来的差异。
我们看不同的设定系数下的实际战力关系
常用的战力设定方法
既然已经明确知道属性评估求和无法准确得到玩家实力,通常我们会通过控制投放节奏来对误差进行控制,尽可能的保证高战力玩家能够打败低战力玩家。
我们可以先设定角色的攻击力和生命值的战力系数。然后根据节奏和战斗公式对这些属性系数进行转换。这里我们假设角色有攻击,防御,生命值,命中,闪避,暴击,抗暴,暴击伤害这几个属性。
技能和系统效果战力评估
技能提供提升战斗力的特殊效果,不同的效果根据其策略范围和能力强弱进行评估。一般技能可以分为增加伤害类型和特殊策略效果类型。特殊系统提供的特殊能力可等同于技能的战力评估。
若是伤害类的技能转化为伤害进行计算。
若是范围伤害战力=伤害x伤害人数1x概率1+伤害x伤害人数x概率2
例如一个aoe可能伤害4个单位,但是大部分时候只能伤害2个玩家。假设技能效果如下
因此这个技能的战力=-攻击系数*100*(1*0.25*100+2*0.3+3*0.25+4*0.2)
若是buff类技能转化为对应增加的属性和存在时间进行计算。
假如一场战斗10个回合,一个技能让敌方晕眩3回合。
那么这个技能的标准强度=标准攻击*攻击系数*0.3
若是属性类的buff,
则这个技能的标准强度=增加的属性转化的战力x0.3
在进行技能的战力评估的时候,同样会出现和以上战力计算同样难以处理的问题。例如增加属性3%,晕眩3秒这类的技能,因为在不同时期所呈现出来的效果是不同的, 因此往往在进行技能处理的时候我们会只根据技能的所处时期进行战力设定,而不是实际战斗能力的强弱,但是我们再进行技能战力平衡计算的时候就需要进行更加准确的计算。上文已经进行过讨论,这里就不再重复。
战力压制
通过以上的结论我们可以得出,由于回合数是动态变化的, 百分比属性的效果是动态变化的,每个属性的价值和实际计算值是变化的,因此做到准确的战力评估是不可能的,尤其在充值游戏里面,同等活跃的前提下, 充值多的玩家打不过充值少的玩家,充值玩家打不过免费玩家是我们希望进行一定程度上的规避的, 为了避免这种情况,我们再进行战斗公式计算的时候,我们会在计算过程中给予战力高的玩家特殊加成。
常见做如下处理。
伤害=实际伤害x(玩家1战力/玩家2战力)
做这样的处理可以一定程度上规避这个问题。但是这么做会加快了高战力玩家对低等战力玩家的战斗节奏。
还可以做如下处理
设定每个等级有一个标准战力。
伤害=实际伤害*(1+玩家1战力/标准战力-玩家2战力/标准战力)
这样可以一定程度上减少
这里只在伤害上做了处理,在进行处理的时候,也可以对判定过程中的生命,攻击,防御,暴击,闪避等其他属性进行处理进行更加细致的调节。
战力评估篇结合上一篇数值公式一起看可能更加清晰,欢迎大家对战力评估提出不同观点,请加公众号或联系作者进行交流和修订。
qq群号:714174640
管理员微信:bigpug
公众号:youxihun2000