存储游戏单位属性(成本)的合适方法是什么?

2024-03-29 01:31:13 发布

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

假设你有一个游戏,你可以训练有附加成本的单位,你想成为一个能够计算训练一定数量的单位的总成本的人。你知道吗

这些单位都共享相同的属性,但是这些属性的值在不同的单位之间会发生变化。你知道吗

我使用字典找到了两种可能的解决方案:

spearmen = {'gold' : 2, 'wood' : 10, 'stone' : 5, 'iron' : 0}
swordsmen = {'gold' : 5, 'wood' : 30, 'stone': 0, 'iron' : 10}

但我发现获取信息的方法有点冗长:

swordsmen['gold'] * 1200

所以我想知道这样做是否合适:

class Spearmen:
    gold = 2
    wood = 10
    stone = 5
    iron = 0

class Swordsmen
    gold = 5
    wood = 30
    stone = 0
    iron = 10

使用类可以使访问信息稍微不那么冗长:

Spearmen.gold * 1200

做了一些粗略的研究,我发现this question,这表明我尝试做的更多的时候被认为是反模式的。所以我也不确定这个解决方案。你知道吗

当考虑到我的程序的发展时,我不太可能必须为单位添加新的属性,但是我更可能需要添加新的单位(具有相同的属性)。你知道吗

因此,我想知道这些解决方案中的任何一个是否合适,或者是否有更好的方法来做到这一点(为什么它们是错误的)。你知道吗


Tags: 方法游戏数量属性单位解决方案class成本
1条回答
网友
1楼 · 发布于 2024-03-29 01:31:13

对象的属性应该是对象定义(类)的一部分。如果这些对象共享一组公共属性,那么它们应该从父类继承。你知道吗

至于如何储存它们,有很多方法。您可以有一个父类来定义公共对象的默认属性(正如@zondo所建议的,一个单元类);这些属性可以存储为字典。你知道吗

您可以修改继承类中的字典,以覆盖默认属性的值,或者为特定的单位类型创建新属性。你知道吗

class BaseUnit(object):
    def __init__(self, name, stats={}):
       self.stats = {}

       if not stats:
           self.stats['health'] = 10
           self.stats['armor'] = 10
           self.stats['strength'] = 10
       else:
           self.stats.update(stats)

       self.name = name

class Peon(BaseUnit):
    pass

class Warrior(BaseUnit):
    pass

grunt = Peon(name='Igor', {'strength': 5, 'armor': 5})
soldier = Warrior(name='Frank', {'armor': 10, 'health': 20, 'damage': 50})

相关问题 更多 >