Python游戏,当将项目装配到字符类时,该chara类的对象变量包含该项目

时间:2017-12-31 07:11:23

标签: python arrays python-3.x

对不起长标题,我不能把我的错误写进一个简短的短语。无论如何,代码不会抛出任何异常,只是我注意到的错误。我正在创建一个简单的基于文本的python游戏,以获得继承流和诸如此类的东西。在我的chara类(用于初始化字符变量的类)中我有一个空数组设置一个名为equiptedlist的类变量。我创建了一个函数,将一个项添加到该数组并返回它。我的错误是如果我装备一把剑到chara bob,那么我程序中的所有其他chara变量也将配备一把剑。这是我的代码,提前谢谢!

class Chara():
"""Class used to initialize new characters, including player, NPC's, enemies
and animals. inventory value should be a dictionary i.e. {Gold:50,
weapons:[sword, bow]} IMPORTANT, all chara object variables must have 
backpack as
as their inventory array key"""

equiptedlist = []
def __init__(self, hp, speed, name, inventory, isenemy, isplayer):
    self.hp = hp
    self.speed = speed
    self.name = name
    self.inventory = inventory
    self.isenemy = isenemy
    self.isplayer = isplayer


def gethp(self):
    return self.hp

def getspeed(self):
    return self.speed

def getname(self):
    return self.name

def getinv(self):
    return self.inventory

#gets whether the char is an enemy or not
def enemy(self):
    return self.isenemy

#gets whether the char is a player or not
def player(self):
    return self.isplayer

def sethp(self, newhp):
    self.hp = newhp
    return self.hp

def setspeed(self, newspeed):
    self.speed = newspeed
    return self.speed

def setname(self, newname):
    self.name = newname
    return self.name

def setinv(self, newinv):
    self.inventory = newinv
    return self.inventory

#sets whether the char is an enemy or not
def setenemy(self, enemy):
    self.isenemy = enemy
    return self.isenemy

#sets whether the char is a player or not
def setplayer(self, player):
    self.isplayer = player
    return self.isplayer

#picks up an item
def pickup(self, item):
    self.inventory.setdefault("backpack", []).append(item)
    return self.inventory

#returns a boolean value to check if the item is in the charas inventory
def has(self, item):
    for key in self.inventory.keys():
        if item in self.inventory[key]:
            return True
        else:
            return False

#returns new enemy hp after an attack
def attack(self, enemy, weapon):
   enemy.sethp(enemy.gethp() - weapon.getdmg())
   return enemy.gethp()

#equipts an item to the player
def equipt(self, item):
    self.equiptedlist.append(item)
    return self.equiptedlist

#checks if an item as equipted
def isequipted(self, item):
    for i in self.equiptedlist:
        if item == i:
            return True
        else:
            return False

1 个答案:

答案 0 :(得分:0)

Here is the python doc that explains why every Chara equips sword.

  

一般来说,实例变量用于每个实例的唯一数据,而类变量用于所有类实例共享的属性和方法:

class Chara():

    equipped = []           # class variable shared by all instances

    def __init__(self, name):
        self.name = name    # instance variable unique to each instance
        self.equipped = []  # instance variable unique to each instance

    def equip(self, item):
        self.equipped.push(item)

>>> d = Chara('Thor')
>>> d.equip('Mjolnir')
>>> e = Chara('Tony Stark')
>>> e.equip('Mark I')
>>> d.equipped              # Thor unique equipped items
['Mjolnir']
>>> e.equipped              # Ironman unique equipped items
['Mark I']
>>> Chara.equipped          # Shared equipped items
['']