مقدمه

به فصل دوازدهم خوش آمدید! در سه فصل آینده، ما تمام مفاهیمی را که تاکنون یاد گرفته‌ایم در یک پروژه بزرگ و هیجان‌انگیز به کار خواهیم بست: ساخت یک بازی دو بعدی کلاسیک به نام «هجوم بیگانگان». در این بازی، بازیکن یک سفینه فضایی را در پایین صفحه کنترل می‌کند و به سمت ناوگانی از بیگانگان که از بالای صفحه به پایین حرکت می‌کنند، شلیک می‌کند. هدف، از بین بردن تمام بیگانگان قبل از رسیدن آنها به زمین یا برخورد با سفینه است.

این پروژه به ما کمک می‌کند تا مفاهیمی مانند برنامه‌نویسی شیءگرا، مدیریت رویدادها، و کار با منابع خارجی (مانند تصاویر) را در یک سناریوی واقعی تمرین کنیم. برای ساخت این بازی، از یک کتابخانه قدرتمند و محبوب به نام Pygame استفاده خواهیم کرد.

نصب Pygame

Pygame مجموعه‌ای از ماژول‌های پایتون است که برای نوشتن بازی‌های ویدیویی طراحی شده. این کتابخانه ابزارهایی برای کار با گرافیک، صدا، و ورودی‌های کاربر (مانند کیبورد و ماوس) فراهم می‌کند. از آنجایی که Pygame بخشی از کتابخانه استاندارد پایتون نیست، باید آن را با استفاده از pip نصب کنیم.

برای اطمینان از نصب صحیح و ایزوله بودن وابستگی‌های پروژه، ابتدا یک محیط مجازی (virtual environment) ایجاد کرده و آن را فعال می‌کنیم.

$ python -m venv alien_env
$ source alien_env/bin/activate  # On Windows, use: alien_env\Scripts\activate
                    

پس از فعال‌سازی محیط مجازی، می‌توانیم Pygame را نصب کنیم:

(alien_env) $ pip install pygame
                    

ایجاد کلاس اصلی بازی

پروژه ما حول یک کلاس اصلی به نام AlienInvasion سازماندهی خواهد شد. این کلاس مسئولیت مدیریت کلی بازی، شامل راه‌اندازی پنجره نمایش، حلقه اصلی بازی، و مدیریت رویدادها را بر عهده خواهد داشت. یک فایل جدید به نام alien_invasion.py ایجاد کنید.

ساخت پنجره نمایش

اولین قدم، ایجاد یک پنجره خالی برای بازی است. ما این کار را در متد سازنده (__init__) کلاس AlienInvasion انجام خواهیم داد.

Copy Icon alien_invasion.py
import sys
import pygame

class AlienInvasion:
    """Overall class to manage game assets and behavior."""

    def __init__(self):
        """Initialize the game, and create game resources."""
        pygame.init()
        self.screen = pygame.display.set_mode((1200, 800))
        pygame.display.set_caption("Alien Invasion")

    def run_game(self):
        """Start the main loop for the game."""
        while True:
            # Watch for keyboard and mouse events.
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    sys.exit()
            
            # Redraw the screen during each pass through the loop.
            pygame.display.flip()

if __name__ == '__main__':
    # Make a game instance, and run the game.
    ai = AlienInvasion()
    ai.run_game()

در این کد، ما ابتدا ماژول‌های sys و pygame را وارد می‌کنیم. در متد __init__، تابع pygame.init() را برای راه‌اندازی ماژول‌های پس‌زمینه Pygame فراخوانی می‌کنیم. سپس با pygame.display.set_mode() یک سطح نمایش (surface) یا پنجره با ابعاد ۱۲۰۰ در ۸۰۰ پیکسل ایجاد می‌کنیم.

متد run_game حاوی «حلقه اصلی بازی» (main game loop) است. این حلقه while به طور مداوم اجرا شده و دو کار اصلی را انجام می‌دهد: بررسی رویدادهای کاربر (مانند کلیک روی دکمه بستن پنجره) و به‌روزرسانی محتوای صفحه نمایش با pygame.display.flip(). بلوک if __name__ == '__main__' نیز تضمین می‌کند که کد فقط زمانی اجرا شود که این فایل به صورت مستقیم اجرا شده باشد، نه زمانی که به عنوان یک ماژول import می‌شود.

تنظیم رنگ پس‌زمینه

در نهایت، بیایید یک رنگ پس‌زمینه برای پنجره خود تنظیم کنیم. رنگ‌ها در Pygame به صورت یک تاپل RGB (قرمز، سبز، آبی) با مقادیر بین ۰ تا ۲۵۵ تعریف می‌شوند.

Copy Icon alien_invasion.py
# In the __init__ method:
self.bg_color = (230, 230, 230)

# Inside the while loop in run_game, before flip():
self.screen.fill(self.bg_color)

ما رنگ پس‌زمینه را به عنوان یک اتریبیوت در __init__ ذخیره کرده‌ایم. سپس در هر بار تکرار حلقه اصلی، قبل از به‌روزرسانی نمایش، صفحه را با این رنگ با استفاده از متد fill() پر می‌کنیم. اگر اکنون برنامه را اجرا کنید، یک پنجره خاکستری خالی مشاهده خواهید کرد.

در این درس، ما با نصب Pygame و ایجاد ساختار اولیه پروژه، اولین قدم را برای ساخت بازی هجوم بیگانگان برداشتیم. ما یک پنجره نمایش ساختیم و یک حلقه اصلی بازی را برای مدیریت رویدادها و به‌روزرسانی صفحه پیاده‌سازی کردیم. در درس بعدی، با «اضافه کردن تصویر کشتی»، اولین عنصر گرافیکی بازی یعنی سفینه فضایی بازیکن را به صفحه اضافه خواهیم کرد.