在runtim更改类实例的属性值

2024-10-03 11:22:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个小游戏,它依赖于用户选择来确定他/她想要的角色的统计信息。游戏包括由玩家“种族”决定的“统计数据”。我遇到了一些问题,因为我需要在运行时完成此操作。我不确定我需要做什么来完成这一点,任何帮助将不胜感激

实现必须能够支持将来添加运行时确定的因素,如“派系”和“性别”。这只是一个考虑,并不是要求迄今为止实施这一点

class Character:
    def __init__(self, name, gender, race, faction):
        self.playerName = name
        self.playerGender = gender
        self.playerRace = race
        self.playerFaction = faction
        self.setPlayerStats("","","","","")
#CHARACTER STATS
    def setPlayerStats(self, mining, manufacturing, exploration, invention, trading):
        self.mining = mining
        self.manufacturing = manufacturing
        self.exploration = exploration
        self.invention = invention
        self.trading = trading

    def playerStats(self):
        self.setPlayerStats(0, 0, 0, 0, 0)
#CHARACTER CLASSES
class Dwarf(Character):
    def playerStats(self):
        self.setPlayerStats(3, 1, 0, 1, 0)

class Elf(Character):
    def playerStats(self):
        self.setPlayerStats(0, 1, 0, 1, 3

    def setPlayerRace(self):
        self.playerRace = "Elf"

class Human(Character):
    def playerStats(self):
        self.setPlayerStats(1, 1, 1, 1, 1)

    def setPlayerRace(self):
        self.playerRace = "Human"

class Orc(Character):
    def playerStats(self):
        self.setPlayerStats(0, 2, 2, 1, 0)

    def setPlayerRace(self):
        self.playerRace = "Orc"

当前实现方法的问题不是实际设置这些变量,因为它没有设置为“character”类的实例。我被告知这是一个运行时问题,我不熟悉如何在Python中做到这一点

print("Please choose the numerical value assigned to the option you wish to select:")
        print("1) Dwarf 2) Elf 3) Human 4) Orc")
        userInput = input(str("Input your character`s race: "))
        if userInput == "1":
            player1 = Dwarf("","","","")
            break
        elif userInput == "2":
            player1 = Elf("","","","")
            break
        elif userInput == "3":
            player1 = Human("","","","")
            break
        elif userInput == "4":
            player1 = Orc("","","","")
            break
        else:
            input("Invaild Input! Press any button to try again...")

Tags: selfdefclasshumanbreakcharacterraceelf
1条回答
网友
1楼 · 发布于 2024-10-03 11:22:43

您缺少Elf(Character).playerStats的右括号

class Elf(Character):
    def playerStats(self):
        self.setPlayerStats(0, 1, 0, 1, 3

此外,还有许多break语句不在循环中

elif userInput == "2":
    player1 = Elf("","","","")
    break

“玩家”一词通常指坐在电脑前的人(或AI,或玩游戏的人)。玩家控制的角色不是玩家。例如,玩家经常在键盘上打字,而“玩家控制的角色”可能挥舞剑,或从弓上发射箭。为了避免混淆,我建议您在单词“player”上应用edit>replace。首先,播放器需要GUI(图形用户界面),而播放器控制的角色则不需要。您可能希望在某个时候创建一个player类来处理用户输入。或者,一个玩家可能“拥有”几个不同的角色。木偶和木偶演员是不同的东西

设置统计数据很容易:

Create a character
character = Orc("Mr. Orc", "male", "Orc", "zebra faction")
# Below, set the stats at runtime 
character.mining = 455
print(character.mining)
character.setPlayerStats(self, mining=1, manufacturing=2, exploration=3, invention=4, trading=5)

如果您想为整个比赛设置统计数据,可以编写如下内容:

class Race:
    def __init__(self, mining, manufacturing, exploration, invention, trading):
        self.mining = mining
        self.manufacturing = manufacturing
        self.exploration = exploration
        self.invention = invention
        self.trading = trading

Dwarf = Race(3, 1, 0, 1, 0)

class Character:
    def __init__(self, name, gender, race:Race, faction):
        self.playerName = name
        self.playerGender = gender
        self.playerRace = race
        self.playerFaction = faction
#CHARACTER STATS
    def getTotalStats(self):
        return (
            self.race.mining + self.mining_bonus,
            self.race.manufacturing + self.manufacturing_bonus,
            self.race.exploration + self.exploration,
            self.race.invention + self.invention,
            self.race.trading + self.trading,
        )

相关问题 更多 >