# Морской бой Давайте попробуем создайть простую игру, используя классы ES6 и навыки декомпозиции . Для тех кто забыл правила их можно подсмотреть в [Википедии](https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D1%80%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%BE%D0%B9_(%D0%B8%D0%B3%D1%80%D0%B0)) ## Правила Игра должна работать следующим образом: - Режимы игры: ИИ vs ИИ, Игрок vs ИИ - Экран должен содержать два поля. Поля должны отображаться динамически в .js без использования canvas или images. - Корабли игроков должны располагаться на поле автоматически и случайным образом при каждом запуске игры. - ИИ должен иметь простую логику. Например, если на поле есть поврежденный корабль, ПК должен попытаться его добить. - Вам также нужно отображать историю для каждого шага ПК (ИИ) На странице также должны быть отображены параметры игры: - У пользователя должна быть возможность увидеть корабли противника, если это необходимо. - Пока идет игра, мы можем видеть пораженные ячейки, поврежденные/затонувшие корабли. - Пользователь может настроить скорость игры (скорость "хождения" ИИ) У каждого игрока есть след набор кораблей: - линкор /четырехпалубный /четырехтрубный (4 клетки) - 1 ед. - крейсер /трехпалубный /трехтрубный (3 клетки) - 2 ед. - эсминец /двухэтажный /двухтрубный(2 клетки) - 3 ед. - подводная лодка /однопалубная /однотрубная(1 клетка) - 4 ед. ## На какие шаги стоит разбить реализацию - Создать класс Ship который отвечает за рендер корабля и хранит его состоятие (к-во подбитых ячеек), утонул или нет - Создать класс Field который умеет рисовать сетку n*n, хранит и генерирует корабли, определяет показывать ли их на поле. **Hint**: * На этапе разработки класса Field важно будет убедиться что корабли появляются на нужных местах и не залезают друг на друга. - Создать класс Player который привязываетcя к полю и идентифицирует "ходит" ли реальный человек или ПК(ИИ). - Создать класс Game который следит чей ход, обрабатывает очередность ходов и определяет статус игры **Hints:** * В Game сначала убедиться что игра корректно отрабатывает для одного игрока. * Потом добавить второго и написать логику переключения. Можно играть с самим собой - Добавить логику для ИИ, запоминание пройденных ходов, попал\не попал в корабль, достреливание по направлению корабля при попадании, скорость хода (например через setTimeout) и т.д.