Uma lista de inimigos
Parte da seção Sprites e imagens do Journey de Pygame da Coddy. Lição 15 de 39.
Um inimigo agora é um objeto. Os outros dois ainda precisam dos próprios Rects e blits. Coloque os três em uma lista, como o campo de estrelas fez com suas estrelas, e dois loops curtos executam todos eles:
enemies = [Enemy(red, 100, 50), Enemy(green, 300, 50)]
for enemy in enemies:
enemy.update()Uma lista pode ser escrita item por item entre colchetes, como aqui, ou criada com append em um loop. Cada inimigo nela se move por meio do próprio Rect.
Mantenha cada inimigo na lista apenas uma vez. Um inimigo que também é atualizado por conta própria, fora do loop, se move duas vezes a cada quadro.
Desafio
MédioMantenha os três inimigos em uma única lista.
- Crie
enemies, uma lista de três objetos Enemy: o vermelho centralizado em(160, 100), o verde em(320, 100)e o amarelo em(480, 100). - Atualize todos os inimigos da lista no loop e desenhe cada um depois do preenchimento.
- Remova
red_enemy, os Rects verde e amarelo e as linhas deles.
Pressione “Jogar”: três inimigos caem como antes. Em seguida, pressione “Verificar”.
Experimente você mesmo
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Enemy Rain")
clock = pygame.time.Clock()
red = pygame.image.load("assets/images/enemy_red.png").convert_alpha()
green = pygame.image.load("assets/images/enemy_green.png").convert_alpha()
yellow = pygame.image.load("assets/images/enemy_yellow.png").convert_alpha()
class Enemy:
def __init__(self, image, x, y):
self.image = image
self.rect = image.get_rect(center=(x, y))
self.speed = 2
def update(self):
self.rect.y += self.speed
if self.rect.top > 480:
self.rect.bottom = 0
def draw(self, screen):
screen.blit(self.image, self.rect)
red_enemy = Enemy(red, 160, 100)
green_rect = green.get_rect(center=(320, 100))
yellow_rect = yellow.get_rect(center=(480, 100))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
red_enemy.update()
for rect in (green_rect, yellow_rect):
rect.y += 2
if rect.top > 480:
rect.bottom = 0
screen.fill((20, 22, 40))
red_enemy.draw(screen)
screen.blit(green, green_rect)
screen.blit(yellow, yellow_rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Todas as lições de Sprites e imagens
1Carregando imagens
Carregue uma imagemPosicione-a com um RectMova a imagemLadrilhe o plano de fundoPixels transparentes2Girar, Inverter, Redimensionar
Girar em torno do centroFicar de frente para a direção do vooRedimensionar uma imagemGirar a partir do original3Classes para objetos de jogos
Sua primeira classeMétodosSelf é o objetoUma lista de objetosObjetos com imagensUma lista de inimigosUma subclasse6Animação com Sprite Sheets
Recorte uma Sprite SheetUm contador de quadrosAnime com o tempoUma explosão de disparo únicoPratique por conta própria: Playground de Pygame