Запусти свою собственную игру
Пользовательская игра это игра, которую ты строишь и размещаешь, используемая в виджете Caputchin вместо игры из маркетплейса. Никто другой не может её установить, нет темы GitHub и нет шага публикации, и код остаётся у тебя. Этот раздел это подробное руководство «сделай-сам» по этому пути. (Если ты хочешь выпустить игру, чтобы её мог встроить кто угодно, это разработка игры для маркетплейса, отдельный путь.)
Есть два способа доставить пользовательскую игру, и это по-настоящему разные поверхности с разными пределами. Выбирай по тому, что тебе нужно:
Ручной режим: твой собственный DOM, без ворот
Ручной режим это лёгкий вариант. Ты задаёшь trigger="manual" на <caputchin-game>, помещаешь свою собственную разметку внутрь и вызываешь методы pass() / fail() элемента из своего собственного кода, когда посетитель успевает или нет. Нет iframe и нет игрового SDK; виджет просто даёт тебе свою оболочку раскладки и проверочную обвязку вокруг твоей разметки.
Компромисс: раунд ручного режима нельзя реплеить на сервере, так что игра ручного режима не может удовлетворить игровые ворота. Она работает только на ключе без ворот (проверка proof-of-work, с твоим взаимодействием как UX) или только-игра вообще без проверки. Используй его для брендированного взаимодействия, а не для ворот безопасности, которые тебе нужно реплеить.
Самостоятельно размещённая игра в iframe: может ставить ворота
Самостоятельно размещённая игра это настоящая игра в песочнице: JavaScript-бандл, построенный против пакета @caputchin/game-sdk, который работает в iframe виджета, говорит с хостом через мост SDK и отчитывается трассой, которую сервер может перезапустить. Ты размещаешь бандл сам и наводишь виджет на него атрибутом game-src.
Поскольку раунд производит воспроизводимую трассу, самостоятельно размещённая игра может ставить ворота на ключе сайта, но только когда ты дашь Caputchin артефакт реплея: маленькую headless-сборку логики твоей игры, которую сервер запускает, чтобы перевывести вердикт. Пока этот артефакт не загружен и не прошёл свою самопроверку, пользовательская игра показывается как Не воспроизводима и не может ставить ворота.
Что добавляет панель
Игра из маркетплейса поставляет манифест caputchin.json, который объявляет её поля настройки. У пользовательской игры нет манифеста, так что ты объявляешь эти поля в панели вместо этого: ты регистрируешь пользовательскую игру по id, который выбираешь, определяешь её схему полей на каждую ось (язык, скин, конфигурация) и авторствуешь пресеты против неё. Отсюда она разрешается и применяется ровно как игра из маркетплейса, на тех же уровнях тарифов.
Так что полная поверхность пользовательской игры такова:
| Часть | Где | Нужна для |
|---|---|---|
| Сама игра | Твой код, твой хост | Всегда |
| Доставка | Слот trigger="manual" или iframe game-src | Всегда |
| Схема полей + пресеты | Панель (ты определяешь схему) | Настройки языка / скина / конфигурации |
| Артефакт реплея | Загрузка в панель | Постановки ворот проверки (только самостоятельно размещённая) |
См. также
- Ручной режим: вставь свой собственный DOM и управляй pass/fail.
- Самостоятельно размещённая игра: построй воспроизводимую игру в iframe с SDK.
- Реплей и постановка ворот: загрузи артефакт, дающий пользовательской игре ставить ворота.
- Справочник схемы панели: схема полей, которую ты определяешь для пользовательской игры.
- Пользовательские игры: регистрация и размещение со стороны клиента.