增加来自另一个类python的分数

时间:2013-10-29 12:39:57

标签: python

我试图在游戏中设置得分我在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()

没有任何事情发生,分数不会增加!

有什么建议吗?

3 个答案:

答案 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)