اجعل لعبة مخصّصة قابلة للحراسة
اللعبة المستضافة ذاتيًّا تعمل وتتحقّق بمجرّد أن توجّه game-src إليها. لكن لاستخدامها كـ بوّابة لعبة، حيث يجب على زائر اجتيازها كي يمرّ، على Caputchin أن يكون قادرًا على إعادة اشتقاق النتيجة بنفسه، لا الوثوق بالمتصفّح. لذلك توجد أداة إعادة التشغيل. بنهاية هذا الدرس ستصبح لعبتك المخصّصة مؤهَّلة للحراسة.
هذا مردود الحتمية: لأن لعبتك تسجّل أثرًا وتشتقّ كل شيء من البذرة، يستطيع الخادم تشغيل نسخة بلا واجهة من منطقك مقابل البذرة والأثر نفسيهما والوصول إلى الحُكم نفسه مستقلًّا.
ما أداة إعادة التشغيل
الأداة حزمة JavaScript صغيرة مكتفية بذاتها من منطق لعبتك فقط، بلا عرض، ولا DOM، ولا شبكة. يحمّلها الخادم في عزل معزول ويشغّلها لإنتاج حُكم من (seed, trace). ليست لعبتك القابلة للّعب؛ إنها القاضي بلا الواجهة للعبتك القابلة للّعب.
خاصيّتان مطلوبتان:
- مكتفية بذاتها. لا تستطيع استيراد أي شيء لا يحلّه العازل؛ احزم كل شيء بالداخل. الرفع محدود بـ 2 MB، وهو أعلى كثيرًا من حزمة منطق نموذجية.
- حتمية ومتّفقة مع اللعبة الحيّة. بإعطاء البذرة نفسها والأثر الذي بثّته لعبتك الحيّة، يجب أن تبلغ الحُكم نفسه الذي ادّعته اللعبة الحيّة. إن اختلفا، يحصل اللاعبون الحقيقيون على رفوضات كاذبة.
1. سجّل اللعبة المخصّصة
إن لم تكن قد فعلت، سجّل اللعبة على لوحة التحكّم كي يكون لها معرّف ومكان لحمل الأداة. على صفحة الألعاب لمفتاح موقع (أو الفريق)، استخدم مُدخَل لعبة مخصّصة في لوحة أضِف لعبة: أدخِل معرّفك وانقر عرّف. انظر الألعاب المخصّصة لهذه الخطوة والمخطّط الذي تعرّفه.
2. ارفع الأداة
على علامة الإعدادات للعبة المسجّلة، ارفع حزمة إعادة التشغيل. تُرسَل كملفّ واحد؛ يجزّئها Caputchin بالمحتوى (إعادة رفع البايتات نفسها لا أثر لها) ويشغّل فورًا فحصًا ذاتيًّا.
3. الفحص الذاتي
يشغّل الفحص الذاتي أداتك المرفوعة في عازل إعادة التشغيل مقابل بذرة اصطناعية (وعيّنة أثرك المُلتزَم بها، إن قدّمت واحدة) ويسجّل ما إذا أنتجت حُكمًا نظيفًا:
- يجتاز ← يصير التثبيت مؤهَّلًا للحراسة. يُزال وسم غير قابلة للإعادة، وتستطيع الآن تشغيل اشترِط لعبة بهذه اللعبة في المجمّع.
- يفشل ← تظلّ الأداة مخزَّنة (كي تفحص الخطأ)، لكن يبقى التثبيت غير مؤهَّل للحراسة. أصلِح المنطق وأعِد الرفع.
فحص ذاتي فاشل هو المنظومة تخبرك بأن القاضي بلا الواجهة لا يتّفق مع نفسه أو تعذّر تشغيله؛ إنه بالضبط الاختلاف الذي كان سيسبّب رفوضات كاذبة في الإنتاج، مُمسَكًا قبل أن يصيبه أي زائر.
4. شغّل البوّابة
بمجرّد أن يجتاز الفحص الذاتي، تكون اللعبة في مجمّع بوّابة المفتاح. شغّل اشترِط لعبة على صفحة الأمان للمفتاح (أو سقف فرض اللعبة للفريق)، وسيقدّم Caputchin لعبتك المخصّصة، ويأخذ أثر اللاعب، ويعيد تشغيل أداتك على الخادم لتقرير كل تحقّق.
إبقاء الاثنين متزامنين
اللعبة الحيّة (محمَّلة عبر game-src) وأداة إعادة التشغيل بناءان من المنطق نفسه. حين تغيّر أي شيء يؤثّر في الحصيلة، أعد البناء والرفع للأداة كي يظلّ الاثنان متّفقين. إن انحرفا، يبدأ الفحص الذاتي أو إعادة تشغيل الإنتاج برفض فوز حقيقي. بناء كليهما من وحدة منطق مشتركة واحدة هو الطريقة الموثوقة لإبقائهما متطابقين.
انظر أيضًا
- ابنِ لعبة مستضافة ذاتيًّا: إنتاج الأثر الذي تعيد هذه الأداة تشغيله.
- الألعاب وبوّابة اللعبة: تشغيل البوّابة ومتطلّب قابلية إعادة التشغيل.
- الألعاب المخصّصة: التسجيل ووسم غير-قابلة-للإعادة.
- مرجع مخطّط لوحة التحكّم: الحقول التي تقرأها اللعبة من سياق مصنعها.