Python游戏,当装备物品到一个character类时,chara类的对象变量包含物品

2024-06-24 11:53:33 发布

您现在位置:Python中文网/ 问答频道 /正文

抱歉,标题太长了,我不能用一个简短的短语来表达我的错误。不管怎样,代码没有抛出任何异常,只是我注意到了一个错误。我正在创建一个简单的基于文本的python游戏,以获得继承流和其他东西。在我的chara类(用于初始化字符变量的类)中,我有一个空数组集,一个名为equitedlist的类变量。我创建了一个函数,将一个项添加到该数组并返回它。我的错误是,如果我为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

Tags: thenameselfanreturnisdefitem
1条回答
网友
1楼 · 发布于 2024-06-24 11:53:33

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

Generally speaking, instance variables are for data unique to each instance and class variables are for attributes and methods shared by all instances of the class:

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
['']

相关问题 更多 >