Как я создал игру для разработчиков на Flutter
Всем привет! На связи Амир Утеуов — ML-инженер в Авито.
В этой публикации я расскажу историю создания мобильной игры DevRush — пет-проекта, который эволюционировал до полноценной активности на стенде IT-конференции CodeFest 2025.
Всё началось с того, что под рукой оказался набор иконок различных языков программирования и фреймворков. Это вдохновило меня создать приложение, суть которого — максимально оперативно находить нужный логотип среди множества случайных. До этого момента я не имел опыта в разработке и релизе мобильных игр, но решил пройти этот путь с чистого листа.
Статья будет состоять из двух частей: в первой я подробно разберу процесс разработки первой версии и возникшие трудности, а во второй — расскажу о том, как мы адаптировали игру для выступления на конференции.
Подробное содержание первой части:
Почему именно Flutter?
Начнем с фундаментального вопроса — выбора инструментария для разработки.

Меня привлекает концепция кроссплатформенности: когда единожды написанный код успешно функционирует на iOS, Android, десктопах и в вебе. Проанализировав множество вариантов, я остановился на Flutter.
Flutter — мощный фреймворк для создания кроссплатформенных приложений, использующий язык Dart.
Dart — это лаконичный C-подобный язык, разработанный Google специально для подобных задач. Он существенно упрощает разработку за счет продвинутых инструментов. К примеру, hot reload позволяет мгновенно видеть изменения в коде, отображающиеся в эмуляторе или на реальном устройстве, будь то верстка, бизнес-логика или вычислительные переменные в рантайме.
Flutter предлагает богатую библиотеку виджетов с возможностью гибкой настройки дизайна. А механизм event loop обеспечивает эффективную асинхронную работу в одном потоке.
Изучив официальные материалы по Flutter и отличный бесплатный курс по Dart, я, не имея опыта в геймдеве, приступил к реализации.
Следующим этапом стала архитектурная схема приложения:

Приложение требовало экранов главного меню, самой игры, информационного раздела и экрана завершения. Также был критически важен таймер обратного отсчета.
Игровую логику я реализовывал самостоятельно, не подозревая о существовании движка Flutter Flame (сейчас бы, конечно, выбрал его). Изначально я установил таймер на 16 секунд, но позже увеличил его до 32, так как этого времени игрокам не хватало.

Выбор технологий для иконок
Я отбирал только те языки программирования, которые на слуху. Чтобы игра была доступной, я включил в неё как активно используемые, так и стабильные языки, имеющие сильное сообщество и регулярные обновления.
Поэтому в датасет попал, например, Fortran (так как он развивается), но не вошел экспериментальный или альфа-версионный софт. Также я сделал акцент на языках общего назначения (general-purpose), исключив узкоспециализированные вроде 1C или SAP ABAP, а также языки смарт-контрактов (Solidity, Plutus) и разметки.
Технологий в мире бесчисленное множество (миллионы пакетов в репозиториях вроде PyPI, Maven или npm), поэтому я отобрал около 250 наиболее узнаваемых.
Геймплей
Напомню задумку: игроку предлагается за ограниченное время отыскать нужную иконку среди массива других.
Прогрессия сложности устроена так:
-
Уровень «Junior»: у каждой иконки есть текстовая подсказка с названием технологии.
-
Уровень «Middle»: подсказки есть только у половины иконок, ориентируемся на визуальную память.
-
Уровень «Senior»: подсказок нет, ищем исключительно по логотипу.
Посмотрев на датасет, я понял, что интуитивно узнаю около 90% иконок. Чтобы сделать игру познавательнее, я написал Python-скрипт, который через DuckDuckGo API подтягивал краткое описание для каждой технологии.
Вышло довольно информативно:

Для ускорения релиза все описания оставил на английском языке.

Реализация проекта на Flutter
Настройка окружения — первый этап, где возможны сюрпризы в зависимости от ОС. Использовать шаблонные проекты Flutter для Web, Desktop или мобильных платформ удобно из консоли VS Code. Альтернатива — FlutLab, если вы предпочитаете облачную разработку без установки зависимостей локально.
Я создал структуру проекта, добавляя нужные экраны и логику. Ключевой момент — понимание работы event loop во Flutter: если перегрузить основной поток вычислениями, приложение начнет «фризить».
Для базового дизайна я использовал стандартные стили, но обязательно внедрил поддержку темной темы.
Ресурсы (иконки, датасет, анимации) хранились в папке assets. Использовал PNG из-за поддержки прозрачности. Некоторые иконки терялись на фоне, поэтому пришлось программно добавить возможность контурной обводки.
В первой версии метаданные о файле я «зашивал» прямо в его имя, например: «Python_pr_nbrr.png» означало «технология Python, категория Programming Language, без необходимости границы (no border)». Не самый изящный подход, но для MVP сработал.
Игра насчитывала 64 уровня с динамически увеличивающимся количеством иконок на поле 4×4. Также реализовал режим контеста: за счет фиксированного random seed на разных устройствах генерировалось одинаковое поле — отличный вариант для дружеских соревнований.


На экране победы, как вишенка на торте, появилась анимация статистики.

Главный вызов: векторная анимация
Больше всего времени ушло на создание анимации разлетающихся иконок в формате Lottie. Я генерировал их с помощью Python-скриптов, настраивая эффекты взрыва через easings.
Процесс напомнил уроки информатики: перемещение частиц по физическим формулам. Чтобы анимация не казалась однообразной, я сделал 10 различных вариантов, выбираемых случайным образом. Конечно, логику можно было реализовать на чистом Dart, но тогда это казалось слишком сложной задачей.
Визуализация экрана победы

Сборка и дистрибуция
Flutter поддерживает сборку под множество платформ. Для Android предпочтительно использовать формат App Bundle (.aab), который оптимизирует размер загружаемого контента, подгружая только необходимые ресурсы для конкретного устройства. Для iOS, в свою очередь, обязательны Mac OS и свежий Xcode.
Учитывая текущие ограничения для разработчиков из РФ, создание платных приложений невозможно — только бесплатный софт без внутренней монетизации.
Самым кропотливым этапом стала настройка сертификатов и ключей для подписи приложений. Важно помнить, что структура Flutter-проекта включает папки Android и iOS с метаданными — фактически, это отдельные проекты, которые можно открывать в Android Studio или Xcode, но основная работа ведется на уровне кода Flutter.
Прохождение модерации
Первая попытка релиза в App Store закончилась отклонением из-за «рекламы конкурентов» — на одном из скриншотов присутствовала иконка Android. Мне пришлось удалить её, хотя в контексте игры это было вполне логично.

Этот опыт заставляет думать, что Apple использует автоматизированные системы анализа изображений.
Итоги
-
Геймдев — это увлекательный и познавательный процесс.
-
Первая публикация — серьезный бюрократический этап.
-
Четкое проектирование на старте помогло избежать глобальных переделок в ходе разработки.
-
Flutter отлично подходит для таких проектов: ресурсов фреймворка более чем достаточно.
-
Чтобы избежать проблем с производительностью, важно не перегружать event loop — выносите тяжелые вычисления в отдельные потоки.
-
Работа с векторной анимацией (Lottie + Python) — тема для отдельной глубокой статьи.
To be continued
Игра жила своей жизнью, пока коллеги не предложили адаптировать её для стенда Авито на конференции Code Fest 2025. О новом дизайне, веб-лидерборде и том, как прошла активность — в следующей статье!
Что еще посмотреть по теме
-
Игра DevRush: Google Play, AppStore — буду благодарен за фидбек!
-
Мой Telegram-канал о пет-проектах
-
Сообщество мобильных разработчиков Coffee & Code

Крику падальщика из Gothic исполнилось почти 80 лет
СМИ: до покупки студии компанией Sony Bungie работала над пятью новыми играми
Вышел трейлер LEGO-спецвыпуска «One Piece. Большой куш», в котором Усопп перепишет историю
Премьера сериала «Фонари» стала самой успешной среди проектов DC Studios на HBO Max
Prime 1 Studio открыла предзаказы на статую по фильму «Годзилла против Кинга Гидоры»
Netflix представил свежий постер новой адаптации One Piece от WIT Studio
Хакеры начали распространять опасные файлы под видом слитого ПК-билда GTA VI
Опубликован трейлер аниме «Бронированные воины Вотомов: Серая ведьма» от Мамору Осии