نمایش مرحله و تعداد سفینهها
نمایش دادن مرحله
برای نمایش مرحلهای از بازی که بازیکن در آن قرار دارد، باید ابتدا شاخصهای به GameStats اضافه کنیم که بیانگر مرحلهی فعلی باشد. برای بازنشانی مرحله در ابتدای هر بازی جدید آن را در reset_stats() مقداردهی اوّلیّه میکنیم:
برای این که Scoreboard مرحلهی فعلی را نمایش دهد تابعی جدید را به نام prep_level() از __init__() صدا میکنیم:
این متد prep_level() است:
|
|
متد prep_level() تصویری از مقدار ذخیرهشده در stats.level میسازد و مقدار مشخّصهی right آن را متناسب با مشخّصهی right امتیازها تعیین میکند. سپس مشخّصهی top تصویر را ۱۰ پیکسل پایینتر از انتهای تصویر امتیاز قرار میدهد تا بین امتیاز و مرحله فاصلهای بیفتد.
باید show_score() را هم بهروز کنیم:
خطّی که به تازگی اضافه شده تصویر مرحله را روی صفحه نشان میدهد.
در _check_bullet_alien_collisions() مقدار stats.level را افزایش داده و تصویر مرحله را بهروز میکنیم:
اگر ناوگانی نابود شود مقدار stats.level را افزایش میدهیم و prep_level() را فرامیخوانیم تا مطمئن شویم که مرحلهی جدید به درستی نمایش داده میشود.
برای اطمینان از بهروزرسانی درست تصویر مرحله در آغاز یک بازی جدید، هنگامی که بازیکن دکمهی Play را فشار میدهد نیز یک بار متد prep_level() را صدا میکنیم:
prep_level() را درست پس از فراخوانی prep_score() صدا میکنیم.
حال تعداد مراحلی را که به پایان رساندهاید خواهید دید، مانند شکل ۱۴-۵.
شکل ۱۴-۵: مرحلهی فعلی درست زیر امتیاز فعلی نمایان میشود.
font.render() در Scoreboard اضافه کنید.نمایش تعداد سفینهها
در نهایت تعداد سفینههایی را که برای بازیکن باقی مانده نمایش میدهیم امّا این بار از تصویرهای گرافیکی استفاده میکنیم. برای چنین کاری، همانند بسیاری از بازیهای آرکید، سفینهها را در گوشهی بالا-چپ صفحه میکشیم تا بیانگر تعداد سفینههای باقیمانده باشد.
ابتدا باید کاری کنیم که Ship از Sprite ارث ببرد تا بتوانیم گروهی از سفینهها بسازیم:
اینجا Sprite را وارد میکنیم، مطمئن میشویم که Ship از Sprite ارث میبرد و super() را در ابتدای __init__() فرامیخوانیم.
سپس باید Scoreboard را طوری تغییر دهیم تا گروهی از سفینهها برای نمایش بسازد. این عبارتهای import در Scoreboard است:
چون گروهی از سفینهها میسازیم Group و Ship را وارد میکنیم.
این __init__() است:
نمونهی بازی را به یک مشخّصه نسبت میدهیم زیرا آن را برای ساختن چند سفینه نیاز داریم. prep_ships() را پس از فراخوانی prep_level() صدا میکنیم.
این prep_ships() است:
متد prep_ships() گروهی خالی به نام self.ships میسازد تا نمونههای سفینه را در آن نگه دارد. برای پر کردن این گروه حلقهای یک بار برای هر کدام از سفینههای باقیمانده اجرا میشود. داخل حلقه سفینه جدیدی میسازیم و مقدار مختصّهی x آن را طوری تنظیم میکنیم تا سفینهها کنار یکدیگر و با یک حاشیهی ۱۰ پیکسلی از سمت چپ گروه سفینهها دیده شوند. مقدار مختصّهی y را ده پیکسل پایینتر از بالای صفحه میگذاریم تا سفینهها در گوشهی بالا-چپ صفحه دیده شوند. سپس هر سفینه جدید را به گروه ships اضافه میکنیم.
حال باید سفینهها را روی صفحه بکشیم:
برای نمایش سفینهها روی صفحه draw() را روی هر گروه اعمال میکنیم و پایگیم هر سفینه را رسم میکند.
برای این که به بازیکن نشان دهیم که چند سفینه برای شروع بازی در اختیار دارد، prep_ships() را هنگام شروع یک بازی جدید فرامیخوانیم. این کار را در _check_play_button() در AlienInvasion انجام میدهیم:
این متد را هنگام مورد اصابت قرار گرفتن یک سفینه هم صدا میکنیم تا تصویر سفینهها را هنگام از دست رفتن یک سفینه بهروز کنیم:
متد prep_ships() را پس از کاهش دادن مقدار ships_left صدا میکنیم تا هنگام نابود شدن هر سفینه تعداد درست سفینهها نمایش داده شود.
شکل ۱۴-۶ نظام امتیازدهی کامل را به همراه تعداد سفینههای باقیمانده در گوشهی بالا-چپ تصویر نشان میدهد.
شکل ۱۴-۶: نظام کامل امتیازدهی برای هجوم بیگانگان