الدرس 7 من 10

حالات اللعبة

هدف الدرس

حالة واحدة، ودالة انتقال خالصة

01

الشرح

كل لعبة تمرّ بأطوار: قائمة البداية، ثم اللعب، ثم شاشة الخسارة، ثم لعب من جديد. والكود الذي يديرها بأعلام متفرّقة — isPlaying وisDead وshowMenu — ينتهي بتركيبات مستحيلة: لاعب خاسر ما زال يجمع النقاط.

البديل آلة حالات: قيمة واحدة state لا تكون إلا واحدة من ثلاث، وكل حدث يُفسَّر بحسبها. فـ 'start' في القائمة يبدأ اللعب، وفي منتصف اللعب لا يعني شيئًا.

واجعل الانتقال دالة خالصة: تأخذ الحالة والحدث وتُرجع حالة جديدة، ولا تعدّل القديمة. فتختبرها بلا شاشة، وتسجّل الأحداث وتعيد تشغيلها، وتقارن الحالة قبل الحدث وبعده.

02

المطلوب

اكتب transition(game, event) للكائن { state, score, lives }: الحدث 'start' في 'menu' أو 'gameover' يبدأ لعبًا جديدًا بنتيجة 0 وثلاث حيوات. وفي 'playing': 'point' يزيد النتيجة واحدًا، و'hit' ينقص حياة، ونفادها ينقل إلى 'gameover'. وأي حدث آخر يُرجع الحالة كما هي. للتجربة انقر المعاينة والمؤشّر داخل المربّع الأخضر.

معايير التصحيح

6 معايير
  1. start ينقل القائمة إلى اللعب
  2. point يزيد النتيجة واحدًا
  3. hit ينقص حياة، والأخيرة تنهي اللعبة
  4. الإعادة تبدأ من الصفر بثلاث حيوات
  5. الحدث في غير حالته يُهمَل
  6. الحالة القديمة لا تُعدَّل
index.html
المعاينة
index.html100%
–/6

اضغط «تشغيل» ليبدأ الفحص.

6 معايير في بطاقة «المطلوب».