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.
Görev
OrtaÜç düşmanı da tek bir listede tut.
enemiesadı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.- Döngüde listedeki her düşmanı güncelle ve dolgu işleminden sonra hepsini çiz.
red_enemydeğ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
4Sprite'lar ve Gruplar
Sprite SınıfıGruplarkill() ile Kaldırmaspritecollide ile YakalamaGruba Karşı Grup2Döndür, Yansıt, Ölçekle
Merkez Etrafında DöndürUçtuğun Yöne DönBir Görseli ÖlçekleOrijinalinden Döndür5Piksel Hassasiyetinde Çarpışmalar
Dikdörtgenler Haksız HissettiriyorMaskelerPiksel Hassasiyetinde Sprite'larDaire Hitbox'ları3Oyun Nesneleri için Sınıflar
İlk SınıfınızMetotlarSelf Nesnenin KendisidirNesnelerden Oluşan Bir ListeGörselli NesnelerDüşmanlardan Oluşan Bir ListeBir Alt Sınıf6Sprite Sheet'lerden Animasyon
Bir Sprite Sheet'i KesmekBir Kare SayacıZamanla AnimasyonTek Seferlik Bir PatlamaKendi başına pratik yap: Pygame playground