王者荣耀中的数学原理及游戏策略(一)防御篇(护甲魔抗伤害运算机制)
王者荣耀中的数学原理及游戏策略(⼀)防御篇(护甲魔抗伤
害运算机制)
王者荣耀中涉及多种装备,其中,防御型装备有护甲,魔抗,⽣命值的加成。这些装备到底对于游戏中的增益如何体现,可以通过相应的数据进⾏研究。
⽬录
⼀、护甲带来的伤害减免
黄冈中考查分我们先来考虑最简单的情况,即对⽅没有暴击,也没有护甲穿透。并且只考虑护甲与AD带来的伤害计算,不考虑AP情况。
1.1 伤害减免公式
实际伤害,在不考虑穿甲的情况下,实际受到的伤害RAD(real ad,⽣命值实际损失量)为:
其中:
实际受到的伤害RAD,即我⽅实际⽣命值,在敌⽅AD输出下减去的量
AD为对⽅的物理攻击,⽐如对⽅射⼿攻击⼒为AD
AR为我⽅护甲值
护甲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.ylim(0,100)
for a, b in zip(AR, AD_ratio):
a=round(a,0) #规定⼀位精度
b=round(b,1)
<(a, b, (a,b),ha='center', va='bottom', fontsize=10)
世界文化遗产名录
plt.title('护甲与AD伤害⽐例%', fontproperties="SimSun")
plt.xlabel('AR护甲', 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 = '''
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
'''
FOOTER = '''
<img src="%s" alt="" width="1200" height="600">
</body>
</html>
'''
with open("C:\\Users\\xingxiangrui\Desktop\\照⽚\\test.html", 'w') as f:
f.write(HEADER)
f._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⾦币增益量

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论