Skip to content

amfenix/seabattle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Структура проекта

  1. backend — express + socket.io сервер, создает сеанс игры из игроков в очереди как только есть пара
  2. common — базовая игровая логика, переиспользуется фронтом и бэком
  3. frontend — фронт на React (JS) и SCSS.

Проект задеплоен на https://seabattle.react-learning.ru/, на фронте можно включить режим игры с ботом через команду в DevTools:

localStorage.setItem('__api', 'bot');

Основной флоу

  1. клиент > сервер = new-game ({name, board}) — регаем игрока с готовой доской и именем, он ждет игру

  2. сервер > клиент = start-game ({id, name}) — нашли противника, сообщаем обоим сторонам id игры и имена противников

  3. сервер > клиент = get-step({ act: false, timeout }) — сообщаем одной из сторон что нужно сделать первый ход. В таймаут время на ход.

  4. клиент > сервер = set-step({ x, y }) — игрок у которого ход сообщил координаты выстрела (второй не может прислать такое сообщение)

    4.1. сервер > клиент = get-step({ act: true, x, y, result, timeout }) — отвечаем тому кто сделал ход о результате, x,y его хода, result состояние клетки противника после хода. В таймаут время на ход противника

    4.3 клиент = get-step({ act: false, timeout }) — сообщаем противнику о необходимости сделать ход и время на него.

  5. сервер > клиент = end-game({ win }) — победителю отправляем win = true, а проигравшему win = false. И отключаем игроков от очереди.

====== Каждый ход проверяем условия достижения победы, если у одного кораблей не осталось, то №5.

После того как сообщили о необходимости сделать ход ставим таймер на 30сек, если не успел сделать ход, то он проиграл и делаем №5.

Фичлист (что хочется добавить)

Backend

  1. Прямая игра с друзьями\случайный игрок — подумать над реализацией.
  2. Если долго не находит игру со случайным игроком, то предлагаем с ботом или другом.
  3. Переключение бот\сервер: стрелять ближе к раненому кораблю, а если нет в случайную пустую
  4. Чат + отключение в настройках, чтобы второй игрок видел что чат закрыт
  5. Количество игроков онлайн

Frontend 6. Автопометка клеток вокруг убитого корабля 7. Темная тема + кастомная тема (css переменные) 8. Поддержка мобильных устройств: добавить кнопку разворота на мобильном 9. Настройка игры: размер поля, состав кораблей, оформление, чат, режим по-умолчанию: ограничиваем игрой с другой, генерим ссылку инвайт 10. История сыгранных игр

Под вопросом 11. Авторасстановки 12. Звук выстрела и попадания?

Рефакторинг

  1. Кластеризация под сервер (Максим)
  2. Board все функции работы с доской, включая расчет оверлея.
  3. Правила игры в Game + тесты, тут функции для регистрации игроков, совершения хода, проверки условия победы.
  4. Игровой процесс разделить на Client и Server. Бот это фактически сервер запущенный в браузере.

Вопросы

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •