Общие требования

Разработайте простую многопользовательскую игру, в которой игроки загадывают числа и пытаются отгадать, чётное или нечётное число загадал противник.

Правила игры

В игре участвует M-игроков.

Игроки ходят друг за другом по очереди, по принципу round robin.

Во время своего хода игрок пытается угадать, чётное или нечётное число загадал предыдущий участник. Также он загадывает своё число для следующего игрока. За каждое угаданное число игрок получает 1 балл.

Каждый участник в течение игры делает K-ходов. Пусть K=10 и хранится в настройках Firebase Remote Config.

Игра заканчивается, когда каждый игрок сделал свои K-ходов, и у одного из участников больше очков, чем у других. Например: для двух игроков, если по истечение 20-ти ходов счёт равный, то игра продолжается до первого разгаданного числа.

Побеждает тот, кто угадал больше чисел.

Для простоты считайте, что первый игрок создаёт игру, называет своё имя и задаёт число участников. Последующие игроки присоединяются к нему, просто указывая своё имя. Как только все игроки вошли, начинается первый ход.

Технические требования

Клиент должен быть написан на React с использованием Framework7. Код на TypeScript.

Для хранения текущего состояния и предыдущих результатов игры воспользуйтесь бесплатным аккаунтом Firebase и базой данных Firestore. Важно использовать именно Firestore, а не Real Time DB.

Всю бизнес-логику для клиента реализуйте в redux-sagas.

Серверная часть должна быть реализована через Firebase cloud functions. Код на JavasScript с Flow или TypeScript, что предпочтительнее. Пусть будет всего одна функция-триггер, которая реагирует на запись данных в Firestore. Эта функция определяет, когда игра завершилась и кто победитель.

По команде npm run deploy происходит деплой статического клиента на Firebase hosting. Если открыть сайт, можно поиграть в игру. Решите вопрос с API-ключами для деплоя так, как вы бы сделали это на production сервисе. Для деплоя функций вам придется перейти на тариф Blaze, но это вам ничего не будет стоить, т/к вы точно не выйдете за лимиты бесплатного использования.

Требования к клиенту

У приложения должно быть как минимум три экрана.

  1. Создать игру На этом экране указываем ****количество игроков и имя первого участника. Кнопка «Создать».

  2. Присоединиться к игре Поле, чтобы написать имя нового участника и кнопка «Присоединиться».

  3. Игра

Компонент для угадывания чёт-нечет и ввод нового числа с кнопкой «Отправить».

Пока участник ждёт других игроков, экран блокируется с сообщением «Сейчас не ваш ход».

Компонент, который выводит имена игроков и их текущие очки. Текущие очки отображаем в реальном времени.

Когда игра закончилась, выводим сообщение, что игра закончена и имя победителя.

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