【问题标题】: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()

【问题讨论】:

    标签: python python-3.x


    【解决方案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 我想我必须在不使用字典的情况下重做整个事情。感谢您的帮助,是的,我想做的不仅仅是打印索引。
    猜你喜欢
    • 1970-01-01
    • 2015-12-17
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    相关资源
    最近更新 更多