Задача 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.

Нефункциональные требования.

После получения сообщения от сервера, требующего от игрока какого-либо действия (расстановки кораблей, выстрела или завершения), игрок должен ответить (или завершиться) в течение одной секунды.

Дополнительная (сверх)задача.

Реализовать сервер с проверкой корректности игрового процесса.