如何随机为我的英雄分配权力?

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 我想我必须在不使用字典的情况下重做整个事情。感谢您的帮助,是的,我想做的不仅仅是打印索引。

以上是关于如何随机为我的英雄分配权力?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用文件中的while循环为我的结构分配值?

iOS:如何在这种方法中为我的每个单元格分配一个标签?

在地理上分配权力(人)的想法或工具[关闭]

如何在 C++ 中随机分配给向量?

如何将值分配给数组中的随机位置?

我无法在 Unity 中为我的预制件分配脚本