游戏开发论坛

 找回密码
 立即注册
搜索
查看: 12096|回复: 4

[分享] 数值:乘法公式战斗力的计算过程

[复制链接]

1万

主题

1万

帖子

3万

积分

论坛元老

Rank: 8Rank: 8

积分
36572
发表于 2015-11-6 09:47:28 | 显示全部楼层 |阅读模式
本帖最后由 小篱 于 2015-11-6 09:54 编辑

QQ截图20151106094559.png

  文/烽火

  在游戏中,战斗力是角色综合能力的反映。对于玩家来说,角色的战斗力有助于玩家比较和感知其能力;对于策划来说,准确的战斗力评估有助于游戏中角色的能力平衡和成长设计。乘法公式因其自身的特点,战斗力评估也容易做到相对准确,但在实际计算过程中也会遇到一些问题。

  为了问题阐述的完整性,本文在第1、2部分有引用,相关文章在结尾处已给出,以方便大家查阅。本文侧重点在于阐述实际过程的一些问题。

  1.战斗力模型

  为了更清晰的说明问题,将游戏角色的战斗力属性简化为以下几种:

  ATK:攻击力

  DEF:防御、可转化为减伤率DefRatio

  CRP:暴击强度、可转化为暴击率CrpRatio

  HP:血量

  SPD:玩家攻击速度

  其中

  DefRatio=DEF/(DEF+A_DEF*FLV)  A_DEF为DEF相关参数,FLV为等级参数

  CrpRatio=CRP/(A_CRP*FLV)      A_CRP为CRP相关参数,FLV为等级参数

  据此,我们可以得出玩家的有效攻击(EDPS)和有效生命(EHP)。

  EDPS=ATK*(1+CrpRatio*CrpBonus)*SPD     其中CrpBonus为暴击加成

  EHP=HP/(1-DefRatio)

  2.评判标准

  在乘法公式中,通过双方的攻击回合数即可比较角色A和B的实力。即当

   11.png 时,B获胜。

   12.png 时,A获胜。

  经过变形,可知比较 EHPA*EDPSA 与 EDHPB*EDPSB之间的大小关系,即可获得A与B的战斗结果。以上部分仅代表理论情况,未考虑实际的最后一击血量残留、出手顺序等。

  令 QQ截图20151106094300.png

  作为战斗力的评估,同时可以获得另一个优势,通过战斗力的比较,可以获得双方对战后的结果,即战斗力残留。战斗力残留代表着战胜方在战斗结束后的剩余有效战斗力。

  在理想状态下,假设A能够战胜B,

  则A战胜B所需要的的回合数为: 13.png

  B在此过程中造成的伤害为: 14.png

  所以A的剩余有效生命为: 15.png

  在理想状态下,角色A剩余的战斗力为: 000.png

  这对关卡的设计、付费与能力成长,都能提供指导作用。

  3.实际过程

  在实际过程中,ATK、HP等参数分布在游戏的不同系统中。同时ATK、HP等参数也受到表现形式等方面的影响,比如技能/状态效果等,这些参数不能够以集中的单纯数字直观体现,这对战斗力的计算提出了一定的要求。

  游戏中的战斗力计算与实际的数据结构有直接的联系,在此不再做相关展开。

  我们以输出端技能/状态效果为例对EDPS做计算,建立如下的层次:

  EDPS=(ATK数值相加)*(1+ATK百分比加强相加)*(1+ATK其他层次加强)

  *(1+(Crit相加*(1+Crit百分比加强相加)/(FLV*A_CRP)*CRPBONUS))

  *(1+伤害百分比加成)+固定伤害

  将游戏中的装备属性、被动技能、天赋等进行归类。

  如武器攻击数值和人物攻击数值可以划分为ATK数值,但是,对于很多技能效果,我们无法精准的量化其影响,我们会尽量评估一个大致的战斗力效果和参数,如下表中的攻击对相邻单位造成25%。这些参数的评估需要根据游戏的实际情况,甚至在不同PVE,PVP模式中的表现形式都不相同。这一评估过程并不是在战斗力计算的时候完成,在设计技能强度的时候,我们已经需要对技能/效果做相关的数值分配。

  为了满足计算,在EXCEL中建表时,我们增加两列用以评估攻击力,如下表

1.png

  4.战斗力呈现

  在实际游戏中,战斗力的呈现方式是另一个问题。

  如果以上面定义的战斗力模型作为游戏中的实际显示会带来如下问题。随着等级的增加,人物的成长,战斗力越来越高,这种增长并不是线性增长。

  例如,设定以下常规参数:

  初始修正为4个等级单位。即1级拥有5级属性。

  每等级成长5攻击和20血量,血量/攻击的回合比为4。

  当每过10级的时候,每等级成长在基础值上增加25% 。

  则当角色等级达到N时,

  攻击: ATK=(4+N)*5*(1+0.25*INT(N/10))

  血量: HP =(4+N)*20*(1+0.25*INT(N/10))

  战斗力:(4+N)*5*(1+0.25*INT(N/10))*(4+N)*20*(1+0.25*INT(N/10))

  INT为取整计算。

  则战斗力随等级的关系如下表所示

2.png

  从公式可知,战斗力和等级呈平方级数增长。实际过程中,直接显示也无太多的问题,在一些页游中,几百万的战斗力也很常见。

  通常为了实际的表现效果,我们会对最终的战斗力显示进行一定的修正。

  比如

  乘以固定系数,如0.01

  乘以等级相关系数。如 0.2/(4+N)

  开方相关修正。如 10*(战斗力的开方)

  相应效果如下表所示

3.png

  在对攻击和生存段属性价值比比较精准估计的情况下,很多游戏也会采用

  战斗力=有效攻击战斗力+有效生存战斗力

  的方式进行计算,这甚至是主流的计算方式。

  在上文中,如果 EHP/EDPS=ROUND

  则

  战斗力=EDPS*ROUND+EHP

  也有一些其他战斗力评判方法,在此不再赘述,根据自己的实际需求进行调整即可。

  5.说明

  此文最初根据乘法公式的相关文章为基础,先后参考了《如何高效设计游戏——关于战斗力计算方式的总结》和《乘法公式下的战斗力计算》两文,未能展开过多的创新,主要关注点在实际项目中的一些具体计算过程。

  在此一并感谢同事在自己实际计算过程中的指导,谢谢!

  相关阅读乘法公式下的战斗力计算

via:GAD

2

主题

60

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
发表于 2015-11-6 18:32:22 | 显示全部楼层
战斗力最大的作用并不是用来给玩家看的。而是系统之间分配属性的价值,说白了就是每一种属性的价值
这样的算法并不能做到这一点

0

主题

21

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
发表于 2015-11-6 23:02:02 | 显示全部楼层
本帖最后由 aion0209 于 2015-11-6 23:06 编辑

看到文中前10行。。我在想,嗯,终于有一个略微能看一点的、有点上纲上线的文章了。。。。。。。

看到文中第20-30行之后。。。我接着想,这尼玛都是些啥(没有伤害流程判定的说明,你怎么告诉我是1+crit*(crit%+1)?没有命中、闪避的说明,你怎么就算出来的EDPS?)。。。

看到文中第40-50行之后。。。我想,还是算了,不看了吧(然而我没忍住,继续看。。。中间这部分,简直,不知道写出来是想说明啥。。。)

看到最后10行之后。。。我忍不住了:算了,当消遣了(尤其是最后都结论,化简一下“战斗力 = 2 * EHP”???,你在逗我?)。。。

2

主题

9

帖子

161

积分

注册会员

Rank: 2

积分
161
发表于 2015-12-26 11:18:25 | 显示全部楼层
by2120102707 发表于 2015-11-6 18:32
战斗力最大的作用并不是用来给玩家看的。而是系统之间分配属性的价值,说白了就是每一种属性的价值
这样的 ...

可以由战斗力推导出属性价值

0

主题

28

帖子

260

积分

中级会员

Rank: 3Rank: 3

积分
260
发表于 2015-12-28 13:20:36 | 显示全部楼层
by2120102707 发表于 2015-11-6 18:32
战斗力最大的作用并不是用来给玩家看的。而是系统之间分配属性的价值,说白了就是每一种属性的价值
这样的 ...

我的理解,战斗力最大的作用是让玩家明白自己行为产生的结果
玩家不需要知道计算过程.但是需要知道结果
战斗力就是连接属性价值和玩家体验的一个桥梁.脱离任何一方片面的设计都不合适
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-3 01:19

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表