Menu
CoddyTech

قائمة من الأعداء

جزء من قسم الكائنات والصور في رحلة Pygame على Coddy. الدرس 15 من 39.

أصبح أحد الأعداء كائنًا الآن. وما زال الاثنان الآخران بحاجة إلى مستطيلي Rect واستدعاء blit خاصَّين بهما. ضع الأعداء الثلاثة في قائمة، كما فعل حقل النجوم بنجومه، وستتولى حلقتان قصيرتان تشغيلها جميعًا:

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

for enemy in enemies:
    enemy.update()

يمكن كتابة عناصر القائمة واحدًا تلو الآخر بين أقواس مربعة، كما في المثال هنا، أو إنشاؤها باستخدام append داخل حلقة. يتحرك كل عدو فيها باستخدام مستطيله الخاص.

أبقِ كل عدو في القائمة مرة واحدة فقط. فالعدو الذي يُحدَّث أيضًا بمفرده، خارج الحلقة، يتحرك مرتين في كل إطار.

challenge icon

التحدي

متوسط

احتفظ بالأعداء الثلاثة جميعًا في قائمة واحدة.

  1. أنشئ enemies، قائمةً تضم ثلاثة كائنات من Enemy: الأحمر في المنتصف عند (160, 100)، والأخضر عند (320, 100)، والأصفر عند (480, 100).
  2. حدّث كل عدو في القائمة داخل الحلقة، وارسمهم جميعًا بعد التعبئة.
  3. أزل red_enemy ومستطيلي Rect الأخضر والأصفر والأسطر الخاصة بهما.

اضغط «العب»: تسقط الأعداء الثلاثة كما في السابق. ثم اضغط «تحقق».

جرّب بنفسك

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

جميع دروس الكائنات والصور

تدرّب بنفسك: Playground لـ Pygame