0

この攻撃関数を含むクラスがあります:

def attack(self, victim):
    strike = 0
    if victim.strength > self.strength:
        strike = 40
    else:
        strike = 70
    successChance = randint(1,100)
    if successChance > strike:
        self.lives -= 1
        return False
    else:
        victim.lives -= 1
        return True

ユーザーがボタンを押すたびに 1 回だけ実行されるはずですが、2 回実行されるため、ボタンを押すたびに 2 回カウントされます。クラスのテスト実行中にエラーが発生するため、エラーがクラス関数にあることはわかっています。

関数を呼び出すクラス内の唯一のコードは、内部でのみ実行されるテスト関数です。それでも問題は私の GUI コードに残っています。

これは私のクラス関数です:

class Player(object):

def __init__(self, name="", lives=DEFAULT_LIVES):
    self._name = name
    self.lives = lives
    self.strength = randint(1,10)
    if self._name== "Test":
        self.lives = 1000
    if self._name== "":
        self._name = "John Smith"
def __str__(self):
    return (self._name +  " Life: " + str(self.lives) + " Strength: " + str(self.strength))

def getLives(self):
    return self.lives

def getStrength(self):
    self.strength = randint(1,10)
    return self.strength

def getName(self):
    return self._name

def isAlive(self):
    if self.lives <= 0:
       return False
    return True

def attack(self, victim):
    if victim.strength > self.strength:
        strike = 40
    else:
        strike = 70
    successChance = randint(1,100)
    if successChance > strike:
        print(successChance)
        self.lives -= 1
        return False
    else:
        print(successChance)
        victim.lives -= 1
        return True


def test():
    player = Player("Tyler")
    opponent = Player(choice(opponentList))
    while player.isAlive() == True and opponent.isAlive() == True:
        print(player)
        print(opponent)
        player.attack(opponent)
        player.isAlive()
        opponent.isAlive()
        if not player.attack(opponent):
            print("You lost")
        else:
            print("You won")
    print("Game Over")

if __name__ == '__main__':
    test()
4

1 に答える 1