本帖最后由 yy1991 于 2015-4-14 13:36 编辑
--2015.4.14 感谢@crazyq指出本帖的不足,之前的版本在多对多模型时积分计算错误,因此结论会有误差,已修正
0.前言
在计算游戏中多人战斗模型的战斗力时,可能会陷入2个单位就是单个单位2倍战力的误区,然而由于战斗单位的削减导致的输出缩减,多人小队中的单位数量并不是线性加成战斗力的,这个即著名的兰彻斯特定律。
这个模型借鉴了许多网上前辈的思路和方法,尽量清晰明了地将我的想法描述出来,希望能帮助到对这方面有疑惑的新人,也希望能抛砖引玉,让更多大神来一起交流数值方面的想法。
1.战力计算
战力计算的标准以双方战斗时的生存时间为准。
当生存时间存在倍数关系时认为战斗力也存在相应倍数关系。
由此得:
战力=承受*输出=HP*DPS
这里简单举个例子,一个20血2攻和一个10血4攻的士兵,因为其战斗的生存时间相等,他们战力相等;同时他们对10血2攻士兵时比其多生存了一倍的时间,所以他们的战力也是10血2攻士兵的两倍。
2.参数和变量命名
单位数量1 |
单位数量2
|
N1
|
N2
|
承受1
|
承受2
|
H1
|
H2
|
输出1
|
输出2
|
D1
|
D2
|
单位战力1
|
单位战力2
|
F1
|
F2
|
3.公式计算
在具体计算公式之前,我们需要先制定好这些模型的前提。即规定之后的公式能产生的作用的场合:
1.单位总是先攻击同一目标。
2.不考虑AOE攻击。
3.玩家攻击间隔趋近于0。
3.1.一对多战斗模型
不妨先假设N1=1,然后我们计算单位1的战力需变化几倍以对抗单位2 的数量变化。
由于单位2的数量实际上影响到了这一方总的伤害输出,所以我们需要在其数量减少的时间点进行结算,再将所有时间点的结果汇总,可以得到:
第一阶段2对1造成的伤害:
![]()
;
第二阶段2对1造成的伤害:
![]()
;
第三阶段2对1造成的伤害:
![]()
;
……
第N2阶段2对1造成的伤害:
![]()
;
由此得
根据上面的推导可以看到,在一对多战斗模型中,战斗单位数量变化N2倍时,战斗力变化
![]()
倍。
3.2.多对多战斗模型
在多对多模型中,我们需要将攻击力也去掉离散化带来的影响从而建立一个理想化的模型(关于离散化带来的影响可以自己去测算一下),这里N1,N2指当前的单位数量,初始值为N01及N02,
初始条件N1= N01,N2= N02
将以上两式相乘得
从0到t积分得
简单变形得
由此可以看到,在双方攻血不产生变化的战斗过程中,战斗单位的数量对战斗力产生的影响是不变的,也就是
![]()
。所以在多对多的理想化连续战斗模型中,战斗单位的数量变化时,战斗力将会变化与攻血相关的平方倍。
4.结语
我入行半年有余,资历尚浅,写的可能只是很表层很细节的东西,关于战斗建模与战斗数值这一块还有许多值得推敲的地方,模型也可以从各个方面再进行完善,碍于能力所限,我目前只能提供这样一种基础的建模思路。