【发布时间】:2019-10-04 18:11:48
【问题描述】:
这是播放器类。
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。然而,部落分数确实更新,正如打印调试显示的那样,所以我知道函数本身正在做某事。可能是什么问题?
【问题讨论】:
-
我不确定你的代码是如何工作的,因为你在
__init__的__init__中有一个无条件的sys.exit(0) -
有那个用于调试;谢谢。
标签: python methods constructor updating