---
type: explanation
title: شغّل لعبتك الخاصة
summary: ما تطوير اللعبة المخصّصة، والطريقتان لتسليم لعبتك الخاصة (خانة يدوية أو إطار iframe مستضاف ذاتيًّا)، وما الذي تضيفه لوحة التحكّم (المخطّط، والتهيئات، وأداة إعادة التشغيل التي تتيح للعبة مخصّصة الحراسة).
---

اللعبة المخصّصة لعبة تبنيها **أنت** وتستضيفها، تُستخدَم في أداة Caputchin بدل لعبة [المتجر](/marketplace). لا أحد آخر يستطيع تثبيتها، ولا موضوع GitHub ولا خطوة نشر، وتبقي الكود. هذا القسم هو الدليل المفصّل، ابنِه-بنفسك، لذلك المسار. (إن أردت شحن لعبة كي يضمّنها *أي أحد*، فذلك [تطوير لعبة المتجر](/docs/marketplace-game-development/overview)، مسار منفصل.)

هناك طريقتان لتسليم لعبة مخصّصة، وهما سطحان مختلفان حقًّا بحدود مختلفة. اختر بحسب ما تحتاجه:

```mermaid
flowchart TD
  Q{ما الذي تحتاجه}
  Q -->|فقط DOM خاصتي في الأداة،<br/>بلا بوّابة تحقّق| M[الوضع اليدوي]
  Q -->|لعبة حقيقية تستطيع حراسة التحقّق<br/>مُعادة التشغيل على الخادم| S[لعبة iframe مستضافة ذاتيًّا]
  M --> MX["&lt;caputchin-game trigger=manual&gt;<br/>تخصّص تركيبك الخاص<br/>تقود pass() / fail() بنفسك"]
  S --> SX["حزمة JS تستخدم @caputchin/game-sdk<br/>تستضيفها أنت، تُحمَّل عبر game-src<br/>+ أداة إعادة تشغيل مرفوعة إلى لوحة التحكّم"]
```

## الوضع اليدوي: DOM خاصتك، بلا بوّابة

[الوضع اليدوي](/docs/custom-game-development/manual-mode) هو الخيار الخفيف. تضبط `trigger="manual"` على `<caputchin-game>`، وتضع تركيبك الخاص داخله، وتنادي طريقتي العنصر `pass()` / `fail()` من كودك الخاص حين ينجح الزائر أو يفشل. لا إطار iframe ولا SDK لعبة؛ الأداة تعطيك غلاف تخطيطها وسباكة التحقّق حول تركيبك فقط.

المقايضة: جولة الوضع اليدوي **لا يمكن إعادة تشغيلها على الخادم**، فلعبة الوضع اليدوي **لا تستطيع إرضاء [بوّابة لعبة](/docs/site-keys/games)**. تعمل فقط على مفتاح غير محكوم ببوّابة (تحقّق proof-of-work، بتفاعلك كتجربة استخدام)، أو لعبة فقط بلا تحقّق البتّة. استخدمها لتفاعل موسوم بعلامة، لا لبوّابة أمان تحتاج إعادة تشغيلها.

## لعبة iframe مستضافة ذاتيًّا: تستطيع الحراسة

[اللعبة المستضافة ذاتيًّا](/docs/custom-game-development/self-hosted-game) لعبة حقيقية معزولة: حزمة JavaScript مبنيّة مقابل حزمة `@caputchin/game-sdk` تعمل في إطار iframe الخاص بالأداة، وتكلّم المضيف عبر جسر الـ SDK، وتبلّغ **أثرًا** يستطيع الخادم إعادة تشغيله. تستضيف الحزمة بنفسك وتوجّه الأداة إليها بسمة `game-src`.

ولأن الجولة تنتج أثرًا قابلًا لإعادة التشغيل، تستطيع لعبة مستضافة ذاتيًّا **حراسة** مفتاح موقع، لكن فقط بعد أن تعطي Caputchin [أداة إعادة تشغيل](/docs/custom-game-development/replay-and-gating): نسخة صغيرة بلا واجهة من منطق لعبتك يشغّلها الخادم لإعادة اشتقاق الحُكم. حتى تُرفَع تلك الأداة وتجتاز فحصها الذاتي، تظهر اللعبة المخصّصة **غير قابلة للإعادة** ولا تستطيع الحراسة.

## ما الذي تضيفه لوحة التحكّم

لعبة المتجر تشحن بيان `caputchin.json` يعلن حقول تخصيصها. لعبة مخصّصة لا بيان لها، فـ**تعلن تلك الحقول على لوحة التحكّم** بدلًا: [تسجّل اللعبة المخصّصة](/docs/game-customization/custom-games) بمعرّف تختاره، وتعرّف [مخطّط](/docs/custom-game-development/dashboard-schema) حقولها لكل محور (لغة، مظهر، إعداد)، وتؤلّف تهيئات مقابله. من هناك تُحلّ وتُطبَّق تمامًا كلعبة المتجر، على مستويات الباقات نفسها.

فسطح اللعبة المخصّصة الكامل هو:

| القطعة | أين | لازمة لـ |
|---|---|---|
| اللعبة نفسها | كودك، مضيفك | دائمًا |
| التسليم | خانة `trigger="manual"`، أو إطار `game-src` | دائمًا |
| مخطّط الحقول + التهيئات | لوحة التحكّم (تعرّف المخطّط) | تخصيص اللغة / المظهر / الإعداد |
| أداة إعادة التشغيل | رفع في لوحة التحكّم | حراسة التحقّق (المستضاف ذاتيًّا فقط) |

## انظر أيضًا

- [الوضع اليدوي](/docs/custom-game-development/manual-mode): خصّص DOM خاصتك وقُد pass/fail.
- [اللعبة المستضافة ذاتيًّا](/docs/custom-game-development/self-hosted-game): ابنِ لعبة iframe قابلة لإعادة التشغيل بالـ SDK.
- [إعادة التشغيل والحراسة](/docs/custom-game-development/replay-and-gating): ارفع الأداة التي تتيح للعبة مخصّصة الحراسة.
- [مرجع مخطّط لوحة التحكّم](/docs/custom-game-development/dashboard-schema): مخطّط الحقول الذي تعرّفه للعبة مخصّصة.
- [الألعاب المخصّصة](/docs/game-customization/custom-games): التسجيل والاستضافة، من جانب العميل.
