2016-04-25 4 views
0

Я работал над заданием, которое просит нас создать версию Break-Out Atari с pygame. Все идет довольно гладко, но я зациклился на том, как сделать так, чтобы разные цвета кирпичей возвращали другое количество очков при попадании. (., например, красный = 1 точка, синий = 2 балла ...)эффективный способ сделать разные цветные спрайты в разных точках? (pygame)

Вот часть кода из игрового цикла:

while keepGoing: 
    #collision detection between ball and bricks 
    brick_hit = pygame.sprite.spritecollide(ball, brick_group, False) 
    if brick_hit: 
     ball.change_direction() 

    #scorekeeper  
    for hit in brick_hit: 
     scorekeeper.point(1) 
     hit.kill() 
     if scorekeeper.winner() == 1: 
      break 

вот код для кирпичной группы:

#appending brick sprites into a list so its coordinates can be easily manipulated. 
bricks = [] 
x = -35 
y = 100 
colour = (0, 255, 0) 
points = 6 
for i in range(108): 
    x += 35 
    if x == screen.get_width(): 
     y += 35 
     x = 0 
     if y == 135: 
      colour = (255, 0, 0) 
      points = 5 
     elif y == 170: 
      colour = (0, 0, 255) 
      points = 4 
     elif y == 205: 
      colour = (120, 0, 0) 
      points = 3 
     elif y == 240: 
      colour = (0, 0, 90) 
      points = 2 
     elif y == 275: 
      colour = (0, 0, 200) 
      points = 1 
    brick = pyBreakoutSprites.Brick(screen, x, y, colour) 
    bricks.append(brick) 

и вот класс Scorekeeper в отдельном модуле:

class Scorekeeper(pygame.sprite.Sprite): 
    def __init__(self, screen): 
     pygame.sprite.Sprite.__init__(self) 
     self.__font = pygame.font.SysFont("Helvetica", 20) 
     self.__player_score = 0 
     self.__screen = screen 

    def point(self, score): 
     self.__player_score += score 

    def update(self): 
     message = "Points: %d" %(self.__player_score) 
     self.image = self.__font.render(message, 1, (255, 255, 255)) 
     self.rect = self.image.get_rect() 
     self.rect.center = (200, self.__screen.get_height()-10) 

Я пытался использовать, если заявление так, что, когда кирпич это определенный цвет, аргумент в scorekeeper.point (1) изменяется на другой номер, но все кирпичи все равно возвращают одну точку при попадании.

Буду признателен за любую помощь, которую я мог бы получить. Благодаря!

ответ

0

заставить Кирпич принять оценку как часть своего метода init. затем, в цикле, просто сделайте pyBreakoutSprites.Brick(screen, x, y, colour, points), а затем, когда вы проверите наличие столкновения, вы можете просто сделать score += brick.score.

+0

спасибо, это сработало! –

+0

Пожалуйста, отметьте это как ответ! – marienbad

Смежные вопросы