Menu
CoddyTech

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.

challenge icon

Desafio

Médio

Mantenha os três inimigos em uma única lista.

  1. 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).
  2. Atualize todos os inimigos da lista no loop e desenhe cada um depois do preenchimento.
  3. 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

Pratique por conta própria: Playground de Pygame