Menu
CoddyTech

list berisi musuh

Termasuk bagian Sprite dan Gambar dalam perjalanan Pygame di Coddy. Pelajaran 15 dari 39.

Satu musuh kini berupa object. Dua musuh lainnya masih memerlukan Rect dan blit masing-masing. Masukkan ketiganya ke dalam list, seperti bidang bintang yang menyimpan bintang-bintangnya, lalu dua perulangan singkat akan menjalankan semuanya:

enemies = [Enemy(red, 100, 50), Enemy(green, 300, 50)]

for enemy in enemies:
    enemy.update()

list dapat ditulis satu per satu di dalam tanda kurung siku, seperti di sini, atau dibuat dengan append dalam perulangan. Setiap musuh di dalamnya bergerak menggunakan Rect-nya sendiri.

Masukkan setiap musuh ke dalam list hanya sekali. Musuh yang juga diperbarui sendiri, di luar perulangan, bergerak dua kali setiap frame.

challenge icon

Tantangan

Sedang

Masukkan ketiga musuh ke dalam satu list.

  1. Buat enemies, sebuah list yang berisi tiga objek Enemy: merah di tengah pada (160, 100), hijau pada (320, 100), dan kuning pada (480, 100).
  2. Perbarui setiap musuh dalam list di dalam perulangan, lalu gambar semuanya setelah pengisian.
  3. Hapus red_enemy, Rect hijau dan kuning, serta baris-barisnya.

Tekan tombol “Main”: tiga musuh jatuh seperti sebelumnya. Lalu tekan tombol “Periksa”.

Coba sendiri

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

Semua pelajaran di Sprite dan Gambar

Latihan sendiri: Playground Pygame