Задача 3. Морской бой.
Общие сведения.
Задача - реализовать стратегию игры в Морской бой.
В результате написания лаюораторной должен получиться "искусственный интеллект" для игры в морской бой, который умеет соревноваться с другим искусственным интеллектом через промежуточный сервер. Схема взаимодействия игроков следующая:
[Player1] <---> [Server] <---> [Player2]
Взаимодействие игрока с сервером осуществляется через стандартные потоки ввода и вывода.
Процесс игры.
Расстановка кораблей.
На первом шаге сервер посылает каждому из игроков сообщение
Arrange!
В ответ игрок должен отправить серверу свою расстановку кораблей в виде матрицы (таблицы) 10х10:
1101001111
0001000000
0001000001
0000000001
0100000000
0100001000
0100000000
0000000000
0001010010
1000000010
На карте должно быть расставлено 4 однопалубных, 3 двухпалубных, 2 трехпалубных и 1 четырехпалубный корабль. Сервер сохраняет полученную расстановку игроков.
Игровой процесс
Далее сервер посылает первому игроку команду:
Shoot!
Игрок в ответ отправляет координаты, в которые осуществляется выстрел в формате:
A 5
где первая буква - значение координаты X (A ... J), второе число - значение координаты Y (0 ... 9).
В ответ на ход игрока сервер посылает одно из трех сообщений:
Miss
в случае промаха,
Hit
когда корабль был ранен, и
Kill
если корабль был убит.
В случае Hit
или Kill
игрок должен отправить координаты следующего выстрела.
Пока игрок ожидает своего хода, сервер посылает ему информацию о действиях противника в формате:
Enemy shooted into G 4
Конец игры.
Когда один из игроков уничтожает все корабли противника, сервер посылает ему сообщение:
Win!
Другому игроку отправляется сообщение
Lose
После получения одного из этих сообщений программа должна корректно завершиться с кодом возврата 0.
Нефункциональные требования.
После получения сообщения от сервера, требующего от игрока какого-либо действия (расстановки кораблей, выстрела или завершения), игрок должен ответить (или завершиться) в течение одной секунды.
Дополнительная (сверх)задача.
Реализовать сервер с проверкой корректности игрового процесса.