الدرس 5 من 10
آلة الحالات
- 14 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
انتقالات صريحة وخطّافات دخول وخروج
الشرح
الحارس في لعبتك إمّا واقف أو يطارد أو يهاجم، ولا يجمع حالتين في وقت واحد. وآلة الحالات تكتب هذا صراحة: حالة واحدة في كل لحظة، ولكل حالة جدول بالحالات التي يُسمح بالانتقال إليها. فلا هجوم من الوقوف مباشرة، بل مطاردة أوّلًا.
والبديل الذي تبدأ به ألعاب كثيرة متغيّرات منطقية متفرّقة مثل isChasing وisAttacking، ثم يظهر حارس يطارد ويهاجم في اللحظة نفسها لأن سطرًا نسي أن يُطفئ أحدهما. ولكل حالة خطّافان اختياريّان: enter يبدأ حركتها أو صوتها عند الدخول، وexit ينظّف ما بدأته عند الخروج.
والفخّ في الترتيب: تحقّق من أن الانتقال مسموح قبل أن تنادي أي خطّاف. من ينادي exit ثم يكتشف أن الانتقال ممنوع يترك الحارس في حالة الهجوم وقد أغمد سيفه. ثم exit القديمة قبل enter الجديدة، وإلا نظّفت القديمة ما بدأته الجديدة للتوّ.
المطلوب
أكمل StateMachine:go(to): إن لم تكن to في جدول to للحالة الحالية فأرجِع false دون أن تنادي شيئًا. وإلا فنادِ exit القديمة إن وُجدت، ثم غيّر self.state، ثم نادِ enter الجديدة إن وُجدت، وأرجِع true.
معايير التصحيح
6 معايير- الانتقال المسموح يغيّر الحالة
- الانتقال الممنوع يُرجع false والحالة باقية
- الانتقال الممنوع لا ينادي أي خطّاف
- exit القديمة قبل enter الجديدة
- الحالة تتغيّر بين الخطّافين
- الخطّافان اختياريّان