Почему мой объект игрока обновляет счет, но не отслеживает, жив он или нет? - PullRequest
0 голосов
/ 04 октября 2019

Вот класс игрока.

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. Однако, как показывает отладка печати, оценка в племени обновляется, поэтому я знаю, что сама функция выполняет что-то . В чем может быть проблема?

1 Ответ

1 голос
/ 04 октября 2019

Эти строки кода в вашем Player.__init__:

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

Когда именно вы ожидаете, что это выполнится? Я имею в виду, что из вашей линии вопросов вы ожидаете, что это будет выполняться всякий раз, когда вы устанавливаете self.dead в True (когда landScore, airScore или waterScore меньше илиравно -2).

Дело не в этом. Тело оператора if в вашем Player.__init__ будет выполняться только при создании объекта Player (в конце концов, это метод __init__) - и только тогда, когда self.dead равно True, чтопо умолчанию жестко задан как False.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...