Как я собрал игру с управлением взглядом с помощью ИИ

Привет, меня зовут Дмитрий Подлужный. Я UX-дизайнер и человек, умеющий руководить направлениями и делать хороший бизнес-продукт. Еще я веду канал UX Point — можно подписаться. А вообще больше обо мне можно узнать на моем сайте podluzny.ru.

Но здесь я в роли экспериментатора. Я пробую вайб-кодинг, чтобы найти новые возможности его применения в формировании пользовательского опыта. Ну и просто, чтобы не отстать от жизни.

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

С чего все начиналось

Любой эксперимент я начинаю либо с желания попробовать конкретное решение, либо с попытки скрестить несколько технологий. В этом случае мне захотелось сделать игровой интерфейс, в котором можно управлять взглядом.

Задача амбициозная, но вполне подходит для эксперимента. Сначала нужно было сформулировать требования к игре. И тут выяснилось, что мне лень описывать игровую механику. Меня больше интересовало, можно ли вообще что-то сделать, а не конкретное решение.

Поэтому я пошел в ChatGPT и написал первый промпт проекта:

«Придумай простую игру, которая строится на механике отслеживания положения глаз пользователя с камеры компьютера».
Как я собрал игру с управлением взглядом с помощью ИИ

ИИ предложил несколько вариантов, но меня они не устроили. Я начал уточнять предпочтения в диалоге. Например, попросил, чтобы это была стрелялка. Зная технические ограничения, сразу указал, что управление должно идти от положения лица, а не глаз.

После нескольких итераций я попросил сделать компактное описание.

Работая с вайб-кодингом, я заметил одну дилемму: если делать слишком детальное описание проекта, шанс получить результат «не туда» возрастает. Если же описание компактное, выше вероятность, что основная канва проекта пойдет в нужном направлении.

С этим промптом я и пошел в v0, чтобы сгенерировать код проекта.

Работа в v0

Я пробовал разные вайб-платформы. У всех есть свои плюсы и минусы, но для меня самой сбалансированной оказалась v0. Там можно достаточно экономно делать проекты, а качество получается вполне достойное.

Первая версия была почти не рабочей. Выяснилось, что рабочая область слишком маленькая. Затем несколько промтов подряд не могли подключиться внешние библиотеки, не отображалось видео. Потом было еще что-то.

В итоге примерно к тринадцатому промпту приложение приобрело вид, который уже можно было считать рабочим.

Чтобы было веселее, я добавил в приложение таблицу лидеров. А чтобылидеры отображались не только локально, данные для нее я стал сохранять во внешней базе Supabase.

Остальные доработки касались управления прицелом и настройки голосового управления.

Первый вариант игрового интерфейса
Первый вариант игрового интерфейса

С самого начала я дал v0 инструкцию выносить параметры системы в отдельный блок. Это хороший подход: он позволяет потом локально настраивать код. Иногда проще самому что-то поправить, чем долго добиваться этого от ИИ.

Развитие механики управления

Следующим шагом стало изменение алгоритма управления прицелом. Хотелось, чтобы он реагировал на поворот головы.

После очередного промпта результат получился двояким. С одной стороны, модель добавила механизм изменения прицела в зависимости от поворота головы. С другой, он работал только в режиме отладки. В игровом режиме ничего не изменилось.

И тут начался тупеж ИИ.

Это одна из неприятных ситуаций, когда модель начинает повторять свои же решения и упорно не делает то, что ты просишь. После нескольких попыток изменить механику управления в игровой части я так и не смог добиться результата.

Но у меня уже есть алгоритм поведения в таких случаях.

Когда ИИ начинает ходить по кругу, причин может быть много, и выбить его из этого состояния почти невозможно. Есть два варианта, которые у меня работают:

  1. Сделать копию проекта и попробовать работать с ней.
  2. Взять код и пойти в другую модель.

В этот раз я выбрал второй путь. Я взял код проекта и пошел с ним в ChatGPT и Gemini. В этом проекте я успел поработать с обеими моделями.

Запрос на изменение кода в ChatGPT
Запрос на изменение кода в ChatGPT

Какие-то правки я вносил вручную по рекомендациям ChatGPT. А в некоторых случаях просто просил написать целиком код компонента и копировал его обратно в v0. Это и решило проблему.

Результаты эксперимента

Для меня результатом стало несколько важных выводов.

Во-первых, я смог совместить работу камеры, модель MediaPipe FaceMesh для распознавания положения лица в реальном времени, голосовой интерфейс управления, внешнюю базу данных для хранения информации. В общем, что хотел использовать, то и получилось. Можете попробовать сами все это в действии по этой ссылке.

Текущий игровой интерфейс https://v0-face-mesh-with-rays.vercel.app/ 
Текущий игровой интерфейс https://v0-face-mesh-with-rays.vercel.app/ 

Во-вторых, стало очевидно, что управление головой и частями тела — это очень утомительно. Высокая физическая и когнитивная нагрузка делает такие интерфейсы специфичными. Использовать их нужно крайне осторожно.

И в-третьих, для меня в очередной раз стало ясно: динамичные интерфейсы нужно делать сразу в интерактиве. Никакие статичные экраны и умственные усилия не позволяют почувствовать всю сложность и динамику пользовательского пространства. В него нужно просто войти. Хотя, для геймдизайнеров эта мысль звучит, наверное, как банальщина.

Ну и еще одним результатом стала эта статья. Возможно, кто-то из вас найдет в ней несколько полезных подходов для своих работ.

В конечном счете, можете сделать себе такой же проект в Figma Make, Lovable или v0. Тут финальный промт для проекта.

# Face Mesh Shooting Game ## Описание проекта Инновационная браузерная игра, управляемая движениями головы и голосом игрока через веб-камеру и микрофон. Игра использует технологии распознавания лица для создания уникального игрового опыта без необходимости использования мыши или геймпада. ## Концепция игры Вы - защитник центральной точки экрана. Враги непрерывно атакуют центр с разных направлений, и ваша задача - уничтожать их до того, как они достигнут цели. Управление прицелом осуществляется поворотами головы, а выстрел производится голосовой командой или нажатием клавиши пробел. ## Управление ### Прицеливание - **Поворот головы влево** → прицел движется вправо - **Поворот головы вправо** → прицел движется влево - **Наклон головы вниз** → прицел движется вверх - **Наклон головы вверх** → прицел движется вниз Инвертированное управление создает естественное ощущение прицеливания взглядом. ### Стрельба - **Голосовая команда** - произнесите любой звук достаточной громкости - **Клавиша Пробел** - альтернативный способ выстрела ## Игровые механики ### Базовая игра - Враги появляются на краях экрана и движутся к центру - Каждое попадание по врагу дает **10 очков** - При достижении врагом центра вы теряете **1 единицу здоровья** - Игра заканчивается при достижении здоровья 0 - Начальное здоровье: **10 единиц** ### Бонусные объекты Во время игры появляются специальные объекты, дающие различные преимущества: #### 1. Комета ⭐ Яркий золотой объект, летящий по диагонали через экран - Появляется после набора 100 очков - Награда: **+50 очков** - Оставляет световой след #### 2. Аптечка 💚 Зеленый крест, медленно дрейфующий по экрану - Появляется когда здоровье падает ниже 50% - Эффект: восстанавливает **2 единицы здоровья** - Исчезает через несколько секунд #### 3. Звезда замедления ⏱️ Фиолетовая звезда с магическим свечением - Эффект: замедляет всех врагов на **4 секунды** - Экран приобретает фиолетовый оттенок - Враги движутся в 3 раза медленнее #### 4. Щит 🛡️ Синяя пульсирующая сфера - Эффект: **10 секунд** полной защиты - Враги не наносят урон при достижении центра - Вокруг центра появляется защитный ореол #### 5. Мультивыстрел 🔥 Оранжевый вращающийся объект - Эффект: **5 секунд** усиленной стрельбы - Прицел становится оранжевым - Увеличенная область поражения #### 6. Цепная реакция ⚡ Фиолетовая сфера с концентрическими кольцами - Появляется когда на экране 5+ врагов - Эффект: **уничтожает всех врагов** на экране - Создает мощную волну энергии - Награда: 10 очков за каждого уничтоженного врага #### 7. Магнит очков ✨ Золотая монета с символом x2 - Эффект: **15 секунд** удвоенных очков - Все награды за врагов умножаются на 2 - Таймер отображается в интерфейсе ## Режимы ### Игровой режим Полноценная игра с врагами, бонусами и таблицей рекордов ### Режим отладки (Debug) Показывает техническую информацию: - Положение глаз на экране - Углы поворота головы (Pitch, Yaw, Roll) - Вектор прицеливания от центра лица к прицелу - Статус микрофона и уровень громкости - Частоту кадров (FPS) - Количество обнаруженных точек лица ## Система рекордов После окончания игры вы можете: - Сохранить свой результат с инициалами (3 буквы) - Посмотреть таблицу лучших результатов - Увидеть свое место в рейтинге Рекорды сохраняются в базе данных и доступны всем игрокам. ## Калибровка управления Все параметры управления настраиваются: - Чувствительность поворота головы по горизонтали (стандарт: ±30°) - Чувствительность наклона головы по вертикали (стандарт: ±18°) - Инверсия направлений управления - Скорость реакции прицела - Порог громкости для голосовых команд ## Визуальные эффекты - Частицы взрыва при уничтожении врагов - Световые эффекты для всех бонусов - Анимации активных эффектов - Дрожание прицела при попадании - Конфетти при попадании в топ-10 ## Требования - Современный браузер с поддержкой WebRTC - Веб-камера для отслеживания лица - Микрофон для голосовых команд (опционально) - Хорошее освещение для качественного распознавания лица ## Особенности - Полностью бесконтактное управление - Адаптивная сложность - Реалистичная физика движения - Плавная анимация всех элементов - Система визуальной обратной связи - Accessibility-friendly (можно играть без голоса, используя клавиатуру)

Спасибо, что нашли время прочитать эту статью. Ваши мысли и отклики для меня действительно важны. Делитесь впечатлениями или вопросами, я обязательно отвечу.