مقدمه
در این درس، ما یک سیستم امتیازدهی کامل برای بازی خود پیادهسازی میکنیم. این سیستم شامل نمایش
امتیاز فعلی، بالاترین امتیاز کسب شده، و تعداد جانهای باقیمانده بازیکن است. این اطلاعات به
بازیکن کمک میکند تا پیشرفت خود را بسنجد و انگیزه بیشتری برای ادامه بازی داشته باشد.
ایجاد کلاس Scoreboard
برای مدیریت و نمایش تمام اطلاعات مربوط به امتیازات، یک کلاس جدید به نام Scoreboard در یک فایل
جدید به نام scoreboard.py ایجاد میکنیم. این کلاس مسئولیت تبدیل متن امتیازات به تصویر و
ترسیم آنها روی صفحه را بر عهده خواهد داشت.
scoreboard.py
import pygame.font
class Scoreboard:
"""A class to report scoring information."""
def __init__(self, ai_game):
"""Initialize scorekeeping attributes."""
self.screen = ai_game.screen
self.screen_rect = self.screen.get_rect()
self.settings = ai_game.settings
self.stats = ai_game.stats
self.text_color = (30, 30, 30)
self.font = pygame.font.SysFont(None, 48)
self.prep_score()
self.prep_high_score()
def prep_score(self):
"""Turn the score into a rendered image."""
score_str = str(self.stats.score)
self.score_image = self.font.render(score_str, True,
self.text_color, self.settings.bg_color)
self.score_rect = self.score_image.get_rect()
self.score_rect.right = self.screen_rect.right - 20
self.score_rect.top = 20
def show_score(self):
"""Draw score to the screen."""
self.screen.blit(self.score_image, self.score_rect)
self.screen.blit(self.high_score_image, self.high_score_rect)
در این کد، ما متدی به نام prep_score داریم که مقدار عددی امتیاز را به یک رشته و سپس با
استفاده از font.render به یک تصویر تبدیل میکند. ما موقعیت این تصویر را در گوشه بالا و راست
صفحه تنظیم میکنیم. متد show_score نیز مسئول ترسیم این تصویر روی صفحه است. ما متدهای
مشابهی (`prep_high_score`, `prep_level`, `prep_ships`) برای نمایش بالاترین امتیاز، شماره مرحله و
تعداد جانهای باقیمانده نیز ایجاد خواهیم کرد.
بهروزرسانی امتیاز
امتیاز بازیکن باید با از بین بردن هر بیگانه افزایش یابد. ما این منطق را در کلاس AlienInvasion
و در متد _check_bullet_alien_collisions پیادهسازی میکنیم.
alien_invasion.py
collisions = pygame.sprite.groupcollide(
self.bullets, self.aliens, True, True)
if collisions:
self.stats.score += self.settings.alien_points
self.sb.prep_score()
اگر برخوردی رخ دهد، ما امتیاز را به اندازه alien_points (که در Settings تعریف شده) افزایش
داده و سپس بلافاصله متد prep_score را روی نمونه Scoreboard (که با نام sb ذخیره
شده) فراخوانی میکنیم تا تصویر امتیاز جدید برای ترسیم در فریم بعدی، آماده شود.
مدیریت بالاترین امتیاز
ما باید در هر لحظه بررسی کنیم که آیا امتیاز فعلی از بالاترین امتیاز ثبت شده بیشتر است یا خیر.
اگر چنین بود، باید بالاترین امتیاز را بهروزرسانی کنیم. این بررسی را میتوان در متد
_check_bullet_alien_collisions انجام داد. همچنین باید بالاترین امتیاز را در یک فایل ذخیره
کنیم تا در اجراهای بعدی بازی نیز باقی بماند.
در این درس، با ایجاد یک کلاس Scoreboard، سیستم کامل امتیازدهی را به بازی خود اضافه کردیم. ما
اکنون میتوانیم امتیاز فعلی، بالاترین امتیاز و جانهای باقیمانده را به صورت زنده روی صفحه نمایش
دهیم. با این قابلیت، پروژه ساخت بازی ما به پایان میرسد. شما اکنون یک بازی کامل و قابل بازی با
قابلیتهای پیشرفته مانند سطحبندی و امتیازدهی دارید. در فصل بعدی، به سراغ «تولید داده» خواهیم
رفت و یاد میگیریم که چگونه با استفاده از کتابخانههایی مانند Matplotlib و Plotly دادهها
را مصورسازی کرده و نمودارهای زیبا ایجاد کنیم.