Python-根据属性从列表中获取随机对象



对于python角色扮演游戏,我尝试基于玩家对象的属性'self.level'从对象列表中随机抓取一个怪物。最终,我将拥有超过100个独特的怪物。目前我有一些像

MONSTERS =[Kobold,... Skeleton,... Orc,.. Minotaur,.. Spector,... Wraith,... Balrog, Dragon]
monster_cls = random.choice(MONSTERS)

我想要"怪物"。Challenge_rating’大致对应玩家的等级——在一两个等级之内。目前我使用的是:

monster.challenge_rating = player_1.level + random.randint(0, 2)

最初,我只是简单地把怪物抬起来。每个怪物的Challenge_rating对应player_1.level但是,为了增加游戏的深度,我计划为每个挑战等级关卡制作一个对象列表,如

monster_cr_1 = [rat, spider, flying snake..]
monster_cr_2 = [giant rat, giant spider...]
monster_cr_3 = [Kobold, Skeleton.....]
monster_cr_4 = [Drow, Orc, Mummy, Ghoul]
..
monster_cr_20 = [Balrog, Red Dragon, Kraken,...] 

我不想做:

if player_1.level == 1:
random.choice(monster_cr_1)
if player_1.level == 2:
random.choice(monster_cr_2)...

玩家的最高等级将是20,所以我知道我将以很多很多if语句结束。因此,我试图通过将属性附加到字符串的末尾来获取它。比如:

monster = "monster_cr_", player_1.level
monster_cls = random.choice(monster)

但是,我得到了各种不可调用的str对象和类型错误。是否有一种语法使这成为可能?是否有更好的方法来做我想做的事情,同时保持"人类可读"?谢谢你!

你可以用字典。

import random

monsters = {
1: ['rat', 'spider', 'flying snake'],
2: ['giant rat', 'giant spider', 'kobold'],
3: ['drow', 'orc', 'mummy']
}
player_level = 1
monster = random.choice(monsters[player_level])

相关内容

  • 没有找到相关文章

最新更新