مقدمه

در این درس، ما با افزودن سیستم سطح‌بندی، بازی را چالش‌برانگیزتر و جذاب‌تر می‌کنیم. با هر بار که بازیکن تمام بیگانگان یک ناوگان را از بین می‌برد، بازی باید سخت‌تر شود. ما این کار را با افزایش سرعت سفینه، گلوله‌ها و بیگانگان انجام خواهیم داد.

تغییر تنظیمات سرعت

ابتدا، باید تنظیمات بازی خود را به دو بخش تقسیم کنیم: تنظیمات ثابت که در طول بازی تغییر نمی‌کنند (مانند ابعاد صفحه) و تنظیمات دینامیک که با پیشرفت در مراحل بازی تغییر می‌کنند (مانند سرعت‌ها). ما یک متد جدید به نام initialize_dynamic_settings در کلاس Settings ایجاد می‌کنیم.

Copy Icon settings.py
class Settings:
    # ... (other settings) ...
    def __init__(self):
        # ... (static settings) ...
        self.speedup_scale = 1.1
        self.initialize_dynamic_settings()

    def initialize_dynamic_settings(self):
        """Initialize settings that change throughout the game."""
        self.ship_speed = 1.5
        self.bullet_speed = 3.0
        self.alien_speed = 1.0
        # fleet_direction of 1 represents right; -1 represents left.
        self.fleet_direction = 1

    def increase_speed(self):
        """Increase speed settings."""
        self.ship_speed *= self.speedup_scale
        self.bullet_speed *= self.speedup_scale
        self.alien_speed *= self.speedup_scale

ما یک متغیر speedup_scale برای کنترل نرخ افزایش سرعت تعریف کرده‌ایم. متد increase_speed سرعت تمام عناصر بازی را بر اساس این مقیاس افزایش می‌دهد.

ریست کردن سطح

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

Copy Icon alien_invasion.py
# In _check_play_button():
if button_clicked and not self.game_active:
    # Reset the game settings.
    self.settings.initialize_dynamic_settings()
    # ...

# In _check_bullet_alien_collisions():
if not self.aliens:
    # ...
    self.settings.increase_speed()

وقتی بازی از نو شروع می‌شود (با کلیک روی دکمه Play)، ما با فراخوانی initialize_dynamic_settings سرعت را ریست می‌کنیم. اما زمانی که تمام بیگانگان یک ناوگان از بین می‌روند، ما متد increase_speed را فراخوانی می‌کنیم تا بازی برای مرحله بعد سخت‌تر شود.

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