Caputchin
Разработка пользовательской игры

Сделай пользовательскую игру способной ставить ворота

Самостоятельно размещённая игра работает и проверяет, как только ты наводишь на неё game-src. Но чтобы использовать её как игровые ворота, где посетитель должен её пройти, чтобы пройти, Caputchin должен уметь перевывести результат сам, а не доверять браузеру. Для этого и нужен артефакт реплея. К концу этого руководства твоя пользовательская игра станет годной для ворот.

Это выигрыш от детерминизма: поскольку твоя игра записывает трассу и выводит всё из сида, сервер может запустить headless-копию твоей логики против того же сида и трассы и прийти к тому же вердикту независимо.

Что такое артефакт реплея

Артефакт это маленький, самодостаточный JavaScript-бандл только твоей игровой логики, без рендеринга, без DOM и без сети. Сервер загружает его в изолированную песочницу и запускает, чтобы произвести вердикт из (seed, trace). Это не твоя играбельная игра; это headless-судья твоей играбельной игры.

Требуются два свойства:

  • Самодостаточный. Он не может импортировать ничего, что изолят не разрешит; собери всё внутрь. Загрузка ограничена 2 MB, что намного выше типичного бандла логики.
  • Детерминированный и согласный с живой игрой. При том же сиде и трассе, которую испустила твоя живая игра, он должен прийти к тому же вердикту, что заявила живая игра. Если они расходятся, реальные игроки получают ложные отказы.

1. Зарегистрируй пользовательскую игру

Если ты ещё не сделал этого, зарегистрируй игру в панели, чтобы у неё были id и место, где держать артефакт. На странице Игры ключа сайта (или команды) используй ввод Пользовательская игра в панели Добавить игру: введи свой id и кликни Определить. Смотри пользовательские игры для этого шага и схему, которую ты определяешь.

2. Загрузи артефакт

На вкладке Настройки зарегистрированной игры загрузи бандл реплея. Он отправляется как один файл; Caputchin хеширует его содержимое (повторная загрузка тех же байтов это no-op) и сразу запускает самопроверку.

3. Самопроверка

Самопроверка запускает твой загруженный артефакт в изоляте реплея против синтетического сида (и твоего закоммиченного образца трассы, если ты его предоставишь) и записывает, произвёл ли он чистый вердикт:

  • Проходит → установка становится годной для ворот. Значок Не воспроизводима очищается, и ты теперь можешь включить требование игры с этой игрой в пуле.
  • Сбоит → артефакт всё ещё хранится (так что ты можешь осмотреть ошибку), но установка остаётся негодной для ворот. Почини логику и перезагрузи.

Сбойная самопроверка это система, говорящая тебе, что headless-судья не согласен сам с собой или не смог запуститься; это ровно то расхождение, которое вызвало бы ложные отказы в продакшене, пойманное до того, как любой посетитель на него наткнётся.

4. Включи ворота

Как только самопроверка проходит, игра в пуле ворот ключа. Включи Требовать игру на странице Безопасность ключа (или потолок принудительной игры команды), и Caputchin будет отдавать твою пользовательскую игру, брать трассу игрока и перезапускать твой артефакт на сервере, чтобы решить каждую проверку.

Держим эти двое в синхроне

Живая игра (загружаемая через game-src) и артефакт реплея это две сборки одной логики. Когда ты меняешь что-либо, что влияет на исход, пересобери и перезагрузи артефакт, чтобы эти двое всё ещё совпадали. Если они расходятся, самопроверка или продакшен-реплей начнёт отвергать реальные победы. Сборка обоих из одного общего модуля логики это надёжный способ держать их идентичными.

См. также

На этой странице