为什么我的玩家对象会更新分数却不记录它是否存在?

2024-05-16 02:48:36 发布

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

这是玩家课程

class Character():
    def __init__(self, name, territory):
        self.waterScore = 1
        self.airScore = 1
        self.landScore = 1
        self.tribe = ""
        if territory == 1: #Water tribe
            self.airScore = 0
            self.landScore = 1
            self.waterScore = 2
            self.tribe = "Water"
        if territory == 2: #Air tribe
            self.landScore = 0
            self.waterScore = 1
            self.airScore = 2
            self.tribe = "Air"
        if territory == 3: #Land tribe
            self.waterScore = 0
            self.airScore = 1
            self.landScore = 2
            self.tribe = "Land"
        self.name = name
        self.tribeScore = 0
        if self.tribe == "Land":
            self.tribeScore = self.landScore
        elif self.tribe == "Water":
            self.tribeScore = self.waterScore
        elif self.tribe == "Air":
            self.tribeScore = self.airScore

class Player(Character):
    def __init__(self, territory):
        super().__init__("Player", territory)
        self.dead = False
        if self.dead:
            print("You have died.")
            time.sleep(2)
            print("So long...")
            time.sleep(2)
            sys.exit(0)
    def setTribeScore(self): #This is the problem area
        if self.tribe == "Water":
            self.tribeScore = self.waterScore #These three are working
        elif self.tribe == "Air":
          self.tribeScore = self.airScore
        elif self.tribe == "Land":
          self.tribeScore = self.landScore
        if self.landScore <= -2 or self.airScore <= -2 or self.landScore <= -2: #this one isn't doing anything
            self.dead = True

下面是调用“setTribeScore()”的地方:

"""
An enemy and the player are passed into the following function, as well as which tribe skill is at stake. The function checks whether the winner or the loser is the player in order to set their tribe score.
"""
def winFight(winner, loser, stake):
    x = getattr(winner, stake)
    setattr(winner, stake, x + 1) #the attack that the winner used gets increased
    y = getattr(loser, stake)
    setattr(loser, stake, y - 1)
    if not isinstance(winner, Player):
        del winner
        loser.setTribeScore()
        print("You lost! Your attributes are {} for land, {} for water, and {} for air.".format(getattr(loser, "landScore"), getattr(loser, "waterScore"), getattr(loser, "airScore")))
    elif not isinstance(loser, Player):
        del loser
        winner.setTribeScore()
        print("You won! Your attributes are {} for land, {} for water, and {} for air.".format(getattr(winner, "landScore"), getattr(winner, "waterScore"), getattr(winner, "airScore")))

当我运行游戏循环时,玩家永远不会死,即使部落分数低于-1。但是,部落分数会更新,如打印调试所示,因此我知道函数本身正在做一些事情。有什么问题吗


Tags: theselfforiftribeelifgetattrwinner
1条回答
网友
1楼 · 发布于 2024-05-16 02:48:36

Player.__init__中的这些代码行:

if self.dead:
    print("You have died.")
    time.sleep(2)
    print("So long...")
    time.sleep(2)

你到底希望什么时候执行?我在这里得到的是,从你的提问中,你似乎希望每当你将self.dead设置为True(当landScoreairScorewaterScore小于或等于-2时)这个命令就会执行

事实并非如此。Player.__init__中if语句的主体将仅在创建Player对象时执行(毕竟是在__init__方法中),并且仅在self.deadTrue时执行,默认情况下,您硬编码为False

相关问题 更多 >