الدرس 7 من 10
حالات اللعبة
- 14 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
حالة واحدة، ودالة انتقال خالصة
الشرح
كل لعبة تمرّ بأطوار: قائمة البداية، ثم اللعب، ثم شاشة الخسارة، ثم لعب من جديد. والكود الذي يديرها بأعلام متفرّقة — isPlaying وisDead وshowMenu — ينتهي بتركيبات مستحيلة: لاعب خاسر ما زال يجمع النقاط.
البديل آلة حالات: قيمة واحدة state لا تكون إلا واحدة من ثلاث، وكل حدث يُفسَّر بحسبها. فـ 'start' في القائمة يبدأ اللعب، وفي منتصف اللعب لا يعني شيئًا.
واجعل الانتقال دالة خالصة: تأخذ الحالة والحدث وتُرجع حالة جديدة، ولا تعدّل القديمة. فتختبرها بلا شاشة، وتسجّل الأحداث وتعيد تشغيلها، وتقارن الحالة قبل الحدث وبعده.
المطلوب
اكتب transition(game, event) للكائن { state, score, lives }: الحدث 'start' في 'menu' أو 'gameover' يبدأ لعبًا جديدًا بنتيجة 0 وثلاث حيوات. وفي 'playing': 'point' يزيد النتيجة واحدًا، و'hit' ينقص حياة، ونفادها ينقل إلى 'gameover'. وأي حدث آخر يُرجع الحالة كما هي. للتجربة انقر المعاينة والمؤشّر داخل المربّع الأخضر.
معايير التصحيح
6 معايير- start ينقل القائمة إلى اللعب
- point يزيد النتيجة واحدًا
- hit ينقص حياة، والأخيرة تنهي اللعبة
- الإعادة تبدأ من الصفر بثلاث حيوات
- الحدث في غير حالته يُهمَل
- الحالة القديمة لا تُعدَّل