我试图在游戏中设置得分我在python / pygame编程。
当我有类似的东西时,我的分数有效:
global score
score = 0
伪:
if player_rect.coliderect(baddie_rect):
score +=1
然后我将分数显示在屏幕上。
但我想在另一个班级的功能中使用这个分数。在主类中调用该函数的位置。
所以
在碰撞功能中我想增加得分,这是在玩家类中。但我想在主要班级打印得分。我使用缩短的代码有这样的东西:
class player:
.
.
.
global score
score = 0
def __init(self):
self.score=0
def get_score(self):
return self.score
def set_score(self, score):
self.score = score
def collision():
.
.
if player_rect.coliderect(baddie_rect):
self.score +=1
当我发生碰撞时尝试获得分数时:
class main():
player = player()
player.colision()
print player.get_score()
没有任何事情发生,分数不会增加!
有什么建议吗?
答案 0 :(得分:5)
class Player:
def __init(self):
self.score=0
def collision():
if player_rect.coliderect(baddie_rect):
self.score +=1
class main():
player = Player()
player.collision()
print(player.score)
这里不需要全局变量。 In Python, you almost never need getters or setters。只需直接访问或设置实例属性score
即可。如果您需要self.score
来执行更复杂的操作,您可以make it a property,这将允许您在不更改语法的情况下定义类似getter / setter的行为。
答案 1 :(得分:1)
你的代码,除了“全局”(这是完全不必要的)似乎是正确的。确实,在Python中是首选属性而不是访问方法,但在这种情况下,它不应该是错误。
为什么不将collision()中的代码更改为:
def collision():
self.score += 1
然后尝试查看错误是否在其他地方,也许是在
player_rect.coliderect(baddie_rect):
?
我不是说错误就在那里,但我希望你能指出从简单到复杂的问题
答案 2 :(得分:0)
我发现score需要是scoreboard类开始时初始化的self对象,而不是全局变量:
#Scoreboard class
class Scoreboard:
def __init__(self):
self.player_score = 0
def update_score(self):
self.player_score += 1
#Main file
score = Scoreboard()
if player_rect.coliderect(baddie_rect):
score.update_score()
print(score.player_score)