游戏开发论坛

 找回密码
 立即注册
搜索
查看: 14253|回复: 25

[讨论] 涉及对抗性属性的公式设计

[复制链接]

7

主题

24

帖子

235

积分

中级会员

Rank: 3Rank: 3

积分
235
发表于 2013-4-30 19:13:57 | 显示全部楼层 |阅读模式
诸位看看,有意见请跟帖。

========================众所周知的分割线========================

0.0 实力的衡量
今有单位1和单位2,各有生命值和伤害能力两项属性,分别为hp1, dps1, hp2,  dps2,令单位1和单位2相互战斗。
hp1 / dps2 * dps1是单位1受dps2攻击,在死亡前所能造成的伤害,与hp2比较,如大于,则单位1胜,如小于,则单位2胜。
   比较 hp1 / dps2 * dps1 与 hp2
等价于
   比较 hp1 * dps1 与 hp2 * dps2
即二者相斗,hp * dps高者胜,它和与之战斗的其他单位的属性没有关系,可将之视为一个单位的绝对实力的衡量。

0.1 魔兽的护甲免伤公式
令两单位为hp1, dps1, armor1, hp2, dps2, armor2
免伤比例 = armor / (armor + 常数)
实际dps = dps * (1 - 免伤比例)
   比较 两单位的实力
等价于
   比较 hp1 / (dps2 * ( 1 - armor1 / (armor1 + 常数) ) ) * dps1 * ( 1 - armor2 / (armor2 + 常数)) 与 hp2
等价于
   比较 hp1 * dps1 * (armor1 + 常数) 与 hp2 * dps2 * (armor2 + 常数)
同上节,可以将hp * dps * (armor + 常数)视为一个单位绝对实力的衡量,不过,一般我们用 hp * dps * (1 + armor/常数)这样的形式,更加直观地显示armor的价值,每一点带来 1/常数的实力提升

假使我们希望在战斗体系中增加其他各种对抗性的属性,并希望它们对于一个单位的实力的影响与其他与之战斗的单位的属性无关,受上述论述启发,故作如下考虑。

========================众所周知的分割线========================

1.命中和闪避
这是一组对抗性属性,命中率 = f (攻击方命中, 被攻击方闪避),是命中的递增函数,闪避的递减函数,实际dps = dps * 命中率。
显然地,设命中率 =  (命中 + 常数a) / (闪避 + 常数b),即有
   比较 两单位的实力
等价于
   比较 hp1 * dps1 * (1 + 命中1 / 常数a) * (1 + 闪避1 / 常数b) 与 hp2 * dps2 *  (1 + 命中2 / 常数a) * (1 + 闪避2 / 常数b)
(中间过程参考上一小节,略)
即得,单位绝对实力 = hp * dps * (1 + 命中 / 常数a) * (1 + 闪避 / 常数b)
常数a 和 常数b的设置,常数a应小于常数b,初始(命中和闪避都为0)时命中率不满,命中才有价值。

2. 暴击和免暴
同样,暴击率 = f (攻击方暴击能力,被攻击方免暴能力)
(假定暴击是两倍伤害)与上节稍有不同,实际dps = dps * (1 + 暴击率)
设(1 + 暴击率) = (暴击能力 + 常数c) / (免暴能力 + 常数d),最终我们能得到单位实力的与前述公式类似的形式。
则暴击率 = (暴击能力 - 免暴能力 + 常数e) / (免暴能力 + 常数d)  其中常数e = 常数c - 常数d
单位绝对实力 = hp * dps * (1 + 暴击能力/常数c) * (1 + 免暴能力/常数d)
常数c 和 常数d的设置,如相等,即表示初始(暴击和免暴都为0)时无暴击,可以考虑使常数c 高于 常数d,使初始时免暴有价值。

对于一次攻击,命中和暴击应单独检定,先检定命中,如命中,再检定暴击。

3. 伤害加深与减免
这个和命中闪避是一样的
伤害比率 = (攻击方伤害加深能力 + 常数f) / (被攻击方伤害减免能力 + 常数g)
单位绝对实力 = hp * dps * (1 + 伤害加深能力 / 常数f) * (1 + 伤害减免能力 / 常数g)
常数f 和 常数g的设置,如相等,即表示初始(伤害加深与减免都为0)时造成100%伤害。
这一条可作为魔兽的护甲免伤计算公式的替代

4.综上,在只考虑这几项对抗属性的情况下
单位绝对实力 = hp * dps * (1 + 命中 / 常数a) * (1 + 闪避 / 常数b) * (1 + 暴击能力/常数c) * (1 + 免暴能力/常数d) * (1 + 伤害加深能力 / 常数f) * (1 + 伤害减免能力 / 常数g)

以上,目的是为了计算方便。

2

主题

310

帖子

522

积分

高级会员

Rank: 4

积分
522
QQ
发表于 2013-5-2 08:47:42 | 显示全部楼层
比较 hp1 / (dps2 * ( 1 - armor1 / (armor1 + 常数) ) ) * dps1 * ( 1 - armor2 / (armor2 + 常数)) 与 hp2
等价于
   比较 hp1 * dps1 * (armor1 + 常数) 与 hp2 * dps2 * (armor2 + 常数)


这步是怎么转换过来的。。数学学的不好,楼主能否讲解一下。。。

0

主题

2

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2013-5-2 22:24:58 | 显示全部楼层
曲正 发表于 2013-5-2 08:47
这步是怎么转换过来的。。数学学的不好,楼主能否讲解一下。。。

hp1 / (dps2 * ( 1 - armor1 / (armor1 + 常数) ) ) * dps1 * ( 1 - armor2 / (armor2 + 常数)) 与 hp2
上面2式用左右式表述(看着费劲,可在纸上演示)
首先将dps2弄到右式 左边有 / ( 1 - armor1 / (armor1 + 常数) ) 和 * ( 1 - armor2 / (armor2 + 常数)) 简单分别计算是 / ( 常数/ (armor1 + 常数) ) 和 * (常数 / (armor2 + 常数))
将除号下的( 常数/ (armor1 + 常数) ) 移到右式
这样两边变为* (常数 / (armor2 + 常数))和* (常数 / (armor1+ 常数))
两边常数同去掉,再将除号/下面的两式转移,就得到了。

2

主题

310

帖子

522

积分

高级会员

Rank: 4

积分
522
QQ
发表于 2013-5-4 19:56:46 | 显示全部楼层
两边常数同去掉,再将除号/下面的两式转移,就得到了。


明白了,多谢。用excel模拟了战斗结果,用“绝对实力值”来衡量确实是完全平衡的。

2

主题

310

帖子

522

积分

高级会员

Rank: 4

积分
522
QQ
发表于 2013-5-9 18:10:10 | 显示全部楼层
这么好的帖子没人看,指点江山的帖子反而讨论热烈,哎呀~~

2

主题

99

帖子

587

积分

高级会员

Rank: 4

积分
587
发表于 2013-5-10 09:56:33 | 显示全部楼层
曲正 发表于 2013-5-9 18:10
这么好的帖子没人看,指点江山的帖子反而讨论热烈,哎呀~~

每日娱乐贴多人看是正常的,哈哈

12

主题

81

帖子

247

积分

中级会员

Rank: 3Rank: 3

积分
247
QQ
发表于 2013-5-13 20:28:30 | 显示全部楼层
感谢楼主分享

0

主题

31

帖子

116

积分

注册会员

Rank: 2

积分
116
发表于 2013-5-13 21:09:54 | 显示全部楼层
有点疑问,LZ这个公式,两个单位绝对实力相等的角色应该完全战平吗?那我一个免爆能力极高的能打得过一个闪避能力极高的角色么。。。

还有上面的命中暴击之类的应该是会有溢出的情况的吧,不可能我一个值无限高而战斗力也无限高吧,顶天了百分百封顶啊。

0

主题

5

帖子

23

积分

注册会员

Rank: 2

积分
23
发表于 2013-5-14 16:00:41 | 显示全部楼层
楼主的思路很好啊,敌我的属性就不相关了;不过平均dps的计算还和触发概率的方式有关,平均dps相乘的话,各个概率出现就是独立的,如暴击/命中/格挡等同时出现。

46

主题

1586

帖子

3523

积分

论坛元老

【游戏哲学大师】

Rank: 8Rank: 8

积分
3523
QQ
发表于 2013-5-16 19:22:00 | 显示全部楼层
需要这么复杂吗?|
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-26 05:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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