Skip to content

notakeith/cpp-sea-battle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Задачей было спроектировать и реализовать консольное приложение-бот для игры в морской бой с интерфейсом взаимодействия через стандартные потоки ввода\вывода

Правила

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

Для игры нужны два игрока: master и slave. Master дополнительно устанавливает параметры игры: размер поля и количество кораблей, и сообщает их slave. Далее, оба игрока расставляют свои корабли согласно этим параметрам, и, после начала игры, поочерёдно стреляют друг в друга, по правилам классического морского боя

Команды

В приведённой далее таблице указаны команды, их параметры и варианты ответа. Ответ всегда заканчивается символом конца строки. Все команды и ответы печатаются в нижнем регистре.

Команда Ответ Описание
ping pong тестовая команда
exit ok программа завершается
create [master,slave] ok создать игру в режиме master или slave соответственно
start ok старт игры
stop ok остановка текущей партии
set width N ok/failed установить ширину поля (N положительное, влезает в uint64_t)
get width N получить длину поля (N положительное, влезает в uint64_t)
set height N ok/failed установить высоту поля (N положительное, влезает в uint64_t)
get height N получить высоту поля (N положительное, влезает в uint64_t)
set count [1,2,3,4] N ok/failed установить количество кораблей определенного типа (N положительное, влезает в uint64_t)
get count [1,2,3,4] N получить количество кораблей определенного типа (N положительное, влезает в uint64_t)
set strategy [ordered,custom] ok выбрать стратегию для игры
shot X Y miss/hit/kill выстрел по вашим короаблям в координатах (X,Y) (X,Y положительные, влезают в uint64_t)
shot X Y вернуть координаты вашего следующего выстрела, в ответе два числа через пробел (X,Y положительные, влезают в uint64_t)
set result [miss,hit,kill] ok установить результат последнего выстрела программы
finished yes/no окончена ли текущая партия
win yes/no являетесь ли вы победителем
lose yes/no являетесь ли вы проигравшим
dump PATH ok сохранить размер поля и вашу текущую расстановку кораблей в файл
load PATH ok загрузить размер поля и расстановку кораблей из файла

Требования

  • При генерации игры размер карты и количество кораблей должны быть непротиворечивы (размер поля не может быть нулевым, все корабли можно разместить на поле)
  • Координаты (0,0) - левый верхний угол
  • В игре всегда один игрок master, другой - slave
  • Игра не может начаться пока не будут заданы размеры поля и количество кораблей (количество кораблей хотя бы одного типа должно быть больше 0)
  • После старта игры размеры поля и количество кораблей не может быть изменено
  • Тип стратегии может быть изменен в процессе игры
  • Ответы команд win\finished\lose должны быть не противоречивы (например нельзя выиграть или проиграть, если игра не закончена)
  • После выстрела программа должна узнать результат строго до своего следующего выстрела (после каждой команды get shot следует передавать команду set result)
  • Команда load может быть вызвана до старта игры, тогда она переопределяет правила сгенерированные create (может быть использована для тестов)

About

Console Sea Battle game written in C++

Topics

Resources

License

Stars

Watchers

Forks