0%
بنية اللعبة وحالاتها — الفصل 26

الفصل 26 — بنية اللعبة وحالاتها

الجزء 2A — أساسيات اللعبة ثنائية الأبعاد · الفصل 26 من 62 · 8 ساعات

الفصل 26 — بنية اللعبة وحالاتها

المستوى: متوسط المدة المقدّرة: 8 ساعات المتطلبات المسبقة: الفصول من 20 إلى 25 (حلقة اللعبة، Canvas، السبرايتات، الفيزياء، التصادمات، الكاميرا) والفصول من 8 إلى 11 من الجزء 1A (البرمجة كائنية التوجه، الوراثة، الأصناف المجرّدة، enums) ما ستتمكن من فعله في النهاية: تنظيم لعبة كاملة في كيانات وحالات وخدمات وملفات منفصلة، بدلًا من ملف main.dart واحد يصعب قراءته.


26.0 — أهداف الفصل

في نهاية هذا الفصل، ستكون قادرًا على:

  • شرح السبب الذي يجعل ملفًّا من 2000 سطر يعطّل أي مشروع في النهاية؛
  • فصل البيانات عن المنطق عن الرسم في اللعبة؛
  • تعريف ما هو الكيان (entity) بدقة؛
  • كتابة الصنف المجرّد Entity وجعل الأصناف الأخرى ترث منه بشكل سليم؛
  • توزيع العمل بين update(double dt) وrender(Canvas canvas)؛
  • إدارة قائمة من الكيانات وحلقة تحديثها؛
  • تشخيص وإصلاح خطأ التعديل المتزامن؛
  • إنشاء طوابير للإضافة والحذف؛
  • التحكم في ترتيب الرسم بواسطة الحقل priority؛
  • بناء التسلسل الهرمي Entity → Character → Player / Enemy ومعرفة حدوده؛
  • استبدال الوراثة العميقة بـالتركيب (composition)؛
  • شرح مبدأ ECS (الكيان، المكوّن، النظام)؛
  • مقارنة ECS بالبرمجة كائنية التوجه التقليدية في جدول قرار؛
  • وصف نموذج Flame، أي شجرة المكوّنات؛
  • تعريف حالة اللعبة وكتابة الـ enum المسمّى GameState؛
  • رسم آلة الحالات للعبة كاملة؛
  • تنفيذ القائمة واللعب والإيقاف المؤقت وانتهاء اللعبة والفوز؛
  • تطبيق نمط State: صنف واحد لكل شاشة؛
  • تكديس الحالات لعرض شاشة الإيقاف المؤقت فوق اللعبة؛
  • فصل لوحة المفاتيح عن الإجراءات بواسطة مدير للمدخلات؛
  • اقتراح إعادة تعيين المفاتيح؛
  • جعل الكائنات تتواصل دون ارتباط مباشر بينها بفضل ناقل أحداث (event bus)؛
  • مركزة النقاط والأرواح والتقدّم في خدمة بيانات؛
  • التعرّف على مخاطر Singleton وممارسة حقن تبعيات بسيط؛
  • تنظيم ملفات مشروع لعبة؛
  • تحديد ما يجب اختباره في اللعبة وكتابة هذه الاختبارات؛
  • تجميع المحرّك المصغّر الكامل للجزء 2A؛
  • شرح ما ستضيفه Flame بدقة في الفصل 27.

التعليقات

التعليقات مدعومة عبر GitHub Discussions

سجّل الدخول باستخدام GitHub للمشاركة في النقاش

تم نسخ الرابط!