将 random.choice() 与类一起使用

Posted

技术标签:

【中文标题】将 random.choice() 与类一起使用【英文标题】:Using random.choice() with classes 【发布时间】:2020-03-26 21:56:51 【问题描述】:

作为这篇文章的一个倾向,我对编程非常陌生。在过去 5 年多的时间里,我一直是一名音响工程师,但由于我所在地区缺乏工作,我决定回到学校进行软件开发。课程于 9 月开始,但由于目前的世界状况(冠状病毒),我有停工时间,但我想我会利用我的时间来发挥自己的优势并抢占先机。我决定从 python 开始,因为它的语法非常简单,而且我在几年前还是个孩子的时候就涉足过它。

无论如何,我一直在关注 youtube 教程,只是复制人们的代码,感觉我什么都没学到。因此,一旦我有了足够的基本概念来开始使用,我想我才刚刚开始编写一些东西,并通过反复试验和阅读文档来学习。我开始编写一个简单的基于文本的 RPG 游戏。

问题我遇到的问题是使用Aquary.choice()函数以及表示怪物的对象列表,当使用一组统计和级别等选择怪物时,它将它们锁定在该初始选择中.例如。

我有一个像这样的两个怪物对象的列表:

monster = [Monster_Blob("Blob", 0, 0, 0, 0, 0), Monster_Skeleton("Skeleton", 0, 0, 0, 0, 0)]
pick = random.choice(monster)

他们在类中的统计数据,如 Level,由随机整数决定。 然后播放器还有一个搜索功能:

def monster_search():
    global pick
    pick = random.choice(monster)
    print()
    print("You found a " + pick.Name)
    print()
    print("Name: " + str(pick.Name), "Level: " + str(pick.Lvl))
    print("HP: " + str(pick.BaseHP), "MP: " + str(pick.BaseMP))
    print("Str: " + str(pick.BaseStr), "Dex: " + str(pick.BaseDex))
    battle()

当怪物血量减少到0并且战斗功能结束时,当您再次调用搜索功能时,它会重复在初始搜索期间锁定的相同属性的相同2个怪物。除了在搜索功能期间将选择定义为随机选择的怪物之外,我还应该做些什么吗?

我知道这是非常基本的东西,但它让我坚持了很长时间,以至于我花时间把它写出来。

感谢阅读。

【问题讨论】:

【参考方案1】:

如果我理解正确,您希望通过从列表中随机选择来确定怪物的类型,但怪物的个人统计数据仅在它们被选中后才能确定,而不是在您设置原始列表时确定。

在这种情况下,我认为您想将 classes 放入列表中,而不是它们的实例。然后当你选择一个类时,你可以实例化它并设置当时的随机统计。

class Skeleton:  # the monster types should be set up to do stat randomization in __init__
    ...

class Blob:
    ...

monster_types = [Skeleton, Blob]

def pick_monster():
    picked_type = random.choice(monster_types)
    monster = picked_type()   # this does Skeleton() or Blob()

    ... # do stuff with the monster here, or maybe return it

这是 Python 的面向对象编程模型的一个很好的例子:类本身就是对象,所以你可以对它们做你通常对其他种类的对象做的事情,比如将它们放入列表中。

【讨论】:

感谢您的回复。当我这样做并尝试打印对象属性时,例如名称。作为 Monsterpickedvariable.Name,我收到一条错误消息,指出该对象没有属性“名称”。它确实如此。有趣的是,如果我对列表中的每个怪物实例使用 if 语句。就像我第一次做的那样,所以 monster = "[Monster_Blob(etc...),Monster_Skeleton(etc...)].pick = random.choice(monster), then if pick == monster[0]: etc ...每次调用搜索函数时,实例都有不同的统计信息。那么为什么它会以这种方式工作而不是其他方式呢?

以上是关于将 random.choice() 与类一起使用的主要内容,如果未能解决你的问题,请参考以下文章

将 qsort() 与类指针一起使用

numpy.random.choice和random.choice的输入参数有区别吗?

将 std::vector 与类一起使用时的 C++ 读写问题

命令'random.choice(list)'没有给出任何输出[关闭]

在某个预定义的间隔内使用抽屉绘制随机数,`numpy.random.choice()`

random.choice()由于某些原因无法工作。