سفينة الدورية
جزء من قسم الكائنات والصور في رحلة Pygame على Coddy. الدرس 29 من 36.
حان وقت بناء لعبة كاملة: دورية النجوم. تهبط موجات من سفن الأعداء من أعلى الشاشة. تقوم سفينتك بدورية في أسفل النافذة، وتتحرك يمينًا ويسارًا وتطلق أشعة الليزر إلى أعلى. دمّر كل موجة لتفوز؛ وإذا سمحت لثلاثة أعداء بالمرور أو اصطدمت بهم، تنتهي اللعبة.
كل عنصر في اللعبة سيكون كائنًا رسوميًا: اللاعب، وأشعته، والأعداء وانفجاراتهم. نبدأ باللاعب، كما في الفصل 4:
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = ship_image
self.rect = self.image.get_rect(midbottom=(320, 470))حمّل ship_image مرة واحدة، بعد إنشاء النافذة. تحرّك update المستطيل Rect باستخدام مفاتيح الأسهم، وتُبقيه داخل النافذة. تستدعي الحلقة الرئيسية player.update() وترسم السفينة.
يطوّر هذا الفصل البرنامج نفسه درسًا بعد درس، لذا التزم بالأسماء التي تحددها المهام: إذ تستخدمها عمليات التحقق للعثور على أجزاء اللعبة.
التحدي
متوسط- حمّل
assets/images/ship.pngإلىship_image. - اكتب
class Player(pygame.sprite.Sprite): الصورةship_image، والمستطيل بحيث يكون منتصف حافته السفلية عند(320, 470)، ودالةupdateتحرّكه 6 بكسلات في كل إطار باستخدام اليسار واليمين، وتقيّده بحدود النافذة. - أنشئ
player = Player()؛ واستدعِplayer.update()في كل إطار، ثم ارسمplayer.imageعندplayer.rectبعد التعبئة.
جرّب بنفسك
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Star Patrol")
clock = pygame.time.Clock()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((12, 14, 30))
pygame.display.flip()
clock.tick(60)
pygame.quit()
جميع دروس الكائنات والصور
4الكائنات الرسومية والمجموعات
صنف Spriteالمجموعاتالإزالة باستخدام kill()الالتقاط باستخدام spritecollideمجموعة ضد مجموعة7دورية النجوم
سفينة الدوريةأطلق أشعة الليزر2دوّر واقلب وغيّر الحجم
التدوير حول المركزوجّهها في اتجاه الطيرانغيّر حجم الصورةدوّر انطلاقًا من الصورة الأصلية5تصادمات مثالية على مستوى البكسل
المستطيلات تبدو غير منصفةالأقنعةكائنات Sprite مثالية على مستوى البكسلمناطق التصادم الدائرية6التحريك باستخدام أوراق الرسوم المتحركة
قصّ ورقة الرسوم المتحركةعداد الإطاراتالتحريك باستخدام الوقتانفجار لمرة واحدةتدرّب بنفسك: Playground لـ Pygame