قائمة من الأعداء
جزء من قسم الكائنات والصور في رحلة Pygame على Coddy. الدرس 15 من 39.
أصبح أحد الأعداء كائنًا الآن. وما زال الاثنان الآخران بحاجة إلى مستطيلي Rect واستدعاء blit خاصَّين بهما. ضع الأعداء الثلاثة في قائمة، كما فعل حقل النجوم بنجومه، وستتولى حلقتان قصيرتان تشغيلها جميعًا:
enemies = [Enemy(red, 100, 50), Enemy(green, 300, 50)]
for enemy in enemies:
enemy.update()يمكن كتابة عناصر القائمة واحدًا تلو الآخر بين أقواس مربعة، كما في المثال هنا، أو إنشاؤها باستخدام append داخل حلقة. يتحرك كل عدو فيها باستخدام مستطيله الخاص.
أبقِ كل عدو في القائمة مرة واحدة فقط. فالعدو الذي يُحدَّث أيضًا بمفرده، خارج الحلقة، يتحرك مرتين في كل إطار.
التحدي
متوسطاحتفظ بالأعداء الثلاثة جميعًا في قائمة واحدة.
- أنشئ
enemies، قائمةً تضم ثلاثة كائنات من Enemy: الأحمر في المنتصف عند(160, 100)، والأخضر عند(320, 100)، والأصفر عند(480, 100). - حدّث كل عدو في القائمة داخل الحلقة، وارسمهم جميعًا بعد التعبئة.
- أزل
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()
جميع دروس الكائنات والصور
4الكائنات الرسومية والمجموعات
صنف Spriteالمجموعاتالإزالة باستخدام kill()الالتقاط باستخدام spritecollideمجموعة ضد مجموعة2دوّر واقلب وغيّر الحجم
التدوير حول المركزوجّهها في اتجاه الطيرانغيّر حجم الصورةدوّر انطلاقًا من الصورة الأصلية5تصادمات مثالية على مستوى البكسل
المستطيلات تبدو غير منصفةالأقنعةكائنات Sprite مثالية على مستوى البكسلمناطق التصادم الدائرية3أصناف كائنات اللعبة
أول صنف لكالأساليبself هو الكائنقائمة من الكائناتكائنات مع صورقائمة من الأعداءصنف فرعي6التحريك باستخدام أوراق الرسوم المتحركة
قصّ ورقة الرسوم المتحركةعداد الإطاراتالتحريك باستخدام الوقتانفجار لمرة واحدةتدرّب بنفسك: Playground لـ Pygame