王者荣耀中的数学原理及游戏策略(一)防御篇(护甲 您所在的位置:网站首页 王者荣耀里的物理穿透怎么算的 王者荣耀中的数学原理及游戏策略(一)防御篇(护甲

王者荣耀中的数学原理及游戏策略(一)防御篇(护甲

2024-07-15 09:51| 来源: 网络整理| 查看: 265

王者荣耀中涉及多种装备,其中,防御型装备有护甲,魔抗,生命值的加成。这些装备到底对于游戏中的增益如何体现,可以通过相应的数据进行研究。

代码地址:https://github.com/Xingxiangrui/KoG_epuipment_enhancement_calcu

目录

一、护甲带来的伤害减免

1.1 伤害减免公式

1.2 伤害比例可视化

1.3 承伤次数

1.4 最大化可承伤总量

1.5 常见装备增益及运算

增益与单位金币增益

1.5 重要结论

二、混合伤害

2.1 混合伤害的公式

2.2 如何最小化可承受伤害

2.3 出装策略

一、护甲带来的伤害减免

我们先来考虑最简单的情况,即对方没有暴击,也没有护甲穿透。并且只考虑护甲与AD带来的伤害计算,不考虑AP情况。

1.1 伤害减免公式

实际伤害,在不考虑穿甲的情况下,实际受到的伤害RAD(real ad,生命值实际损失量)为:

其中:

实际受到的伤害RAD,即我方实际生命值,在敌方AD输出下减去的量AD为对方的物理攻击,比如对方射手攻击力为ADAR为我方护甲值护甲AR越大,则受到的AD伤害的比例越小护甲AR越小,则受到的AD伤害的比例越大,特别的,当AR值为0时,受到AD伤害的比例为100% 1.2 伤害比例可视化

横轴为所受的伤害比例,可以显而易见看出,护甲越大,则受到的伤害的比例越小。护甲越小,则受到的实际伤害的比例越大。

受到的伤害的比例是602/(602+AR), 即602占(602+AR)的比例。

例如,物理防御AR是109的时候,受到AD伤害比例是84.9%当物理防御AR是602的时候,受到AD伤害的比例是50%

我们可以算出护甲值每增加一定的量,减免伤害的比例的增量,护甲值越小,则减免增量越大。

附加可视化代码:

#!/usr/bin/python # -*- coding: UTF-8 -*- """ 运算王者荣耀装备机制 """ import numpy as np import matplotlib.pyplot as plt import math import pandas as pd ################ 1.实际伤害比例与护甲值计算 plt.figure(1) # 比例显示与运算 AR=[] AD_ratio=[] AR_all=np.linspace(0,1500,10) # 0-1500之间的护甲值 for AR_item in AR_all: AR.append(AR_item) AD_ratio.append(602/(602+AR_item)*100) # 画图显示 plt.plot(AR,AD_ratio,marker='o') plt.xlim(0,1500) plt.grid( color = 'blue',linestyle='-',linewidth = 0.3) plt.ylim(0,100) for a, b in zip(AR, AD_ratio): a=round(a,0) #规定一位精度 b=round(b,1) plt.text(a, b, (a,b),ha='center', va='bottom', fontsize=10) plt.title('护甲与AD伤害比例%', fontproperties="SimSun") plt.xlabel('AR护甲', fontproperties="SimSun") plt.ylabel('AD受到伤害比例', fontproperties="SimSun") #plt.show() # 表格显示 AR=[] AD_ratio=[] ratio_decrese=[] AR_all=np.linspace(0,1500,16) # 0-1500之间的护甲值,第三个参数是值的数量 for AR_item in AR_all: AR.append(round(AR_item,0)) AD_ratio.append(round(602/(602+AR_item)*100,2)) ratio_decrese.append(round((602/(602+AR_item)-602/(602+AR_item+100))*100,2)) df = pd.DataFrame(index=AR) df["AD_ratio"]=AD_ratio df["ratio_decrese"]=ratio_decrese HEADER = ''' ''' FOOTER = ''' ''' with open("C:\\Users\\xingxiangrui\Desktop\\照片\\test.html", 'w') as f: f.write(HEADER) f.write(df.to_html(classes='df')) f.write(FOOTER) print("Program done!") 1.3 承伤次数

上面看到,按照护甲与伤害的计算公式,并非线性的关系,而是一个反比例函数的关系。

即护甲越低,则出护甲带来的收益越大。那对于生命值与护甲如何权衡的问题,是否护甲值较低的时候出护甲,护甲值高的时候出生命值,效益就高呢?答案可能并非如此,所以我们将生命值HP加入,加上护甲进行推导。

假定我们生命值为HP,敌方输出为AD,我们实际承受的伤害是

则可以承受伤害的次数为:

可以看出,经过此公式换算之后,假定敌方AD为常数,则能够承受的伤害的次数只与护甲AR与生命值HP有关。

我方生命值为HP,敌方物理输出为AD,我方护甲为AR我方受到的实际伤害为RAD,生命值除以RAD代表可以承受伤害的次数经过化简之后,此值与我方生命值HP,我方护甲AR成线性关系,与敌方AD成反比例关系。很容易理解,敌方AD越高,则我方可以承受的伤害次数越少。我方生命值或者护甲越高,则能够承受伤害的次数越多。 1.4 最大化可承伤总量

装备优化生命值或者护甲的目的,就是最大化可以承受伤害的总量。

可承受AD伤害总量为:

可以承受的总AD伤害是与(生命值HP,护甲AR)相关的函数。最大化承伤总量,就是等价于最大化HP*(AR+602)的问题。

加入护甲穿透的效果

再此基础上,可以加入敌方穿甲带来的效果。假定护甲穿透值ARP(Armor Penetration)

加入穿甲的总效果为  AR-ARP.例如下面这件装备,陨星的ARP为60.所以实际计算的时候护甲值就是AR-60

如果是百分比穿甲,例如碎星锤,可以穿透的护甲百分比,即ARP=0.4AR,所以最终护甲为AR-ARP=AR-0.4AR

对于最终的护甲是先乘后加还是先加后乘?这个优先级的问题需要后续实验给出。

护甲=原始护甲*穿透率-穿透量 or 护甲=(原始护甲-穿透量)*穿透率

暂时按照减法模型,最终加入敌方穿甲所带来的可承受AD伤害总量为:

此公式表示我方可以承受的敌方最大的AD输出量

1.5 常见装备增益及运算

装备通过增加最大生命值HP或者增加护甲AR的方式可以带来最大承受AD伤害的增益:

因此,我们可以看不同装备带来的最大可承伤AD总量。装备带来的可承受AD增量=装备前-装备后单位金币带来的最大可承受AD增量=装备带来的可承受AD增量/装备价格

例如,射手马可波罗的属性:

一级:初始生命值HP=3041,物理防御护甲AR=91,物理穿透ARP=55,魔抗PR=50四级:初始生命值HP=3586,物理防御护甲AR=145,物理穿透ARP=55,魔抗PR=75八级:初始生命HP=4312,物理防御护甲AR=217,物理穿透ARP=55,魔抗PR=109十二级:初始生命HP=5039,物理防御护甲AR=290,物理穿透ARP=55,魔抗PR=143十五级满级时:初始生命HP=5584,物理防御AR=344,物理穿透ARP=55,魔抗PR=169

通过python编写程序运算出可承受的最大物理伤害的物理增益。

#!/usr/bin/python # -*- coding: UTF-8 -*- """ 运算王者荣耀装备机制 """ import numpy as np import matplotlib.pyplot as plt import math import pandas as pd ################ 2.装备带来增益计算 ''' 一级:初始生命值HP=3041,物理防御护甲AR=91,物理穿透ARP=55,魔抗PR=50 可承受最大物理伤害 四级:初始生命值HP=3586,物理防御护甲AR=145,物理穿透ARP=55,魔抗PR=75 八级:初始生命HP=4312,物理防御护甲AR=217,物理穿透ARP=55,魔抗PR=109 十二级:初始生命HP=5039,物理防御护甲AR=290,物理穿透ARP=55,魔抗PR=143 十五级满级时:初始生命HP=5584,物理防御AR=344,物理穿透ARP=55,魔抗PR=169 ''' HP=np.array([3041,3586,4312,5039,5584]) AR=np.array([91, 145, 217, 290, 344]) ARP=np.array([55, 55, 55, 55, 55]) max_AD=HP*(602+AR-ARP)/602 max_AD_sub=[] for idx in range(0,len(max_AD)-1): max_AD_sub.append(round(max_AD[idx+1]-max_AD[idx])) print("1,4,8,12,15级可承受最高AD伤害") print(max_AD.astype(np.int)) print("可承受最大伤害差值:") print(max_AD_sub) #布甲+90,守护铠+210,反伤甲+420 print("220,承伤增益布甲AR+90:") enhanced_AD=HP*(602+AR+90-ARP)/602-max_AD print(enhanced_AD.astype(np.int)) #增益量 print((enhanced_AD/220*100).astype(np.int)) #100金币增益量 print("730,承伤增益守护铠+210") enhanced_AD=HP*(602+AR+210-ARP)/602-max_AD print(enhanced_AD.astype(np.int)) print((enhanced_AD/730*100).astype(np.int)) #100金币增益量 print("1840,承伤增益反伤甲+420") enhanced_AD=HP*(602+AR+420-ARP)/602-max_AD print(enhanced_AD.astype(np.int)) print((enhanced_AD/1840*100).astype(np.int)) #100金币增益量 #红水晶 print("300,红水晶HP+300:") enhanced_AD=(HP+300)*(602+AR-ARP)/602-max_AD print(enhanced_AD.astype(np.int)) print((enhanced_AD/300*100).astype(np.int)) #100金币增益量 #力量腰带 print("900,力量腰带HP+1000:") enhanced_AD=(HP+1000)*(602+AR-ARP)/602-max_AD print(enhanced_AD.astype(np.int)) print((enhanced_AD/900*100).astype(np.int)) #100金币增益量 #霸者重装 print("2070,霸者重装HP+2000:") enhanced_AD=(HP+2000)*(602+AR-ARP)/602-max_AD print(enhanced_AD.astype(np.int)) print((enhanced_AD/2070*100).astype(np.int)) #100金币增益量 #不祥征兆 print("2180,不祥征兆:HP+2000,AR+270:") enhanced_AD=(HP+1200)*(602+AR+270-ARP)/602-max_AD print(enhanced_AD.astype(np.int)) print((enhanced_AD/2180*100).astype(np.int)) #100金币增益量 #红莲斗篷 print("1830,红莲斗篷:HP+1000,AR+240:") enhanced_AD=(HP+1000)*(602+AR+240-ARP)/602-max_AD print(enhanced_AD.astype(np.int)) print((enhanced_AD/1830*100).astype(np.int)) #100金币增益量 print("1830+2180,红莲加不祥征兆") enhanced_AD=(HP+1000+1200)*(602+AR+240+270-ARP)/602-max_AD print(enhanced_AD.astype(np.int)) print((enhanced_AD/(1830+2180)*100).astype(np.int)) #100金币增益量 print("Program done!") 增益与单位金币增益

运行结果:

1,      4,     8,      12,     15级可承受最高AD伤害

[3222  4122   5472   7006     8264]

可承受最大伤害差值:

[899.0, 1350.0, 1534.0, 1259.0]  

此处可以看出随着等级增长,属性基本线性增加近似线性的增量显然为了游戏对抗的激烈性考量,滚雪球要线性的滚,给失败者翻盘的机会

一下数组,第一行为装备带来的增益,第二行为每100金币带来的增益:

220,承伤增益布甲AR+90:

[454  536 644 753 834]     各级别购买装备带来的最大可承受AD伤害增益

[206  243 293 342 379]     各级100金币购买装备带来的最大可承受AD伤害增益

看出小件针对单位金币的提升较大。护甲对单位金币提升较大。

730,承伤增益守护铠+210

[1060 1250 1504 1757 1947]  各级别购买装备带来的最大可承受AD伤害增益

[145   171   206   240   266]    各级100金币购买装备带来的最大可承受AD伤害增益

大件有被动属性加成,因此带来的提升没那么大

1840,承伤增益反伤甲+210

[2121  2501  3008  3515  3895]    各级别购买装备带来的最大可承受AD伤害增益

[115    135    163    191    211]      各级100金币购买装备带来的最大可承受AD伤害增益

300,红水晶HP+300:

[317 344 380 417 444]     各级别购买装备带来的最大可承受AD伤害增益

[105 114 126 139 148]     各级100金币购买装备带来的最大可承受AD伤害增益

血量针对AD或者AP带来的提升都不大,但是应对混合伤害提升较大。

900,力量腰带HP+1000:

[1059 1149 1269 1390 1480]     各级别购买装备带来的最大可承受AD伤害增益

[117   127   141   154   164]       各级100金币购买装备带来的最大可承受AD伤害增益

血量装大件或者小件单位金币带来的增益基本持平。

2070,霸者重装HP+2000:

[2119   2299   2538   2780    2960]   各级别购买装备带来的最大可承受AD伤害增益

[102     111    122      134     143]      各级100金币购买装备带来的最大可承受AD伤害增益

2180,不祥征兆:HP+2000,AR+270:

[3173   3525   3995   4466   4818]   各级别购买装备带来的最大可承受AD伤害增益

[145     161     183     204     221]     各级100金币购买装备带来的最大可承受AD伤害增益

混合属性装备带来的提升相对较大,并且有相应的被动增益。

1830,红莲斗篷:HP+1000,AR+240:

[2670   2977   3386   3797   4104]   各级别购买装备带来的最大可承受AD伤害增益

[145     162     185     207     224]     各级100金币购买装备带来的最大可承受AD伤害增益

1830+2180,红莲加不祥征兆

[6771   7430   8308   9191    9850]    各级别购买装备带来的最大可承受AD伤害增益

[168    185     207     229       245]      各级100金币购买装备带来的最大可承受AD伤害增益

两件类似属性装备叠加,总体提升较大。因为公式中是二次函数式的增加,HP增加,则可增加AR带来的增益,反之亦然。 1.5 重要结论

根据上面单位增益进行运算发现

仅仅出增加HP的装备,则单位金币带来应对AD的增益较低单出护甲,则应对AD伤害增益较高大件带来的单位增益比小件更低。(大件的价值更多的来自于被动效果,也就是小件撑被动,小件撑属性)混合血量和护甲带来的AD增益高大件混合型装备虽然金币上有一些差距,但是单位金钱对于属性的增益基本一致,因此出装时可以更关注被动多件同属性装备叠加带来的增益高。例如红莲斗篷与不祥征兆,单个增益均不如两个叠加带来的增益高 二、混合伤害 2.1 混合伤害的公式

实际收到的伤害是AD伤害与AP伤害一起叠加。

其中,因为敌方AD带来的生命值损失量RAD为:

这个公式前面已经解释过,RAD是己方生命值的扣除量,AD是敌方的AD输出,AR是我方护甲,护甲用于对敌方的AD输出进行比例缩减

同理,我方因敌方带来的AP造成的生命值损失RAP为:

类比AD的情况,RAP是己方生命值的扣除量,AP是敌方的AP输出,PR是我方魔抗,魔抗用于对敌方的AD输出进行比例缩减

最终,受到的所有AP,AD伤害为:

2.2 如何最小化可承受伤害

可承受的伤害,相当于己方已有的生命值HP,除以敌方因为AP,AD输出带来的我方总的生命值的扣除量。

类似于一个调和平均数的东西。

假定HP,AD,AP为常数,最小化此值需要:

AD/(602+AR)=AP/(602+PR)即602+AR与602+PR与AD,AP成比例

加入真实伤害(AT)后:

2.3 出装策略

如果敌方AD较多,则多出护甲大件收益高

如果敌方AP较多,则多出魔抗大件收益高

如果敌方AP,AD混合,或者真实伤害AT较高,可以在出了魔抗和护甲的基础上出血量。

 

 

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有