- backend — express + socket.io сервер, создает сеанс игры из игроков в очереди как только есть пара
- common — базовая игровая логика, переиспользуется фронтом и бэком
- frontend — фронт на React (JS) и SCSS.
Проект задеплоен на https://seabattle.react-learning.ru/, на фронте можно включить режим игры с ботом через команду в DevTools:
localStorage.setItem('__api', 'bot');
-
клиент > сервер = new-game ({name, board}) — регаем игрока с готовой доской и именем, он ждет игру
-
сервер > клиент = start-game ({id, name}) — нашли противника, сообщаем обоим сторонам id игры и имена противников
-
сервер > клиент = get-step({ act: false, timeout }) — сообщаем одной из сторон что нужно сделать первый ход. В таймаут время на ход.
-
клиент > сервер = set-step({ x, y }) — игрок у которого ход сообщил координаты выстрела (второй не может прислать такое сообщение)
4.1. сервер > клиент = get-step({ act: true, x, y, result, timeout }) — отвечаем тому кто сделал ход о результате, x,y его хода, result состояние клетки противника после хода. В таймаут время на ход противника
4.3 клиент = get-step({ act: false, timeout }) — сообщаем противнику о необходимости сделать ход и время на него.
-
сервер > клиент = end-game({ win }) — победителю отправляем win = true, а проигравшему win = false. И отключаем игроков от очереди.
====== Каждый ход проверяем условия достижения победы, если у одного кораблей не осталось, то №5.
После того как сообщили о необходимости сделать ход ставим таймер на 30сек, если не успел сделать ход, то он проиграл и делаем №5.
Backend
- Прямая игра с друзьями\случайный игрок — подумать над реализацией.
- Если долго не находит игру со случайным игроком, то предлагаем с ботом или другом.
- Переключение бот\сервер: стрелять ближе к раненому кораблю, а если нет в случайную пустую
- Чат + отключение в настройках, чтобы второй игрок видел что чат закрыт
- Количество игроков онлайн
Frontend 6. Автопометка клеток вокруг убитого корабля 7. Темная тема + кастомная тема (css переменные) 8. Поддержка мобильных устройств: добавить кнопку разворота на мобильном 9. Настройка игры: размер поля, состав кораблей, оформление, чат, режим по-умолчанию: ограничиваем игрой с другой, генерим ссылку инвайт 10. История сыгранных игр
Под вопросом 11. Авторасстановки 12. Звук выстрела и попадания?
- Кластеризация под сервер (Максим)
- Board все функции работы с доской, включая расчет оверлея.
- Правила игры в Game + тесты, тут функции для регистрации игроков, совершения хода, проверки условия победы.
- Игровой процесс разделить на Client и Server. Бот это фактически сервер запущенный в браузере.