الدرس 7 من 10

حالات اللعبة

هدف الدرس

متغيّر حالة واحد ودالة انتقال نقيّة

01

الشرح

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

والبديل أن تستعمل آلة الحالات (state machine)، وفيها متغيّر واحد state لا يأخذ إلا قيمة من ثلاث، ويتحدّد معنى كل حدث بحسب هذه القيمة، فالحدث 'start' في القائمة يبدأ اللعب، أما في أثناء اللعب فلا يغيّر شيئًا.

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

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. الحالة القديمة تبقى كما هي
03

تلميحات

0/3
index.html
المعاينة
index.html100%
–/6

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

تجد 6 فحوص في بطاقة «المطلوب».