گرد کردن امتیاز و بالاترین امتیاز
گرد کردن امتیاز
در بیشتر بازیهای شبهآرکید امتیازات به صورت مضربهایی از ۱۰ گزارش میشوند بنابراین ما نیز همین رویّه را پی میگیریم. علاوه بر این به امتیازهای بزرگ جداکنندهی کاما اضافه میکنیم. این تغییر را در Scoreboard اضافه میکنیم:
تابع round() معمولاً یک عدد اعشاری را تا تعداد رقمی که در نشانوند دوم آن تعیین شده گرد میکند. امّا اگر عددی منفی را به عنوان نشانوند دوم وارد کنیم این تابع عدد را به نزدیکترین ۱۰، ۱۰۰، ۱۰۰۰ و … گرد میکند. کد به پایتون میگوید که مقدار stats.score را به نزدیکترین مضرب ۱۰ گرد و در rounded_score ذخیره کن.
از یک راهنمای شکلدهی رشته استفاده میکنیم تا پایتون هنگام تبدیل عدد به رشته، آن را سه رقم سه رقم با کاما جدا کند تا مثلاً به جای 1000000، 1,000,000 را نمایش دهد. حال اگر بازی را اجرا کنید امتیاز را به شکلی مرتّب و همچنین گردشده مشاهده خواهید کرد حتّی اگر امتیازهای خیلی زیادی کسب کرده باشید، چنانکه در شکل ۱۴-۳ دیده میشود.
شکل ۱۴-۳: امتیاز گردشده با جداکنندهی کاما
بالاترین امتیاز
هر بازیکنی دوست دارد که بالاترین رکورد بازی را بشکند بنابراین باید بالاترین امتیاز کسبشده را ذخیره و گزارش کنیم تا بازیکنان انگیزهای برای پیشرفت در بازی داشته باشند. بیشترین امتیازها را در GameStats ذخیره میکنیم:
از آنجاییکه بیشترین امتیاز هیچگاه نباید بازنشانی شود آن را به جای reset_stats() در __init__() مقداردهی اوّلیّه میکنیم.
سپس Scoreboard را طوری تغییر میدهیم که بالاترین امتیاز را نشان دهد. از متد __init__() شروع میکنیم:
بیشترین امتیاز را جدا از امتیاز نمایش میدهیم پس به متدی جدید، prep_high_score() احتیاج داریم تا تصویر بیشترین امتیاز را آماده کند.
این متد prep_high_score() است:
|
|
بیشترین امتیاز را به نزدیکترین مضرب ۱۰ گرد کرده و آن را با کاما جدا میکنیم. سپس تصویری از بیشترین امتیاز میسازیم، rect آن را افقی وسطچین میکنیم و مشخّصهی top آن را با بالای تصویر امتیازها همتراز میکنیم.
اکنون متد show_score() امتیاز فعلی را در بالا-راست و بیشترین امتیاز را در بالا-وسط صفحه نشان میدهد:
برای بررسی بیشترین امتیازها متد جدیدی به نام check_high_score() در Scoreboard مینویسیم:
متد check_high_score() امتیاز فعلی را با بالاترین امتیاز مقایسه میکند. اگر بیشتر باشد مقدار high_score را بهروز میکنیم و برای بهروزرسانی عکس بالاترین امتیاز prep_high_score() را صدا میکنیم.
باید متد check_high_score() را پس از مورد اصابت قرار گرفتن هر موجود بیگانه و پس از بهروزرسانی امتیاز در _check_bullet_alien_collisions() بهروز کنیم:
متد check_high_score() را زمانی فرامیخوانیم که دیکشنری collisions موجود باشد و این کار را پس از بهروزرسانی امتیاز مربوط به کشتن تمام موجودات بیگانه انجام میدهیم.
اوّلین بازی که هجوم بیگانگان را بازی میکنیم امتیاز شما بالاترین امتیاز خواهد بود بنابراین به عنوان امتیاز فعلی و بالاترین امتیاز نمایش داده خواهد شد. ولی زمانی که بازی دیگری را شروع کنید بالاترین امتیاز در میانهی صفحه و امتیاز فعلیتان در سمت راست دیده خواهید شد چنانکه در شکل ۱۴-۴ میبینیم.
شکل ۱۴-۴: بالاترین امتیاز در وسط-بالای صفحه نمایش داده میشود.