0

我正在尝试创建一个非常基本的类似 RPG 的游戏,您可以在其中选择一个角色,给该角色一把武器,然后根据角色和武器的统计数据告诉它攻击另一个角色并造成伤害。该类weapon属于名为 的顶级类Equip。但是,当我尝试设置包含武器统计数据的攻击伤害变量时,我得到:

'Char' object has no attribute 'weapon.'

我将Charweapon值设置None为默认值。但在下面,我dean通过使用dean.weapon = sword(即 a weapon)为角色 ( ) 赋予了武器。我试过改成weapon.wgtself.weapon.wgt但这似乎没有帮助。

查看代码的相关部分,省略attack代码,因为我认为它与问题无关并且会使事情变得混乱,但如果有必要我会这样做。

我相信代码是一团糟,所以建设性的批评将不胜感激。

代码:

class Char(object):

    def __init__(self, name):
        name = name
        hp = 300
        mp = 10
        strn = 1
        dmg = 1
        dex = 1
        armor = 0
        weapon = None

    attack_speed = dex

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

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

    dmg = strn * self.weapon.wgt


class Equip(object):
    wgt = 1
    desc = ""

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

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

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

sword = weapon("Sword")
sword.wgt = 10
sword.impact = 6
sword.sharp = 7


dean.weapon = sword
dean.attack(hamilton)
4

2 回答 2

2

记住要self像在其他__init__方法中一样使用 来创建实例的属性。

def __init__(self, name):
    self.name = name
    self.hp = 300
    ...
    self.weapon = None

另外,我认为其他属性也应该是实例属性,即在__init__方法中设置它们并使用self,例如self.wgt, self.impact,self.broken_bones等。

于 2013-10-18T12:05:39.877 回答
1

更改构造函数的主体,因为现在您将值分配给局部变量而不是对象变量:

def __init__(self, name):
    self.name = name
    self.hp = 300
    self.mp = 10
    self.strn = 1
    self.dmg = 1
    self.dex = 1
    self.armor = 0
    self.weapon = None
于 2013-10-18T12:06:18.787 回答