游戏伤害计算模拟两个问题(python编写)

初上手
想实现一个游戏的伤害运算模拟
要求是首次程序开始运行时输入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 生成】

  1. 如何实现在每次运算中将上一轮计算结果带入到下一次运算中? 可以通过使用循环来实现在每次计算后将上一轮的计算结果带入下一次运算。可以使用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))
  1. 如何在每次计算后将Health、DefenceA1、DefenceB1、EnduranceA1、EnduranceB1这五个变量最多保留小数点后两位,并进行修改? 可以使用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)

以上是针对你提出的两个问题的解决方案,如果还有其他问题,请继续提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^