مقدمه

اکنون که یک پنجره خالی برای بازی خود داریم، زمان آن است که اولین عنصر بازی، یعنی سفینه فضایی بازیکن، را به آن اضافه کنیم. برای این کار، ابتدا باید یک تصویر مناسب برای سفینه پیدا کرده و سپس با استفاده از Pygame، آن را بارگذاری و روی صفحه ترسیم کنیم.

ایجاد کلاس Ship

برای سازماندهی بهتر کد، تمام منطق و داده‌های مربوط به سفینه را در یک کلاس جداگانه به نام Ship قرار می‌دهیم. یک فایل جدید به نام ship.py ایجاد کنید.

Copy Icon ship.py
import pygame

class Ship:
    """A class to manage the ship."""

    def __init__(self, ai_game):
        """Initialize the ship and set its starting position."""
        self.screen = ai_game.screen
        self.screen_rect = ai_game.screen.get_rect()

        # Load the ship image and get its rect.
        self.image = pygame.image.load('images/ship.bmp')
        self.rect = self.image.get_rect()

        # Start each new ship at the bottom center of the screen.
        self.rect.midbottom = self.screen_rect.midbottom

    def blitme(self):
        """Draw the ship at its current location."""
        self.screen.blit(self.image, self.rect)

در این کد، سازنده کلاس Ship یک ارجاع به نمونه فعلی کلاس AlienInvasion دریافت می‌کند تا به صفحه اصلی بازی دسترسی داشته باشد. ما تصویر سفینه را با pygame.image.load() بارگذاری می‌کنیم.

در Pygame، تمام عناصر بازی مانند سفینه به عنوان یک مستطیل (rectangle) در نظر گرفته می‌شوند. پس از بارگذاری تصویر، ما با متد get_rect() مستطیل دربرگیرنده آن را دریافت می‌کنیم. این به ما اجازه می‌دهد تا به راحتی موقعیت عنصر را مدیریت کنیم. ما با استفاده از اتریبیوت midbottom سفینه را در مرکز و پایین صفحه قرار می‌دهیم. متد blitme() نیز مسئول ترسیم تصویر سفینه روی صفحه در موقعیت مشخص شده توسط self.rect است.

ادغام کلاس Ship با بازی

حالا باید کلاس Ship را در کلاس اصلی بازی AlienInvasion وارد کرده و از آن استفاده کنیم.

Copy Icon alien_invasion.py
...
from ship import Ship

class AlienInvasion:
    # ...
    def __init__(self):
        # ...
        self.ship = Ship(self)
        # ...

    def run_game(self):
        while True:
            # ... (event loop) ...
            
            # Redraw the screen during each pass.
            self.screen.fill(self.bg_color)
            self.ship.blitme()
            
            pygame.display.flip()
...

ما در سازنده AlienInvasion، یک نمونه از Ship می‌سازیم. سپس، در حلقه اصلی بازی، پس از پر کردن پس‌زمینه، متد blitme() سفینه را فراخوانی می‌کنیم تا تصویر آن روی صفحه ترسیم شود.

اگر اکنون بازی را اجرا کنید، خواهید دید که سفینه فضایی شما در پایین و مرکز پنجره بازی قرار گرفته است.

در این درس، با ساختن یک کلاس مجزا برای سفینه و بارگذاری و ترسیم تصویر آن، اولین عنصر گرافیکی بازی خود را به صفحه اضافه کردیم. یاد گرفتیم که چگونه در Pygame با تصاویر به عنوان سطوح مستطیلی (rects) کار کرده و موقعیت آنها را مدیریت کنیم. در درس بعدی، به سراغ «هدایت کشتی» خواهیم رفت و یاد می‌گیریم که چگونه به ورودی‌های کیبورد کاربر واکنش نشان داده و سفینه را به چپ و راست حرکت دهیم.