如何拥有多种版本的同一对象,每个版本具有不同的属性

2024-05-17 04:25:02 发布

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

我正在制作一个基于文本的Skyrim版本,但我找不到一个让魔法/锻造加成生效的方法。我有武器课和盔甲课。我的游戏中每件武器和盔甲都有一个目标。我的武器属性是名字,基础伤害,锻造加成,附魔和价值。对于护甲来说,属性是名称、槽、基本防御、锻造加成、附魔和价值

您的库存中可以有多个相同的项目,这会造成无法拥有相同项目的不同版本的问题。例如,假设你有两把铁剑,你想附魔一把。如果你使用铁剑结界=[firedamage,20],现在铁剑和你从现在起找到的每把铁剑都会有20点火焰伤害结界。同样的问题发生在锻造中,如果你增强一把铁剑,所有的铁剑都会增强

有人知道解决这个问题的办法吗?我能想到的一个方法是每个对象有1000个版本,每次你得到一个新的,你就会得到下一个对象。例如:你得到的第一把铁剑是ironsword1。下一次你得到一把铁剑,它将是铁剑,这将继续下去,直到你得到1000把铁剑。这显然是非常耗时的实施,我觉得肯定有更好的方法


Tags: 项目对象方法文本版本游戏属性魔法
2条回答

我认为你可能误解了类是如何工作的,或者更具体地说,误解了类和实例之间的区别

Weapon创建一个类是有意义的,但是如果您不希望IronSword成为该类的实例,您会希望它成为一个子类。在您的清单中,您将有两个类IronSword的实例,它们具有特定的魔法。或者,您可能不会为铁剑创建一个显式子类,而只是用参数实例化多个武器,将它们标识为铁剑。但无论哪种方式,一个object都应该对应于一个对象,即每个库存选项都应该是一个单独的对象

下面是一系列非常好的YouTube视频,介绍了Python中的OOP: https://www.youtube.com/watch?v=ZDa-Z5JzLYM

当你将两个实例或一个对象装箱时,它们不是同一件事。让我们坐下来,我有一个通用类三角形,属性是a,b,c。我可以同时有两个不同边长的三角形。一次只能修改一个护甲/武器实例的属性。你能发布一个你的类武器/对象实现的例子吗,这样我们就可以更好地了解你在尝试做什么

编辑:

让我们试着用您的环境来解释类和子类。我们想要定义一个通用的物体叫做武器,它有一些属性来表示伤害和射程

class Weapon:
    def __init__(self, dmg):
        self.dmg = dmg
        self.range = 1
        self.ench = None
        self.upg = None
    def enchant(self, value):
        self.ench = value
    def upgrade(self, value):
        self.upg = value
    def __str__(self):
        return "Generic weapon, {} dmg and {} range".format(self.dmg, self.range)

现在我们要创建一个名为swill的子类,它继承泛型类的所有内容,但可以实现更具体的属性和函数

class Sword(Weapon):
    def __init__(self, dmg):
        Weapon(self, dmg)
        self.range = 5
    def __str__(self):
        "Sword, {} dmg, {} range, {} enchant, {} upgrade"
           .format(self.dmg, self.range, self.ench, self.upg)

你现在可以在同一个样式中使用这两种武器,对泛型父类进行子类化

a = Weapon(2)
b = Sword(5)
c = Sword(5)
c.enchant(2)
d = Sword(5)
d.upgrade(1)
print("{}\n{}\n{}\n{}".format(a,b,c,d))

=> Generic weapon, 2 dmg and 1 range
   Sword, 5 dmg, 5 range, None enchant, None upgrade
   Sword, 5 dmg, 5 range, 2 enchant, None upgrade
   Sword, 5 dmg, 5 range, None enchant, 1 upgrade

我希望你能了解一些这个概念,我建议你从网上的一些教程中了解更多,你可以搜索OOP

相关问题 更多 >