Python变量公式返回全部都是1

当学习Python进行RPG游戏编程时,发现所有使用公式的Python变量都返回1,包括self.weapon.wgt、self.strn和self.weapon.impact。然而,这些变量在独立使用时返回的值是正确的。

2、解决方案

导致所有变量返回1的原因如下:

  • 变量使用顺序错误,无法正确计算出公式中的值。
  • 公式中存在逻辑错误,导致计算出的值始终为1。

针对上述原因,可以调整变量使用顺序和修改公式,以确保正确计算公式中的值并得到预期的结果。

代码示例

class Char:
    def __init__(self, name):
        self.name = name
        self.hp = 300
        self.mp = 10
        self.strn = 1
        self.dex = 1
        self.armor = 0
        self.xp = 0
        self.items = []
        self.spells = []
        self.weapon = None

        self.attack_speed = self.dex

        self.intact_bones = ["right arm", "left arm", "right leg", "leg leg",
                            "skull", "sternum", "nose"]  # JUST ASSUME RIGHT SIDE
        # IS PRIMARY SIDE FOR NOW

        self.broken_bones = []  ### define what to do per bone if bone is in this list

        self.base_dmg = 0
        self.break_bone_chance = 0
        self.bleed_chance = 0

        self.strike_dmg = 0

    def break_crit(self, target):
        print("checking break_crit")  # ALL THESE PRINTS ARE TEMPORARY TO TEST THE VARIABLES
        print("self.break_bone_chance = %r" % self.break_bone_chance)
        print("self.base_dmg = %r" % self.base_dmg)
        print("self.strike_dmg = %r" % self.strike_dmg)
        print("len(target.intact_bones) = %r" % len(target.intact_bones))
        print("self.weapon = %r" % self.weapon.name)
        print("self.weapon.impact = %r" % self.weapon.impact)
        print("self.weapon.wgt = %r" % self.weapon.wgt)

        if (randint(1, 100) <= self.break_bone_chance) and (self.strike_dmg > 0) and (len(target.intact_bones) != 0):
            random.shuffle(target.intact_bones)
            target.new_broken_bone = target.intact_bones.pop()
            target.broken_bones.append(target.new_broken_bone)
            print("%s hit %s square in the %s with his %s, cracking his %s!" % (self, target, target.new_broken_bone, self.weapon, target.new_broken_bone))
            self.bleed_crit(target)
        else:
            self.bleed_crit(target)

    def bleed_crit(self, target):
        if randint(1, 100) <= self.bleed_chance and self.strike_dmg > 0:
            pass
        else:
            pass  # GO TO NEXT ACTION

    def attack(self, target):
        ###self.strike_dmg = self.dmg - target.armor # NEED TO ADD A RANDOM ELEMENT TO DAMAGE###
        if self.strike_dmg > 0:
            target.hp -= self.strike_dmg
            print("%s hit %s for %s damage!" % (self.name, target.name, self.strike_dmg))
            self.break_crit(target)
        else:
            print("%s's strike did no damage!" % self.name)


class Equip(object):
    wgt = 1


class weapon(Equip):
    impact = 1
    sharp = 1

    def __init__(self, name):
        self.name = name
    desc = ""


chuck = weapon("Nun-chuck")
chuck.wgt = 3
chuck.impact = 6
chuck.sharp = 0

dean = Char("Dean")
dean.strn = 3
dean.dex = 8
dean.weapon = chuck

dean.base_dmg = dean.strn * dean.weapon.wgt
dean.break_bone_chance = (dean.weapon.impact / 50) * 100
dean.bleed_chance = (dean.weapon.sharp / 50) * 100
dean.strike_dmg = dean.base_dmg

dean.attack(hamilton)  # hamilton is simply another Char

在修改后的代码中,按正确的顺序计算了各个变量的值,并确保公式中使用了正确的变量。同时,还添加了必要的随机元素,以使伤害值更加真实。

希望这些信息对您有所帮助,如果您还有其他问题,请随时提出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值