Menu
CoddyTech

Düşmanlardan Oluşan Bir Liste

Coddy'nin Pygame Journey'sinin Sprite'lar ve Görseller bölümünün bir parçası. Ders 15 / 39.

Bir düşman artık bir nesne. Diğer ikisinin de kendi Rect'lerine ve blit'lerine ihtiyacı var. Yıldız alanının yıldızları için yaptığı gibi üçünü de bir listeye koy; iki kısa döngü hepsini çalıştırır:

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

for enemy in enemies:
    enemy.update()

Bir liste, buradaki gibi köşeli parantezler içinde öğe öğe yazılabilir ya da bir döngüde append ile oluşturulabilir. Listedeki her düşman kendi Rect'iyle hareket eder.

Her düşmanı listede yalnızca bir kez bulundur. Döngünün dışında kendi başına da güncellenen bir düşman, her karede iki kez hareket eder.

challenge icon

Görev

Orta

Üç düşmanı da tek bir listede tut.

  1. enemies adında, üç Enemy nesnesinden oluşan bir liste oluştur: red nesnesini (160, 100) konumunda ortala, green nesnesini (320, 100) konumuna ve yellow nesnesini (480, 100) konumuna yerleştir.
  2. Döngüde listedeki her düşmanı güncelle ve dolgu işleminden sonra hepsini çiz.
  3. red_enemy değişkenini, green ve yellow Rect nesnelerini ve bunlara ait satırları kaldır.

“Oyna” düğmesine bas: üç düşman da önceki gibi düşer. Ardından “Kontrol et” düğmesine bas.

Kendin dene

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

Sprite'lar ve Görseller bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground