4.9 KiB
4.9 KiB
План реализации игры "Alias" для Telegram WebApp
Технологический стек
- Backend: Java 17+, Spring Boot, Spring WebSocket (STOMP).
- Frontend: React, TypeScript, Vite, Tailwind CSS.
- Хранение данных: In-Memory (Java Collections).
- Интеграция: Telegram WebApp SDK.
Этап 1: Настройка Backend (Spring Boot)
-
1.1. Обновление зависимостей (
pom.xml)- Добавить
spring-boot-starter-websocket. - Добавить
lombok(для сокращения бойлерплейта).
- Добавить
-
1.2. Модели данных (Domain)
Player(sessionId, nickname, teamId).Team(name, score, players).Room(roomId, teams, gameState, currentSettings).GameState(LOBBY, PLAYING, PAUSED, FINISHED).
-
1.3. Сервисный слой (
GameService)- Логика создания комнаты (генерация 4-значного кода).
- Логика присоединения игрока.
- Управление состоянием игры (старт раунда, переключение хода).
- Обработка действий (слово угадано/пропущено).
-
1.4. WebSocket Конфигурация
- Настройка
WebSocketMessageBroker. - Эндпоинты:
/app/create,/app/join,/app/game-action. - Топики для подписки:
/topic/room/{roomId}.
- Настройка
-
1.5. Словари слов
- Создать JSON файлы с наборами слов (Easy, Medium, Hard).
- Реализовать загрузчик слов при старте приложения.
Этап 2: Настройка Frontend (React + Vite)
-
2.1. Инициализация проекта
- Создать папку
frontendвнутри корня. - Установить React + TypeScript через Vite.
- Настроить Proxy для разработки (чтобы запросы шли на Spring Boot порт 8080).
- Создать папку
-
2.2. UI Библиотеки и Стили
- Установить Tailwind CSS.
- Установить
framer-motionдля красивых анимаций карточек. - Установить
@twa-dev/sdkдля типизации Telegram WebApp. - Настроить тему, использующую
Telegram.WebApp.themeParams.
-
2.3. Клиент WebSocket
- Настроить
sockjs-clientи@stomp/stompjs. - Создать хук или контекст для управления соединением (
useWebSocket).
- Настроить
Этап 3: Реализация интерфейса и логики (Frontend)
-
3.1. Экран "Приветствие" (Home)
- Кнопка "Создать игру".
- Поле ввода кода комнаты + кнопка "Войти".
-
3.2. Экран "Лобби" (Lobby)
- Список подключенных игроков.
- UI для перетаскивания/выбора команды (Team A / Team B).
- Настройки хоста: Выбор набора слов, длительность раунда, кол-во очков для победы.
- Кнопка "Начать игру" (только для хоста).
-
3.3. Экран "Игра" (Game)
- Роль "Объясняющий":
- Карточка со словом по центру.
- Жесты (Swipe) или кнопки: Вверх/Вправо - Угадал, Вниз/Влево - Пропустил.
- Таймер обратного отсчета.
- Роль "Отгадывающий":
- Статус "Слушаем {PlayerName}".
- Таймер.
- Анимация при угадывании.
- Роль "Объясняющий":
-
3.4. Экран "Результаты раунда"
- Список слов, которые были сыграны в раунде (возможность оспорить/изменить статус, если успеем).
- Текущий счет команд.
- Кнопка "Следующий раунд".
-
3.5. Экран "Победа"
- Поздравление победителей.
- Кнопка "В лобби".
Этап 4: Тестирование и Сборка
-
4.1. Сборка
- Настроить Maven плагин (
frontend-maven-plugin) для сборки React приложения и копирования его вsrc/main/resources/static. - Проверка сборки единого JAR файла.
- Настроить Maven плагин (
-
4.2. Тестирование
- Проверка работы через ngrok (для HTTPS) внутри Telegram.
- Проверка работы WebSocket при сворачивании приложения (reconnection logic).