Задание №5
«Морской бой»

Описание задачи
Морской бой - классический вариант известной детской настольной игры. В игре два участника. Игроки по очереди называют координаты на неизвестной им карте соперника. Если у соперника по этим координатам имеется корабль (координаты заняты), то корабль или его часть «топится», а попавший получает право сделать ещё один ход.
Цель игры - первым поразить корабли противника.
Игровое поле — квадрат 10х10 у каждого игрока, на котором игрок размещает свои корабли
В состав эскадры каждого игрока входят:
  • 1 корабль — ряд из 4 клеток (четырёхпалубный)
  • 2 корабля — ряд из 3 клеток (трёхпалубный)
  • 3 корабля — ряд из 2 клеток (двухпалубный)
  • 4 корабля — ряд из 1 клетки (однопалубный)
При размещении корабли не могут касаться друг друга даже углами.
Составьте программу, позволяющую играть в морской бой. Программа должна допускать три режима игры:
  • Человек - Компьютер,
  • Человек - Человек,
  • Компьютер - Компьютер.
Функциональные требования:
  1. Программа должна быть реализована в консоли (графический или текстовый режим по выбору студента). Использование визуальных средств должно быть согласовано с преподавателем.
  2. Программа должна визуализировать игровое поле и происходящие на нем изменения (подбитые корабли противника, сделанные выстрелы, размещение своих кораблей, сделанные выстрелы противника).
  3. Программа должна реализовывать некоторый оптимальный алгоритм игры компьютера (выбор алгоритма необходимо обосновать). При этом, в каждой новой игре компьютер должен играть по-разному вне зависимости от расположения кораблей противника, то есть его ходы не должны быть предсказуемы.
  4. Когда в качестве одного из игроков выступает компьютер, программа должна анализировать предыдущие ходы и следующий делать на основе проведенного анализа.
  5. Программа должна позволять расставлять корабли на поле 10 * 10 клеток и контролировать правильность их расстановки.
  6. По ходу игры программа должна вести протокол игры, в который будут заноситься информационные сообщения о сделанных ходах противников.