0

我正在尝试制作一个小游戏,我将要做的是使用类来指示用户首选类的统计信息。我需要制作课程,以便在与怪物战斗时(也将在它自己的课程中),我将能够调用他们的统计数据。

这可能是一个“大图”问题,但为了避免编写代码三次(对于每个类),我只想调用变量“chosenClass.HP”而不是“Mage.HP”,因为如果我这样做的话,我需要为故事中的每个类都有一堆 if 语句。一定会有更好的办法。

我已经在这两种方式上工作了,我讨厌不得不写

if userChoice is 'Mage':
   HP = 150

我环顾了 self.something,但我不完全理解它是如何工作的。如果这是必需或推荐的解决方案,那么最好的学习资源是什么?

print("Welcome to the game")

name = input("Choose your name\n")
print(name)

class Warrior:
    HP = 100
    ATK = 200
    DEF = 0

class Mage:
    HP = 100
    ATK = 200
    DEF = 0

class Rouge:
    HP = 150
    ATK = 250
    DEF = 100

user_class = input("Choose a class between Warrior, Mage, or Rouge\n")
print(user_class)

while(user_class != 'Warrior' and user_class != 'Mage' and user_class != 'Rouge'):
    print("You did not choose from the required classes, try again")
    user_class = input()

theClass = user_class()
theClass.HP = 1000

我从这段代码中得到的错误是: TypeError: 'str' object is not callable 我知道它被赋予了一个字符串,但它是一个变量。为什么会引起问题?

有什么建议可以让这个程序更好吗?

4

2 回答 2

1

如果要创建这样的实例,则需要将字符串映射到类。

pc_classes = {'Mage': Mage, 'Warrior': Warrior, 'Rogue': Rogue}
while True:
    try:
        user_class = input("Enter Mage, Warrior, or Rogue)
    if user_class in pc_classes:
        break

pc = pc_classes[user_class]()
于 2019-04-11T19:22:06.343 回答
1

user_class返回一个字符串,而不是Class您在上面定义的实际值。这是因为input()返回一个字符串,而您将其存储在user_class. 为了创建您在代码中创建的类的新实例,需要使用某种基于玩家输入的逻辑来实例化该类,例如:

if user_class.lower() == 'warrior':
    theClass = Warrior()

theClass.HP = 1000

显然这不是最好的方法,而只是展示如何实例化类的示例。

于 2019-04-11T19:22:41.693 回答