典型乘法公式&战斗力算法
乘法公式的基本形式为:
造成伤害=攻击力*(1-免伤率)
乘法公式的优势在于,可以避免由于无限堆积防御,而造成角色接近伤害免疫的情况发生。 同时,游戏中的不同职业,能够通过区分免伤率的初始值和防御-免伤转化率,而很容易的从数值上做出职业差异。 比如同样一件护甲装备,坦克职业穿上能够增加10%的免伤率,刺客职业只能增加5%,谁适合穿这件护甲一目了然。
简而言之,乘法公式很适合强调平衡性和职业差异化的团队对战游戏。 乘法公式的主要缺陷在于,当免伤率接近1时,提升防御所带来的免伤率提升会非常的低。 我们可以通过在免伤率分母中增加等级相关项,抑制免伤率随着防御增加向1逼近的速度,保持角色在高等级时提升防御的性价比。
注意上图中的红线,不包含等级系数的免伤率随着防御提升快速接近1,并且防御VS免伤率提升性价比在接近1的过程中不断降低; 相比之下图中的蓝线,包含等级系数的免伤率随着防御的提升,防御VS免伤率的提升性价比变化不大。 物理/法术两个属性维度
出于增加属性纬度,以及增加游戏内相克的考虑,一般游戏中的攻击/防御都包含物理/法术两种属性。
造成物理伤害=攻击方物理攻击力*(1-受击方物理免伤率)
造成法术伤害=攻击方法术攻击力*(1-受击方法术免伤率) 受击方物理免伤率=物理防御/(物理防御+受击方等级*受击方等级系数+常数) 受击方法术免伤率=法术防御/(法术防御+受击方等级*受击方等级系数+常数) 暴击处理
每次攻击时都要判定是否暴击,需要取攻击方的暴击率,以及受击方的免暴率。
实际暴击几率=max(攻击方暴击率-受击方免暴率,0)
如果触发暴击伤害
暴击攻击力=(1.5+攻击方暴击伤害加成)*默认攻击力
如果没有触发暴击伤害
未暴击攻击力=默认攻击力 穿透和防护穿透会按照百分比减少受击方的防御,而防护会按照相同的规则降低穿透的效果。
受击方实际物理防御=受击方物理防御*(1+max(受击方物理防护百分比-攻击方物理穿透百分比,0)) 受击方实际法术防御=受击方法术防御*(1+max(受击方法术防护百分比-攻击方法术穿透百分比,0))
基本战斗力公式战斗力公式的基本要求是,能够通过比较战斗力大小,来判断两个角色在公平对战中哪一方能够胜出。
可以设定一个理想情况,角色A和角色B都在双方射程内,双方都只携带伤害技能,并且都不通过走位躲避对方普攻和技能,接近LOL中ADC对拼的情况。 这种情况下,A和B谁先把对方击杀,谁的战斗力显然会更高一些。
通过移项可以发现,两个时间的比较,可以转化为下面这两项的比较。