如何随机为我的英雄分配权力?
Posted
技术标签:
【中文标题】如何随机为我的英雄分配权力?【英文标题】:How can I randomly assign powers to my heroes? 【发布时间】:2022-01-23 07:48:05 【问题描述】:我正在创建一个英雄游戏。我已经创建了一个包含魔法力量的字典,我的问题是如何创建一种方法,将 12 魔法力量随机分配给我的 4 个英雄(每个英雄获得 3 种力量),而无需多次分配一个魔法力量? 这是我的代码:
import random
class Heroes:
def __init__(self,name,type,magic,health):
self.name = name
self.type = type
self.magic = magic
self.health = health
class Stats:
def __init__(self,hero):
self.hero = hero
def magic(self):
magic_powers = 1: 'Name': 'Apparition', 'Damage': 10,
2: 'Name': 'Astral Spirit', 'Damage': 15,
3: 'Name': 'Dawnbreaker', 'Damage': 20,
4: 'Name': 'Solar Guardian Land', 'Damage': 25,
5: 'Name': 'Pulse Nova', 'Damage': 30,
6: 'Name': 'Lifestealer', 'Damage': 35,
7: 'Name': 'Medusa', 'Damage': 40,
8: 'Name': 'Tree Dance', 'Damage': 45,
9: 'Name': 'Assassin', 'Damage': 50,
10: 'Name': 'Psionic', 'Damage': 55,
11: 'Name': 'Mine', 'Damage': 60,
12: 'Name': 'Templar', 'Damage': 65
print(random.choice(magic_powers))
hero1=Heroes('Gandalf','Wizard', '?', 500)
hero2=Heroes('Gandalf','Wizard', '?', 500)
hero3=Heroes('Gandalf','Wizard', '?', 500)
hero4=Heroes('Gandalf','Wizard', '?', 500)
heroes=Heroes(hero1,hero2,hero3,hero4)
stats = Stats(heroes)
magic_powers=stats.magic()
【问题讨论】:
【参考方案1】:这会通过 12 组,如果您要求更多,它将再次重新洗牌。
import random
class Heroes:
def __init__(self,name,type,magic,health):
self.name = name
self.type = type
self.magic = magic
self.health = health
class Stats:
magic_powers = 1: 'Name': 'Apparition', 'Damage': 10,
2: 'Name': 'Astral Spirit', 'Damage': 15,
3: 'Name': 'Dawnbreaker', 'Damage': 20,
4: 'Name': 'Solar Guardian Land', 'Damage': 25,
5: 'Name': 'Pulse Nova', 'Damage': 30,
6: 'Name': 'Lifestealer', 'Damage': 35,
7: 'Name': 'Medusa', 'Damage': 40,
8: 'Name': 'Tree Dance', 'Damage': 45,
9: 'Name': 'Assassin', 'Damage': 50,
10: 'Name': 'Psionic', 'Damage': 55,
11: 'Name': 'Mine', 'Damage': 60,
12: 'Name': 'Templar', 'Damage': 65
def __init__(self,hero):
self.hero = hero
self.powers = None
def magic(self):
if not self.powers:
self.powers = list(range(1,13))
random.shuffle(self.powers)
return self.powers.pop(0)
hero1=Heroes('Gandalf','Wizard', '?', 500)
hero2=Heroes('Gandalf','Wizard', '?', 500)
hero3=Heroes('Gandalf','Wizard', '?', 500)
hero4=Heroes('Gandalf','Wizard', '?', 500)
heroes=Heroes(hero1,hero2,hero3,hero4)
stats = Stats(heroes)
print( stats.magic() )
print( stats.magic() )
print( stats.magic() )
【讨论】:
我不太明白这一点,因为你不是在洗我的字典,而是从 1 到 12 的数字?我不明白我将如何打印这个,如果 print(stats.magic()) 打印出数字 7,我如何将它连接到我的字典并打印出那里的值? 你不能真正洗牌字典,但由于你的字典的键是整数,如果你得到一个 7 那么你会抓住Stats.magic_powers[7]
不是很清楚吗?
如果我在行尾说“print(Stats.magic_powers[7])”,我可以打印出来。我的麻烦是创建一个 if 循环,所以如果 'stats.magic()' 打印出 7,我希望它打印出我的字典的索引 [7] 而不是数字本身。我目前遇到了这个问题,您获取随机数的方法效果很好,现在我只有打印字典索引而不是随机数的问题。
我刚刚告诉过你。 stats.magic()
为您提供号码。该数字可以是Stats.magic_powers
的索引。如果您只想打印它们,for i in range(12):
/ print(Stats.magic_powers[stats.magic()])
,但我认为您想做的不仅仅是打印它们。
@TomRobers 我想我必须在不使用字典的情况下重做整个事情。感谢您的帮助,是的,我想做的不仅仅是打印索引。以上是关于如何随机为我的英雄分配权力?的主要内容,如果未能解决你的问题,请参考以下文章