我正在做一个游戏,我需要随机生成一个列表类。我使用一个自制的函数randList
来实现这一点。该函数的代码如下所示:
def randList(options, num): #RANDOMLY SELECTS NUM ITEMS FROM LIST OPTIONS
returnVal = [] #CREATE A LIST THAT IT RETURNS
for i in range(num - 1): #FOR DESIRED NUMBER OF RETURN ITEMS
val = r.choice(options) #RANDOMLY SELECT ITEM FROM OPTIONS
returnVal.append(val) #ADD THAT TO RETURNVAL
options.remove(val) #REMOVE IT FROM OPTIONS.
return returnVal #RETURN GENERATED LIST
我用它在一个房间里随机生成怪物和物品,比如:
class roomParent: #ROOM CHARACTER FINDS
def __init__(self, entities, floor): #INIT WITH ENEMIES IN ROOM, ITEMS ON FLOOR
self.entities = entities #ENEMIES THERE ARE
self.floor = floor #ON FLOOR THERE IS
def generate(self):
global enemiesBeat
if enemiesBeat >= 500:
self.entities = [dragon]
else:
self.entities = randList([goblin, dwarf, slime, naga, troll, beholder], 1)
self.floor = randList([scrap, scrap, scrap, fireJar, ambrosia, sword, spearhead, armor, potion, slimeball], r.randint(0, 3))
room = roomParent([], [])
正如您所知,goblin
、dwarf
、slimeball
等都是在代码前面定义的。我认为他们与这个问题无关。我稍后生成房间,如下所示:
def main():
room.generate()
print("Enemies: " + str(room.entities))
main()
我希望它打印出一个列表,其中有两个随机的怪物来自room.generate()
,但它总是打印Enemies: []
。代码中没有任何错误,在尝试了10分钟的故障排除之后,我决定向web咨询,结果没有任何结果。提前感谢您的帮助。你知道吗
正如Oliver指出的,之所以总是得到一个空的
entities
数组是因为self.entities
在generate
内被设置为randList([goblin, dwarf, slime, naga, troll, beholder], 1)
(我假设在测试中全局变量enemiesBeat
小于500)。你知道吗在
randList
函数中有一个off by one错误,我在注释中提到了这个错误,这意味着生成的列表包含的项将比num
指定的项少一个。当您试图为self.entities
(num
=1)生成一个单例列表时,实际上会将它分配给一个空列表。你知道吗您可以通过在
randList
函数中将for i in range(num - 1)
更改为for i in range(num)
来更正此问题。你知道吗另外,我认为不需要将
entities
和floor
作为参数传递给roomParent
构造函数,因为它似乎没有任何效果。相反,您可以修改类定义:将其实例化如下:
使用the random.sample library function.
另外,你可能需要重新考虑你的大小写…对于函数名,snake\u大小写比inCaps更合适。你知道吗
相关问题 更多 >
编程相关推荐