2

我试图在我用 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()

什么都没有发生,分数不会增加!

有什么建议么?

4

3 回答 3

6
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)

这里不需要全局变量。在 Python 中,您几乎不需要 getter 或 setter。只需直接访问或设置实例属性score。如果您需要self.score执行更复杂的操作,可以将其设置为 property,这将允许您在不更改语法的情况下定义 getter-/setter-like 行为。

于 2013-10-29T12:51:58.843 回答
1

您的代码,除了“全局”(这是完全不必要的)似乎是正确的。确实,在 Python 中是首选属性而不是访问方法,但在这种情况下它不应该是错误。

为什么不将碰撞()中的代码更改为:

def collision():
    self.score += 1

然后尝试查看错误是否在其他地方,也许在 player_rect.coliderect(baddie_rect):

我不是说错误就在那里,但我希望你明白从简单到复杂的意义

于 2013-10-29T13:01:36.893 回答
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)
于 2021-05-05T17:17:35.757 回答