01 · Идея и задача
Идея простая и азартная: проверить себя в своей же области против живого соперника. Не одиночный тест «на диване», а дуэль — выбираешь роль (системный аналитик, backend-разработчик, QA, frontend и так далее), система находит тебе оппонента по этой же специальности, и вы наперегонки отвечаете на вопросы. Кто набрал больше за три раунда — забирает очки и место в рейтинге.
Задача: сделать полноценную многопользовательскую игру с входом и регистрацией, подбором соперника, синхронным боем на время, начислением очков, рейтингами по ролям, профилем, друзьями и приглашениями — и всё это без отдельного бэкенд-сервера, целиком на Firebase. Так проект дешевле в поддержке и масштабируется сам.




02 · Что было сложно
- Синхронный бой двух игроков без своего сервера. Два телефона должны видеть один и тот же матч: тот же вопрос, тот же таймер, тот же счёт — и реагировать на ход соперника мгновенно. Всё построено на подписках Cloud Firestore: сессия боя — это документ, оба клиента слушают его изменения и обновляют экран вживую. Сервер для этого поднимать не пришлось.
- Матчмейкинг по роли. Игрока нужно свести с соперником той же специальности и примерно того же уровня, а если подходящего нет сейчас — корректно держать в очереди и показывать «Поиск соперника…», не вешая приложение. Подбор и создание игровой сессии — отдельная логика поверх Firestore.
- Честный счёт и анти-чит на время. Очки начисляются по правильности и скорости, а правила скоринга вынесены в настройки, чтобы их менять без пересборки приложения. Важно было, чтобы результат раунда нельзя было «дорисовать» на клиенте — состояние боя ведётся в общей сессии, а не в памяти одного телефона.
- Рейтинги по ролям, а не один общий. У игрока свой счёт и статистика в каждой роли (выигрыши, очки, история матчей), плюс общий лидерборд. Это аккуратная структура данных в профиле пользователя, которая обновляется после каждого боя.
- Регистрация, ники и модерация. Вход по e-mail с подтверждением и входом по коду, смена ника в реальном времени, валидация ника и фильтр запрещённых слов — чтобы в публичном рейтинге и приглашениях не появлялось лишнего. Аватары игрок загружает сам — с кэшированием и приведением пропорций.
Главная инженерная задача — собрать ощущение живого матча «один на один» на одной только Firebase, без отдельного бэкенда: дешевле в поддержке, проще масштабировать.
03 · Как устроена игра
Роль и поиск соперника
Игрок выбирает свою IT-специальность — системный и бизнес-аналитик, разработчики (Android, iOS, Java, Python, frontend), QA-инженер, проджект-менеджер и другие. Дальше — «Играть»: можно искать случайного соперника или позвать друга по ссылке-приглашению. Пока идёт подбор, видно живой статус поиска.


Сам бой
Два игрока, три раунда, общий таймер. На экране боя — оба аватара, текущий счёт и индикатор раундов. Появляется вопрос по выбранной специальности с вариантами ответа; кто ответил быстрее и правильнее — тот ведёт. Правильный и неправильный ответ подсвечиваются сразу, состояние матча синхронно у обоих.


Рейтинги и профиль
После боя очки уходят в зачёт. Лидерборд показывает топ игроков с баллами, профиль — личную статистику матчей (победы и поражения с конкретными соперниками) и рейтинг по роли. Здесь же — друзья, отправленные и входящие приглашения, история игр.
Аккаунт и настройки
Вход по e-mail с подтверждением, выбор и смена ника с проверкой, загрузка аватара, звук и музыка, приглашения друзей по ссылке. В описании приложения — кратко о сути: интеллектуальная битва умов с рейтингами, турнирами и регулярным обновлением базы вопросов.


04 · Результат
Получилась законченная многопользовательская игра: регистрация и вход, выбор роли, подбор соперника, синхронный бой на время, начисление очков, рейтинги по ролям, профиль со статистикой, друзья и приглашения. Релизная сборка версии 1.0.8 под iOS и Android собирается из общей Flutter-кодовой базы.
Ключевое решение — весь онлайн держится на Firebase: Cloud Firestore отвечает за матчи, очки и рейтинги в реальном времени, Auth — за вход, Storage — за аватары, Analytics — за поведение игроков. Нет отдельного сервера, который нужно администрировать и масштабировать вручную.
05 · Что дальше
Игра развивается: пополнение базы вопросов по ролям и уровням, турниры и соревнования между игроками, история матчей и чат, тонкая настройка скоринга через серверные настройки без пересборки. Структура данных в Firestore позволяет добавлять роли, режимы и правила, не переписывая ядро.
Приложение собирается под iOS и Android из одной Flutter-кодовой базы; вся серверная часть — управляемые сервисы Firebase, поэтому обновления контента (вопросы, правила начисления) выкатываются без релиза в сторах, а новые экраны — обычным обновлением приложения.