Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 巨蟒泥装备司令部_Python_Mud - Fatal编程技术网

Python 巨蟒泥装备司令部

Python 巨蟒泥装备司令部,python,mud,Python,Mud,我试图制造泥浆,但在发出装备命令时,我遇到了这个错误 if item.types == "weapon": AttributeError: 'unicode' object has no attribute 'types' 我想修正我的代码,这样用户可以输入装备剑,它会在他/她的物品清单中搜索该物品并应用统计数据 这是我的商品代码 #weapons class Weapon(): def __init__(self, name, ATK, gold, types):

我试图制造泥浆,但在发出装备命令时,我遇到了这个错误

    if item.types == "weapon":
AttributeError: 'unicode' object has no attribute 'types'
我想修正我的代码,这样用户可以输入装备剑,它会在他/她的物品清单中搜索该物品并应用统计数据

这是我的商品代码

#weapons

class Weapon():
    def __init__(self, name, ATK, gold, types):
        self.name = name
        self.ATK = ATK
        self.gold = gold
        self.types = types


club = Weapon("club", 1, 3, "weapon")
sword = Weapon("sword", 3, 10,"weapon")
axe = Weapon("axe", 4, 15,"weapon")
bow = Weapon("Hailey's bow", 10, 40,"weapon")
swordX = Weapon("Gods Sword", 8000, 8000,"weapon")
这是我的播放器代码

players[id] = { 
            "name": None,
            "room": "Tavern",
            "ATK": 5,
            "hp": 20,
            "inventory": {},
            "armorName": None,
            "armorPT": None,
            "weaponName": None,
            "weaponPT": None,
        }
最后是我的装备命令代码

elif command == "equip":
            x = params.lower()
            rm = rooms[players[id]["room"]]
            if x in players[id]["inventory"]:
                item = players[id]["inventory"][x]
                weapon = players[id]["weaponName"]
                wStat = players[id]["weaponPT"]
                armor = players[id]["armorName"]
                aStat = players[id]["armorPT"]
                hp = players[id]["hp"]
                ATK = players[id]["ATK"]
                if item.types == "weapon":
                    weapon = item.name
                    wStat = item.ATK
                    ATK += wStat
                    mud.send_message(id,"you equip %s" % weapon)
                    mud.send_message(id,"NEW ATK: %d" % ATK)
                elif item.type == "armor":
                    armor = item.name
                    aStat = item.DEF
                    hp += aStat
                    mud.send_message(id,"you equip %s" % armor)
                    mud.send_message(id,"NEW DEF: %d" % hp)

                else:
                    mud.send_message(id,"not a vaid item type")

            else:
                mud.send_message(id,"you dont have this item")
如果您认为我需要为它添加更多代码以使其有意义,请告诉我

编辑:我想我找到了问题所在,但我不知道如何解决它我相信它在take命令中,它被添加到了目录中,它被添加为一个字符串,我不知道如何解决这个问题

这是密码

elif command == "take":
            x = params.lower()
            rm = rooms[players[id]["room"]]

            if rm["item"] == "yes":
                if x in rm["itemName"]:
                    players[id]["inventory"][x] = x
                    del rm["itemName"][x]
                    mud.send_message(id, "you picked up %s" % x)
                    print players[id]["inventory"][x]

                else:
                    mud.send_message(id,"You dont see that item")
            else:
                mud.send_message(id,"there is no item here")

错误消息表明
是unicode字符串,而不是类
武器
的实例

因此,当您尝试访问
item.types
时,会出现错误

注意:下一个条件不应该是
elif item.types==“armor”:
(缺少
s
)。

OO编程中的一个“坏味道”是自己检查对象的类型。如果您正在检查类型,那么很有可能您应该更改实现设计的方式

在这种情况下,我建议您创建名为
装备(self,obj)
设置武器(self,obj)
设置装甲(self,obj)
,并创建名为
装备(self,Player)
取消装备(self,Player)
的各种对象方法

然后,您可以根据类别和类型以及哪些对象知道哪些事情来划分权限和责任:

  • Player.equipment
    可以处理重量限制,并从
    房间
    中取出物品
  • 武器。装备
    将知道这是一件武器,并在
    玩家
    上调用相应的方法
  • Player.set_武器
    将知道它必须首先解除现有武器的装备
  • 武器。如果被诅咒,装备未装备的武器可以拒绝装备未装备

如果您正确地实现了您的方法,它们中的每一个看起来都简单明了,但是每次它们都会为图片添加更多的信息。这种双重分派是处理类型信息的一种快速、简单的方法,无需在代码中散布
if type(obj)==
语句。

请检查如何将内容附加到玩家的物品中-它可能是字符串而不是对象吗?使用“print”语句查看
玩家[id][“inventory”中的内容
看起来这不是您期望的对象。您提供的代码没有显示如何将值分配给玩家的库存。更一般地说:我强烈建议您在运行代码时不要超过。您当前的设计存在一些相当严重的问题,这将使进一步的开发变得非常困难。有人能给我一个代码示例,它可以满足我的需要,并且项目以这种格式添加{“item”:item}我已经用我的kill命令的相同格式编写了代码,所以我看不出这里有什么问题嗯,你能给我举个例子吗?现在我的整个播放器都是基于一个字典吗?我需要把它放到一个类中,我在哪里把代码插入命令中?我真的需要一个例子,我对这方面的东西很陌生,这是有原因的为什么在OO编程书籍中经常使用这种东西。它实际上是为它而做的!也就是说,我将尝试生成一个示例并编辑我的答案。好的,谢谢,这将非常有帮助。我很感激。对不起,如果我在lazyoh中拼错了东西,我几乎忘记了。我需要更改take命令才能工作吗