初上手
想实现一个游戏的伤害运算模拟
要求是首次程序开始运行时输入Health DefenceA DefenceB EnduranceA EnduranceB五个变量
此后每次运行时输入Arm Leg Head Power Penetration Velocity Damage七个变量
一直到Health<=0时彻底结束运算回到首次开始运行的状态
现在有两个问题
1.如何实现这种以上一轮计算结果带入下一次运算的效果(也就是在Health<=0之前,只进行受到命中后的那一段流程)
2.如果要每一次计算后,Health DefenceA1 DefenceB1 EnduranceA1 EnduranceB1这五个变量最多保留小数点后2位(可以去尾可以进1或者四舍五入都行,这点误差无所谓),应该如何进行修改
以下是现有代码
#每局游戏开始设定数值
Health=input('目标生命值:')#目标生命值
DefenceA=input('头盔护甲值:')#头盔护甲值
DefenceB=input('躯干护甲值:')#躯干护甲值
EnduranceA=input('头盔护甲耐久:')#头盔护甲耐久
EnduranceB=input('躯干护甲耐久:')#躯干护甲耐久
RateA=2.5#头部伤害倍率
RateB=0.8#腿部伤害倍率
RateC=0.7#手臂伤害倍率
DefenceA1=DefenceA#当前头部护甲
DefenceB1=DefenceB#当前躯干护甲
EnduranceA1=EnduranceA#当前头部护甲耐久
EnduranceB1=EnduranceB#当前躯干护甲耐久
#每次受到命中后的流程
Arm=input('是否命中手臂,0为否1为是')#是否命中手臂
Leg=input('是否命中腿部,0为否1为是')#是否命中腿部
Head=input('是否命中头部,0为否1为是')#是否命中头部
Power=input('弹药伤害:')#弹药伤害
Penetration=input('弹药穿甲值:')#护甲穿透
Velocity=input('武器枪口初速(单位:km/s):')#枪口初速
Damage=input('弹药护甲损毁:')#护甲损毁
a=float(Penetration)/(float(DefenceA1)+12.5)
if a>1:
a=1
b=float(Penetration)/(float(DefenceB1)+12.5)
if b>1:
b=1
if Arm==1:#判断是否命中手臂
Health=Health-Power*RateC#此处计算手臂伤害
if Health<=0:#这里判断是否死亡
print('你死了')
else:
print('剩余生命值:'+str(Health),'头部护甲值:'+str(DefenceA1),'躯干护甲值:'+str(DefenceB1))
else:
if Leg==1:#判断是否命中腿部
Health=Health-Power*RateB#此处计算腿部伤害
if Health<=0:#这里判断是否死亡
print('你死了')
else:
print('剩余生命值:'+str(Health),'头部护甲值:'+str(DefenceA1),'躯干护甲值:'+str(DefenceB1))
else:
if Head==1:#判断是否命中头部
if float(Penetration)>float(DefenceA1):#判断穿甲值是否高于头盔护甲
print('击穿护甲')
Health=float(Health)-a*Power*RateA#此处计算头部伤害
if Health<=0:#这里判断是否死亡
print('你死了')
else:#这是未致死的结果
EnduranceA2=float(EnduranceA1)-float(Damage)*float(Velocity)#不论击穿与否都要进行削甲
DefenceA1=float(DefenceA)*float(EnduranceA2)/float(EnduranceA)#当前护甲值=总护甲值*耐久百分比
EnduranceA1=EnduranceA2
print ('剩余生命值:'+str(Health),'头部护甲值:'+str(DefenceA1),'躯干护甲值:'+str(DefenceB1))
else:#这是未击穿护甲的运算
print('未击穿护甲')
EnduranceA2=float(EnduranceA1)-float(Damage)*float(Velocity)
DefenceA1=float(DefenceA)*float(EnduranceA2)/float(EnduranceA)
EnduranceA1=EnduranceA2
print ('剩余生命值:'+str(Health),'头部护甲值:'+str(DefenceA1),'躯干护甲值:'+str(DefenceB1))
else:#此处计算命中躯干结果。由于排除头部腿部手臂只剩头部,因此不再加判定命中与否
if float(Penetration)>float(DefenceB1):#判断穿甲值是否高于躯干护甲
print('击穿护甲')
Health=float(Health)-b*Power#此处计算躯干伤害
if Health<=0:#这里判断是否死亡
print('你死了')
else:#这是未致死的结果
EnduranceB2=float(EnduranceB1)-int(Damage)*int(Velocity)#不论击穿与否都要进行削甲
DefenceB1=float(DefenceB)*float(EnduranceB2)/float(EnduranceB)#当前护甲值=总护甲值*耐久百分比
EnduranceB1=EnduranceB2
print ('剩余生命值:'+str(Health),'头部护甲值:'+str(DefenceA1),'躯干护甲值:'+str(DefenceB1))
else:#这是未击穿护甲的运算
print('未击穿护甲')
EnduranceB2=float(EnduranceB1)-float(Damage)*float(Velocity)
DefenceB1=float(DefenceB)*float(EnduranceB2)/float(EnduranceB)
EnduranceB1=EnduranceB2
print ('剩余生命值:'+str(Health),'头部护甲值:'+str(DefenceA1),'躯干护甲值:'+str(DefenceB1))
【以下回答由 GPT 生成】
while
循环来不断执行计算,直到Health
小于等于0。在每次循环中更新Health
以及其他需要更新的变量,然后判断Health
是否小于等于0,如果小于等于0则结束循环,否则继续下一次循环。代码示例:
while Health > 0:
# 每次受到命中后的流程
Arm = input('是否命中手臂, 0为否, 1为是:')
Leg = input('是否命中腿部, 0为否, 1为是:')
Head = input('是否命中头部, 0为否, 1为是:')
Power = input('弹药伤害:')
Penetration = input('弹药穿甲值:')
Velocity = input('武器枪口初速(单位:km/s):')
Damage = input('弹药护甲损毁:')
# 添加伤害计算部分的代码
if Arm == 1:
Health -= Power * RateC
else:
if Leg == 1:
Health -= Power * RateB
else:
# 处理没有命中手臂和腿部的情况
# 更新其他变量的代码
# 判断生命值是否小于等于0,如果小于等于0则结束循环
if Health <= 0:
print('你死了')
else:
print('剩余生命值:', round(Health, 2), '头部护甲值:', round(DefenceA1, 2), '躯干护甲值:', round(DefenceB1, 2))
round
函数来将这些变量保留小数点后两位。在每次计算结束后,使用round
函数将这些变量进行舍入或四舍五入处理,并重新赋值给它们。这样就可以保留小数点后两位,并且进行修改。代码示例(在上面的代码示例的基础上添加):
while Health > 0:
# ...
# 添加伤害计算部分的代码
if Arm == 1:
Health -= Power * RateC
else:
if Leg == 1:
Health -= Power * RateB
else:
# 处理没有命中手臂和腿部的情况
# 更新其他变量的代码
# 将变量保留小数点后两位,并进行修改
Health = round(Health, 2)
DefenceA1 = round(DefenceA1, 2)
DefenceB1 = round(DefenceB1, 2)
EnduranceA1 = round(EnduranceA1, 2)
EnduranceB1 = round(EnduranceB1, 2)
# 判断生命值是否小于等于0,如果小于等于0则结束循环
if Health <= 0:
print('你死了')
else:
print('剩余生命值:', Health, '头部护甲值:', DefenceA1, '躯干护甲值:', DefenceB1)
以上是针对你提出的两个问题的解决方案,如果还有其他问题,请继续提问。