# Морской бой
Давайте попробуем создайть простую игру, используя классы 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) и т.д.