Menu
CoddyTech

subclass

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

Beberapa musuh sebaiknya bergerak zigzag. Mereka jatuh seperti musuh lainnya dan juga bergeser ke samping, berbalik arah di tepi jendela. Menyalin seluruh class Enemy hanya untuk mengubah satu method berarti kamu harus memperbaiki setiap bug dua kali. Subclass mengambil semua hal dari parent-nya dan hanya mengubah bagian yang berbeda:

class Zigzag(Enemy):
    def __init__(self, image, x, y):
        super().__init__(image, x, y)
        self.dx = 3

    def update(self):
        super().update()
        self.rect.x += self.dx
        if self.rect.left < 0 or self.rect.right > 640:
            self.dx = -self.dx

class Zigzag(Enemy) berarti Zigzag adalah Enemy. Zigzag memiliki draw tanpa perlu menuliskannya. update miliknya menggantikan milik parent, dan super().update() menjalankan versi parent terlebih dahulu, jadi gerakan jatuh dan kembali ke atas tidak ditulis dua kali. super().__init__(...) melakukan hal yang sama untuk penyiapan.

Zigzag masuk ke list yang sama dengan musuh lainnya: perulangan memanggil enemy.update() dan setiap object menjalankan jenis update-nya sendiri.

challenge icon

Tantangan

Sedang
  1. Tulis class Zigzag(Enemy): __init__-nya memanggil super().__init__(image, x, y) dan menetapkan self.dx = 3.
  2. update-nya memanggil super().update(), menambahkan self.dx ke self.rect.x, dan membalik tanda self.dx saat Rect melewati tepi kiri atau kanan.
  3. Jadikan musuh kuning dalam enemies sebagai Zigzag. Musuh merah dan hijau tetap Enemy.

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)


enemies = [Enemy(red, 160, 100), Enemy(green, 320, 100), Enemy(yellow, 480, 100)]

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    for enemy in enemies:
        enemy.update()

    screen.fill((20, 22, 40))
    for enemy in enemies:
        enemy.draw(screen)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Sprite dan Gambar

Latihan sendiri: Playground Pygame