You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web-Dev-For-Beginners/translations/fa/6-space-game/1-introduction/assignment.md

7.3 KiB

نمونه‌سازی یک بازی: اعمال الگوهای طراحی

نمای کلی پروژه

دانش تازه‌کسب‌شده‌تان درباره‌ی الگوهای طراحی را با ساخت یک نمونه‌ی ساده از بازی به کار بگیرید! این تمرین به شما کمک می‌کند تا در هر دو بخش الگوهای معماری (وراثت یا ترکیب) و سیستم ارتباطی pub/sub که در درس آموختید، تمرین کنید.

دستورالعمل‌ها

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

الزامات

الگوی معماری خود را انتخاب کنید:

  • گزینه A: استفاده از وراثت مبتنی بر کلاس (مانند مثال GameObjectMovableHero)
  • گزینه B: استفاده از ترکیب (مانند روش تابع کارخانه با رفتارهای ترکیبی)

ارتباط را پیاده‌سازی کنید:

  • شامل کردن کلاسی به نام EventEmitter برای پیام‌رسانی pub/sub
  • تنظیم حداقل ۲-۳ نوع پیام مختلف (مانند PLAYER_MOVE، ENEMY_SPAWN، SCORE_UPDATE)
  • وصل کردن ورودی کاربر (صفحه‌کلید/ماوس) به رویدادهای بازی از طریق سیستم رویداد

عناصر بازی برای گنجاندن:

  • حداقل یک شخصیت تحت کنترل بازیکن
  • حداقل یک شیء بازی دیگر (دشمن، قابل جمع‌آوری یا عنصر محیطی)
  • تعامل پایه بین اشیاء (برخورد، جمع‌آوری، یا ارتباط)

ایده‌های پیشنهادی برای بازی

بازی‌های ساده برای در نظر گرفتن:

  • بازی مار بخش‌های مار سر را دنبال می‌کنند، غذا به طور تصادفی ظاهر می‌شود
  • تغییراتی در بازی پنگ راکت به ورودی پاسخ می‌دهد، توپ از دیوارها منعکس می‌شود
  • بازی جمع‌آوری‌کننده بازیکن حرکت می‌کند و در حین اجتناب از موانع آیتم‌ها را جمع می‌کند
  • مبانی دفاع بر برج برج‌ها دشمنان متحرک را شناسایی و به آنها شلیک می‌کنند

راهنمای ساختار کد

// ساختار شروع نمونه
const Messages = {
  // پیام‌های بازی خود را اینجا تعریف کنید
};

class EventEmitter {
  // پیاده‌سازی سیستم رویداد شما
}

// یکی از روش‌های مبتنی بر کلاس یا ترکیبی را انتخاب کنید
// نمونه مبتنی بر کلاس:
class GameObject { /* base properties */ }
class Player extends GameObject { /* player-specific behavior */ }

// یا نمونه ترکیبی:
const gameObject = { /* base properties */ };
const movable = { /* movement behavior */ };
function createPlayer() { /* combine behaviors */ }

تست پیاده‌سازی شما

کد خود را با موارد زیر بررسی کنید:

  • آزمودن اینکه اشیاء هنگام فعال شدن رویدادها حرکت یا تغییر می‌کنند
  • تایید اینکه چندین شیء می‌توانند به همان رویداد پاسخ دهند
  • بررسی اینکه می‌توانید رفتارهای جدید را بدون اصلاح کد موجود اضافه کنید
  • اطمینان از اینکه ورودی صفحه‌کلید/ماوس به درستی رویدادهای بازی را فعال می‌کند

دستورالعمل‌های ارسال پروژه

ارسال شما باید شامل موارد زیر باشد:

  1. فایل(های) JavaScript با پیاده‌سازی بازی شما
  2. فایل HTML برای اجرای بازی و تست آن (می‌تواند ساده باشد)
  3. توضیحاتی در مورد اینکه کدام الگو را انتخاب کردید و چرا
  4. مستندات مختصری درباره انواع پیام‌های استفاده شده و عملکرد هر کدام

معیار ارزیابی

معیار نمونه عالی (۳ امتیاز) قابل‌قبول (۲ امتیاز) نیاز به بهبود (۱ امتیاز)
الگوی معماری به درستی یا وراثت یا ترکیب را با سلسله‌مراتب واضح کلاس/شیء پیاده می‌کند الگوی انتخاب شده را با مشکلات یا ناسازگاری‌های جزئی استفاده می‌کند تلاش برای استفاده از الگو ولی پیاده‌سازی مشکلات اساسی دارد
پیاده‌سازی Pub/Sub EventEmitter با انواع پیام مختلف و جریان رویداد صحیح عملکرد دارد سیستم pub/sub پایه‌ای با برخی مدیریت رویدادها کار می‌کند سیستم رویداد موجود است اما به طور قابل اعتماد کار نمی‌کند
عملکرد بازی سه عنصر یا بیشتر تعاملی که از طریق رویدادها ارتباط دارند دو عنصر تعاملی با ارتباط رویداد پایه یک عنصر به رویدادها یا تعامل پایه پاسخ می‌دهد
کیفیت کد کدی تمیز، با کامنت‌های خوب، سازماندهی منطقی و جاوااسکریپت مدرن کدی عموماً سازماندهی شده با کامنت‌های کافی کد کار می‌کند اما فاقد سازماندهی یا توضیح واضح است

امتیازهای اضافه:

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

توضیح مهم:
این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است حاوی خطاها یا عدم دقت‌هایی باشند. سند اصلی به زبان مادر خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده شود. ما هیچ مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.