← все кейсы · IT Battle

Викторина-дуэль для айтишников — в реальном времени.

IT Battle — мобильная игра, где специалисты выбирают свою IT-роль и сражаются один на один: кто быстрее и точнее ответит на вопросы по своей специальности. Матчмейкинг сводит двух игроков, таймер давит на обоих, счёт идёт вживую, очки уходят в рейтинг и поднимают в общем зачёте. Сделали приложение и весь бэкенд на Firebase — без отдельного сервера.

real-time дуэли стек · Flutter + Firebase релизная сборка v1.0.8

01 · Идея и задача

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

Задача: сделать полноценную многопользовательскую игру с входом и регистрацией, подбором соперника, синхронным боем на время, начислением очков, рейтингами по ролям, профилем, друзьями и приглашениями — и всё это без отдельного бэкенд-сервера, целиком на Firebase. Так проект дешевле в поддержке и масштабируется сам.

02 · Что было сложно

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

Главная инженерная задача — собрать ощущение живого матча «один на один» на одной только Firebase, без отдельного бэкенда: дешевле в поддержке, проще масштабировать.

03 · Как устроена игра

Роль и поиск соперника

Игрок выбирает свою IT-специальность — системный и бизнес-аналитик, разработчики (Android, iOS, Java, Python, frontend), QA-инженер, проджект-менеджер и другие. Дальше — «Играть»: можно искать случайного соперника или позвать друга по ссылке-приглашению. Пока идёт подбор, видно живой статус поиска.

Сам бой

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

Экран боя: вопрос по специальности с вариантами ответа и таймером
Раунд боя: вопрос по специальности, четыре варианта, таймер сверху — правильный ответ подсвечивается зелёным, неверный красным, у обоих игроков синхронно

Рейтинги и профиль

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

Лидерборд: топ игроков с баллами и место игрока
Рейтинг: топ игроков с баллами и место самого игрока в общем зачёте — отдельно ведётся статистика по каждой роли

Аккаунт и настройки

Вход по e-mail с подтверждением, выбор и смена ника с проверкой, загрузка аватара, звук и музыка, приглашения друзей по ссылке. В описании приложения — кратко о сути: интеллектуальная битва умов с рейтингами, турнирами и регулярным обновлением базы вопросов.

04 · Результат

Роли 11+IT-специализаций
Формат 1 : 1три раунда на время
Бэкенд Firebasereal-time без своего сервера
Платформы iOS + Androidодна Flutter-база

Получилась законченная многопользовательская игра: регистрация и вход, выбор роли, подбор соперника, синхронный бой на время, начисление очков, рейтинги по ролям, профиль со статистикой, друзья и приглашения. Релизная сборка версии 1.0.8 под iOS и Android собирается из общей Flutter-кодовой базы.

Ключевое решение — весь онлайн держится на Firebase: Cloud Firestore отвечает за матчи, очки и рейтинги в реальном времени, Auth — за вход, Storage — за аватары, Analytics — за поведение игроков. Нет отдельного сервера, который нужно администрировать и масштабировать вручную.

05 · Что дальше

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

Приложение собирается под iOS и Android из одной Flutter-кодовой базы; вся серверная часть — управляемые сервисы Firebase, поэтому обновления контента (вопросы, правила начисления) выкатываются без релиза в сторах, а новые экраны — обычным обновлением приложения.

Похожий проект

Нужна real-time игра или приложение на Firebase?

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