《英雄之城》攻防公式解析
话说上回研究了下攻击公式,这次我以攻击公式为基础,研究了下防御公式。
主要是英雄防御对部队的影响。
首先,在英雄部队攻击野怪的情况
下 总伤害=攻击兵种攻击力*攻击兵种攻击力/(攻击兵种攻击力+防御兵种防御力)*(1+英雄攻击力%)
这个公式应该是正确的。下面的讨论都基于上述公式。
对于防御公式的研究,我仍然采用了攻击野怪来研究的方式。
具体的方法是,带一队矮人出去让野怪随便打。(矮人:为啥是我们,55555)
英雄防御 50 ,取个整数,比较好计算。
所以,那个,帕梅拉,你脱光衣服带个项链到野外晃荡去。(帕梅拉:人家好歹是mm呢。虽说是亡灵。)
然后实验方式是矮人被僵尸攻击。为什么是僵尸呢? 因为这两个兵种攻防相等,都是24,这样基础伤害就是24*24/(24+24)=12 是一个整数,可以避免小数误差带来的研究误差。
结果如下:
僵尸数目 矮人受到的伤害
1 9
2 18
3 27
很显然,每个僵尸造成的伤害在9~9.33333之间。(哎,野外要找更多僵尸实在很难啊……)
把英雄的防御降低10点,再来一次,结果如下:
僵尸数目 伤害
1 9
2 19
3 28
显然,这次每个僵尸的平均伤害在 9.5-9.63333之间 ,把基础伤害12看做1的话, 防御50的情况下,伤害是0.7777-0.75,防御40的情况下,伤害是0.7916-0.8027 ,这个数据看的人头痛啊。误差太大了。 僵尸多点就好了。(矮人:多了我就挂了。) 没办法了,猜呗。
首先英雄防御加成应该是怎么样的呢?比较常用的是 伤害*(1-英雄加成)这类公式。比如说英雄无敌三里面就是这样,那么英雄之城里面呢? 我觉得可以套进去试试看,试过多次以后发现:假设防御40的情况下,伤害是9,防御50的情况下伤害是9.6 ,那么9:9.6:12=75:80:100=0.75:0.8:1
显然,10点防御减少了5%的伤害,每点防御减少了0.5%的伤害。 而40点防御就减少了20%的伤害,50点防御减少25%的伤害。 这样与结果是吻合的。 所以猜测 防御公式为: 实际伤害 = 攻击伤害*(1-0.5%*英雄防御)。
我又用其他的兵种做实验: 英雄防御50,无加其他属性装备,
疾风狼(攻击38)攻击树人(防御45)
疾风狼数量 伤害
1 13
2 26
幽灵(攻击33)攻击树人(防御)
幽灵数量 伤害
2 20
4 41
疾风狼平均伤害 = 38*38/(38+45)*(1-50*0.5%) = 13.0482
幽灵平均伤害 = 33*33/(33+45)*(1-50*0.5%) = 10.4712
英雄防御75,对兵种无其他加成。
兵力为精灵弓手(防御22) 被野外飞斧(攻击20)攻击
数据如下:
飞斧数目 伤害
19 113
21 125
参照公式:
113=20*20/(20+22)*(1+0)*(1-75*0.5%)*19=113.0952
125=20*20/(20+22)*(1+0)*(1-75*0.5%)*21=125
与上面的结果很完美的符合了 哈哈。于是野外怪物攻击英雄造成伤害的公式为:
总伤害=攻击兵种攻击力*攻击兵种攻击力/(攻击兵种攻击力+防御兵种防御力)*(1-0.5%*英雄防御)
我又在竞技场里约好朋友做了测试,具体参见下表:
50僵尸打矮人(基础伤害=24*24/(24+24)=12)
进攻方英雄攻击 防御方英雄防御 实际结果,/
50 52 594
50 54 588
50 56 582
50 58 576
50 60 570
从上面的数据 可以看到,防御英雄每加2点防御,伤害刚好减少基础伤害(12*50=600)的0.5% ,从侧面验证了(1-0.5%*英雄防御)这个公式因子的正确性。 根据上面的数据,可以推导出的伤害公式为:
伤害=基础伤害*(24*24/(24+24))*(1-0.5%*(防御英雄防御-50))*兵种数量
我转念一想,这50不就是攻击方英雄攻击么,于是公式变为:
总伤害=攻击兵种攻击力*攻击兵种攻击力/(攻击兵种攻击力+防御兵种防御力)*(1-0.5%*(防御方英雄防御-攻击方英雄攻击))*兵种数量
这样的公式可以满足上面的测试结果,但是不满足打野时的伤害数据。
前面我们已经知道,英雄部队攻击野怪的公式为:总伤害=攻击兵种攻击力*攻击兵种攻击力/(攻击兵种攻击力+防御兵种防御力)*(1+英雄攻击力%)
由于野怪相当于防御英雄防御为0,所以前式可以变化一下: 总伤害=攻击兵种攻击力*攻击兵种攻击力/(攻击兵种攻击力+防御兵种防御力)*(1+(攻击英雄攻击力-防御英雄防御力)%)
很显然,两个公式在不同的条件下都是正确的,那么,问题是,这个条件是什么呢?
经过仔细的观察,可以发现,打野怪的时候,相当于防御英雄防御 = 0,于是有 攻击英雄攻击>防御英雄防御,而上述竞技场内测试的情况下,防御英雄的防御>攻击英雄的攻击,当然还有 攻击英雄攻击=防御英雄防御,这种情况下,上面两个公式结果相同,所以,猜测以英雄攻防的高低划分,伤害公式应该如下,分两种情况:
攻击英雄攻击 A 防御英雄防御 D 攻击兵种攻击力 AT 防御兵种防御力 DE 兵种数量 NUM
当A>=D 时
DAMAGE = AT*AT/(AT+DE)*(1+(A-D)%)*NUM
当A< D 时
DAMAGE = AT*AT/(AT+DE)*(1-0.5(D-A)%)*NUM
结果去尾处理。