Как я восемь дней выкручивал игру из ИИ
У нас в компании объявили неделю ИИ: каждый разработчик может попробовать ИИ для любой цели. Подписки, любые инструменты, какие только захотим — в пределах разумного, понятное дело. А моя супруга ровно в этот момент играла в игру, где надо выкручивать винтики. Я не знаю, как этот жанр называется. Какой-то пазл: выкручиваешь болтики в правильном порядке, раскладываешь по цветным лоткам и, короче, побеждаешь, выкручивая винтики.
Я оценил механику и поставил себе задачу. У меня есть ровно восемь дней — не больше и не меньше. Я должен сделать игру с помощью ИИ как можно быстрее и с как можно лучшим качеством. Весь код, вся графика, концепт-арт и так далее — ИИ. Я только оркестрирую: организовываю геймплей и решаю, что и как делать. Так появился Screw Master: первая моя попытка сделать игру, не делая её руками.
Я ж не животное — кнопочки тыкать
Начал с кода: ODIE (один из наших внутренних движков, классический ECS) и PixiJS 8 на рендере. Первым делом я постарался как можно строже закрутить все валидации TypeScript и сразу принял для себя: тестирование будет автоматическим, игра с первого дня делается с прицелом на самопроверку. Я ж не животное — кнопочки тыкать.
Идея была такая: в игру играет Playwright. Он получает весь харнес и инструментарий, чтобы это делать: доступ к инпуту, доступ к рендер-графу, доступ к ECS. Каждая фича доказывается видео: ИИ что-то строит, открывает PR, прикладывает запись — я смотрю, всё ли мне нравится, и даю фидбек. Никаких «поверь мне, работает» — вот тебе ролик, смотри сам.
Вот, собственно, что из этого получилось. Можно выкрутить пару винтиков, не отходя от статьи:
Фигма, MCP и борьба за вменяемость
Весь интерфейс делался через Фигму. Я собирал сцены так, как они должны выглядеть, потом Figma MCP отдавал модели доступ к данным и ресурсам, и уже на основе этого строился UI.
Отдельной проблемой было научить этот MCP и модель дружить друг с другом и не строить фигню. Мне пришлось очень углубиться в Фигму: выстраивать все компоненты предельно логично и структурировано, чтобы на том конце вместо нонсенса получалось что-то вменяемое. Долго мучился, подбирая компоненты так, чтобы они были как бы в одном стиле. С генерацией одинаковых моделек, но другого цвета, — те же страдания.
Баги — то, что ИИ генерирует лучше всего
А вот и самая большая проблема.
Баги — это то, что ИИ генерирует лучше всего. Причём такие баги — ох, прямо диву даёшься.
Это был прямо челлендж — даже объяснить, в чём баг. Особенно когда ИИ делает что-то конкретное: например, несколько анимаций должны положить болтики на свои места одновременно. Он на этом просто сходил с ума. Ну вот нельзя это сделать красиво через очередь или стек — нужно именно всю эту херню вычудить: с отменой промисов, с их остановкой. Короче, самый прямой способ наделать кучу проблем. Сотни промптов. Это была прямо боль.
Так что, можно так делать игры?
Я считаю, эксперимент закончился позитивно: я довёл его до точки. Для себя понял: сделать прототип на ИИ полностью окей. Делать продукт… ну, это прямо не знаю. Надо быть борзым. Ооочень борзым.
Генерация картинок тоже была не ахти: ты заказывал болтики красного цвета — получал грибы. Почему? Я не знаю. Может, форма, а может, цвет. Но, как и всё в этом мире, много труда, нервов и мата — и ты получаешь что-то плюс-минус не очень ужасное.
Быстрее ли делать это руками? Если про код — наоборот, руками быстрее. Но только если исключить тесты, которых тут больше, чем самого кода, — так что тут нюансы. Про графику — я бы такое сам не нарисовал, но любой художник сделал бы лучше. Так что выводы делайте сами. Наверное, в будущем планка поднимется, и такие проекты станут реально возможными. На данный момент уровень качества, который может вытянуть ИИ, — это уровень MVP или прототипа. Дальше — просто лотерея.
Но для себя я многому научился: Фигме, тому, как делать e2e-тесты, — и тому, как их не делать. Так что опыт оцениваю позитивно. Хотелось бы иметь больше времени на такие штуки, но увы: в сутках 24 часа, и кушать хочется, и ребёнка в школу. Так что оторвался — и хватит.