Всё началось с обычной детской просьбы. Дочь Алиса захотела свою игру. Не просто посмотреть мультик или поиграть во что-то готовое, а чтобы папа сделал игру, в которой можно защищать домик от всяких теней.
Отказать было сложно. Я программист, поэтому аргумент «папа не умеет» не сработал бы.
Так появились «Хвосты» — игра, которая начиналась как небольшой семейный проект, а постепенно превратилась в нечто гораздо большее.
Изначальная идея — мультяшная tower defense. По дорожке к домику движутся тени, а игрок расставляет вдоль пути подружек-защитниц. Каждая помогает отгонять незваных гостей и не даёт им добраться до домика.
У защитниц есть имена: Мила, Тея, Никша и Ива.
Но самое интересное в разработке началось не с идеи, а с тестирования.
Главный тестировщик — ребёнок
Самое ценное в том, чтобы делать игру для собственного ребёнка, — заказчик всегда рядом. И он совершенно не обязан быть вежливым.
Взрослый тестировщик может написать: «В целом неплохо, есть небольшие замечания». Ребёнок просто скажет, что скучно, и пойдёт играть во что-нибудь другое.
Поэтому многие решения появились благодаря Алисе.
Никакой рекламы, покупок и аккаунтов. Игра делалась для ребёнка, поэтому никаких предложений посмотреть ролик ради дополнительной жизни или купить что-нибудь за настоящие деньги.
Управление должно быть удобным для маленьких пальцев. Кнопки реагируют непосредственно на касание, чтобы можно было одновременно двигаться и прыгать. Если палец промахнулся мимо кнопки, камера не должна внезапно улетать в сторону.
Редактор уровней. Неожиданно оказалось, что создавать собственные уровни интереснее, чем проходить те, которые сделал папа. Можно придумывать свои дорожки, расставлять объекты и проверять, что получится.
Совместная игра. Добавил возможность играть компанией до четырёх человек. Чтобы не приходилось передавать телефон друг другу и ждать своей очереди.
А потом появился космос
В какой-то момент одной защиты домика стало мало. Захотелось чего-то ещё — так появилась космическая гонка.
Игрок управляет небольшим треугольным кораблём, который летит по извилистому тоннелю среди планет. Чем выше скорость, тем сложнее удержаться на поворотах. Корабль заносит, и приходится учитывать инерцию.
Здесь уже совсем другая механика: вместо расстановки защитников — скорость, реакция и борьба за первое место.
Но на этом идеи не закончились.
Постепенно в игре появились:
Конструктор трасс. Можно собирать маршрут из отдельных блоков, почти как в кубических играх. Расставляешь кубики, а игра превращает их в полноценный тоннель.
Развилки. Трасса может разделяться на две ветки, а потом снова объединяться. Можно выбирать путь и пытаться обогнать соперников.
Оружие. Можно стрелять по другим участникам гонки. Попадание замедляет соперника.
Грязевая бомба. Зажимаешь кнопку «Огонь» — и соперников облепляет чёрная грязь, а твой корабль защищает зелёная сфера. При этом на трассе может быть только одна такая бомба, иначе баланс быстро превращается в хаос.
Запись гонок. Можно пересмотреть заезд и ещё раз насладиться моментом, когда удалось обогнать всех.
Мастерская корабля. За выполнение заданий в редакторе трасс игрок получает звёзды. Их можно потратить на новые крылья, раскраски, эмблемы и цветные следы двигателя.
По сути, игра стала расти вместе с фантазией маленького заказчика. Стоило реализовать одну идею, как появлялась следующая: «А давай ещё вот так!»
И, пожалуй, именно это оказалось самым интересным во всём проекте.
Как всё устроено технически
Теперь немного о реализации.
JavaScript и three.js. Игра написана на JavaScript с использованием three.js. Без сборщиков и сложной инфраструктуры: открываешь файлы — и всё работает. Браузерная версия запускается прямо с сайта.
Android. Мобильное приложение представляет собой WebView-обёртку, внутри которой работают те же игровые файлы. То есть не пришлось разрабатывать отдельную игру для Android.
Мультиплеер. Небольшой сервер на Node.js и WebSocket отвечает за создание комнат и соединение игроков. Саму игру рассчитывает устройство создателя комнаты, а остальные участники подключаются к нему.
Баланс уровней. Вместо того чтобы подбирать характеристики врагов исключительно на глаз, я написал симулятор. Боты, имитирующие поведение детей, проходят каждый уровень сотни раз. На основе результатов программа корректирует здоровье теней: первый уровень должен проходиться почти всегда, а последний — уже требовать определённых усилий.
ИИ в разработке. Работал с Claude Code. Архитектуру, игровые механики и итоговые решения определял сам, а ИИ помогал с рутинными задачами, тестами и сборками. Это заметно ускорило разработку.
Без граблей, конечно, не обошлось
Первую версию приложения Google Play отклонил. Причём причина оказалась довольно простой: после запуска на телефоне отображался пустой экран.
На компьютере браузерная версия работала прекрасно, а внутри Android-приложения игра не могла найти собственные файлы.
Оказалось, что WebView и обычный браузер не всегда одинаково работают с путями к ресурсам. Пришлось разбираться с загрузкой файлов и проверять всё уже непосредственно на устройстве.
Главный вывод: недостаточно убедиться, что игра работает в браузере на компьютере. Её нужно запускать на реальном телефоне и проверять именно так, как ей предстоит работать у пользователя.
Была и другая проблема. Одна из бесплатных 3D-моделей персонажей оказалась неподходящей для детской игры. Модель пришлось убрать из списка доступных персонажей и пересмотреть подход к выбору сторонних ресурсов.
Что получилось в итоге
Из небольшой идеи про защиту домика выросла полноценная игра с несколькими режимами.
На данный момент в ней есть:
Две карты для защиты домика.
Космическая гонка на десяти трассах.
Редактор уровней для tower defense.
Конструктор гоночных трасс.
Мультиплеер до четырёх участников.
Настройка внешнего вида космического корабля.
Запись гонок.
И всё это бесплатно, без рекламы, встроенных покупок и регистрации.
Вместо заключения
Для меня «Хвосты» — это не столько очередной игровой проект, сколько возможность сделать что-то вместе с дочерью.
Я получил интересную техническую задачу, Алиса — игру, в которой можно придумывать собственные правила, уровни и гонки. А ещё у нас появился отличный повод регулярно обсуждать новые идеи.
И самое главное: у проекта нет окончательного технического задания. Потому что каждый раз, когда кажется, что уже всё готово, рядом появляется маленький заказчик с очередным предложением.
Если у вас тоже есть дети, которые заказывают папам и мамам игры, приложения или другие невероятные вещи, расскажите в комментариях, что вам уже пришлось реализовать.
А если попробуете «Хвосты» и найдёте баг — обязательно пишите. Будем исправлять!