---
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, с твоим взаимодействием как UX) или только-игра вообще без проверки. Используй его для брендированного взаимодействия, а не для ворот безопасности, которые тебе нужно реплеить.

## Самостоятельно размещённая игра в iframe: может ставить ворота

[Самостоятельно размещённая игра](/docs/custom-game-development/self-hosted-game) это настоящая игра в песочнице: JavaScript-бандл, построенный против пакета `@caputchin/game-sdk`, который работает в iframe виджета, говорит с хостом через мост SDK и отчитывается **трассой**, которую сервер может перезапустить. Ты размещаешь бандл сам и наводишь виджет на него атрибутом `game-src`.

Поскольку раунд производит воспроизводимую трассу, самостоятельно размещённая игра **может ставить ворота** на ключе сайта, но только когда ты дашь Caputchin [артефакт реплея](/docs/custom-game-development/replay-and-gating): маленькую headless-сборку логики твоей игры, которую сервер запускает, чтобы перевывести вердикт. Пока этот артефакт не загружен и не прошёл свою самопроверку, пользовательская игра показывается как **Не воспроизводима** и не может ставить ворота.

## Что добавляет панель

Игра из маркетплейса поставляет манифест `caputchin.json`, который объявляет её поля настройки. У пользовательской игры нет манифеста, так что **ты объявляешь эти поля в панели** вместо этого: ты [регистрируешь пользовательскую игру](/docs/game-customization/custom-games) по id, который выбираешь, определяешь её [схему](/docs/custom-game-development/dashboard-schema) полей на каждую ось (язык, скин, конфигурация) и авторствуешь пресеты против неё. Отсюда она разрешается и применяется ровно как игра из маркетплейса, на тех же уровнях тарифов.

Так что полная поверхность пользовательской игры такова:

| Часть | Где | Нужна для |
|---|---|---|
| Сама игра | Твой код, твой хост | Всегда |
| Доставка | Слот `trigger="manual"` или iframe `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): регистрация и размещение со стороны клиента.
