Игровая логика как JSON — GraphDoc DSL и визуальное программирование через ActionFlow
Почему мы описываем настольные игры как графы состояний в JSON — и как AI научился генерировать их из обычного текста.
Вот вопрос, который звучит просто, но таковым не является: как позволить кому-то — человеку или AI — описать настольную игру, не написав ни строчки кода?
Наш ответ — GraphDoc: JSON-документ, описывающий игру как граф состояний. Узлы — это состояния игры. Переходы живут внутри node.data, а не в рёбрах. Внутри каждого узла ActionFlow определяет, что происходит при входе, какие действия доступны и куда можно перейти дальше. Это визуальное программирование, сериализованное в JSON.
Конвейер прост: AI читает текстовое описание (“хочу карточную игру типа Войны”), генерирует GraphDoc, редактор визуализирует его через ReactFlow, а движок исполняет через GameLoader → NewGameEngine. Валидатор проверяет структуру перед запуском.
Почему JSON? Потому что это лингва-франка между нашим AI-сервисом, редактором и движком. AI генерирует JSON. Редактор читает JSON. Движок исполняет JSON. Никаких слоёв трансляции, никаких рассогласований.
ActionFlow заслуживает отдельного внимания. Это «код» внутри каждого узла — граф вызовов хэндлеров, соединённых потоком выполнения. Представьте визуальный скриптовый язык, где каждый шаг — хэндлер плагина: взять карту, проверить условие, изменить ресурс, испустить событие. AI не пишет JavaScript — он собирает эти потоки из доступных хэндлеров.
Такой дизайн означает, что AI никогда не касается сырого кода. Он работает на уровне композиции — выбирает правильные хэндлеры, соединяет их в правильном порядке, задаёт правильные параметры. Это гораздо более ограниченная (а значит, более надёжная) задача, чем свободное программирование.
GraphDoc — не просто формат данных. Это контракт между человеческим творчеством и машинным исполнением — то, что делает возможным «описать игру на обычном английском и сразу в неё поиграть».