Я работал над заданием, которое просит нас создать версию 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) изменяется на другой номер, но все кирпичи все равно возвращают одну точку при попадании.
Буду признателен за любую помощь, которую я мог бы получить. Благодаря!
спасибо, это сработало! –
Пожалуйста, отметьте это как ответ! – marienbad