我正在用python制作一个civclicker类型的游戏,它要求我在食物变量变为负值时杀死工人。你知道吗
目前我想用的方法是随机选择在一个列表中,我想知道我是否可以让这个列表包含一个变量的引用。你知道吗
我的职责是:
self.maxPopulation = 0
self.workers = 0
self.farmers = 0
self.miners = 0
self.loggers = 0
def random_killer(self, amount):
for i in range(round(amount)):
choice = []
choice += [self.farmers] * self.farmers + [self.miners] * self.miners + [self.loggers] * self.loggers + [self.workers] * self.workers
chosen = random.choice(choice)
chosen -= amount
所以这显然不起作用,因为结果choice
列表只是一个数字数组。我还制作了self.farmers
等文本字符串并使用了exec函数(该函数不起作用),但我知道使用exec/eval是一种不好的做法。你知道吗
另一个考虑是把所有的东西都放到字典里,但这将需要对代码进行更全面的检查——当其他一些基本系统就绪时,我就把它留下来。你知道吗
忽略这一点-我很好奇您是否真的可以将对self.farmers
等变量的引用存储在一个列表中,而不是传递数字。你知道吗
所以我的问题是:你能把指向变量的引用或指针,例如self.farmers
,存储在一个列表中,这样引用就可以传递给另一个变量chosen
,允许我动态编辑self.farmers
。你知道吗
编辑:
增加了一些细节。self.farmers/miners/loggers/workers
是指每个类别中的人数。你知道吗
上面的函数应该创建一个列表,该列表是通过引用上述变量,然后将引用变量的数量乘以该变量所代表的数量来创建的。所以在某种意义上,如果我们有5个农民,我们会得到一个看起来像[self.farmers, self.farmers, self.farmers, self.farmers, self.farmers]
的列表。你知道吗
在人工意义上,列表中的每一项都代表游戏中的一个人,当他们被选中时,这个人就会被杀死。实际上,它只是对同一变量的引用数,然后在选择时按任意数量减少。你知道吗
用字典可能会更容易些。为了简洁起见,我将在类外演示它,但它很容易成为实例属性(您可以通过属性或
__getattr__
将值作为属性公开):请注意,您可能希望在
for
循环中减去1
,而不是amount
。你知道吗要仅对属性执行此操作,请使用
getattr
和setattr
,并将属性名称存储在choices
:使用中:
相关问题 更多 >
编程相关推荐