Следующие команды собирают / пересобирают проект. Обе команды предполагают, что будут вызваны из корневой директории проекта
./scripts/build.sh [--test]
./scripts/rebuild.sh [--test]Скомпилированный исполняемый файл будет лежать в директории /bin
В обоих командах флаг --test позволяет собрать тесты.
При этом файл exe.out не будет собран
Запустить исполняемые файлы можно при помощи команд
./scripts/run.sh [OPTIONS]
./scripts/run_tests.shПервая запустит основной исполняемый файл, а вторая - тесты. Обе команды предполагают существование соответствующего исполняемого файла
Для команды ./scripts/run.sh есть опциональные флаги --interface, или же -i.
Флаг позволяет выбрать интерфейс, с которым запустится программа.
На данный момент поддерживается только один тип интерфейса,
который является значением по умолчанию.
Можно его явно указать, прописав после флага terminal
Также можно воспользоваться сборкой через docker
docker build .
docker run -i <image>Battlefield хранит локальную копию полей игроков.
Каждая ячейка поля игрока содержит одно из чисел:
- 0 - клетка пустая
- number - в этой клетке стоит еще живая ячейка корабля под номером number
- -number - в этой клетке стоит подбитая ячейка корабля под номером number
Каждая ячейка поля противника содержит одно из чисел:
- INF - пустая клетка, в которую еще не стреляли
- 0 - пустая клетка, по которой пытались попасть
- +/- number - аналогично полю игрока
Command - абстрактный класс, соответствует действиям игрока.
Его наследники взаимодействуют напрямую с Battlefield
Observable - наблюдаемый класс,
о каких-либо изменениях он уведомляет наблюдателя (Observer)
RemoteServer - наследник Observable.
Передает информацию о действиях игроков на сервер.
И принимает информацию от сервера, уведомляя наблюдателя
Interactor - наблюдатель за RemoteServer.
Все изменения копирует в локальную копию (Battlefield).
Кроме того, вызывает команды.
Если запрос корректен, отправляет изменения в RemoteServer
Adapter - интерфейс пользователя.
Его методы проверяют введенные данные на корректность, а потом отправляют запрос к Interactor.
От него наследуются конкретные реализации
Игрок может пользоваться только двумя методами - AddShip и FireAt.
Первый из них вызывается 10 раз в начале игры и больше вызываться не может.
Второй будет вызываться на каждом ходе игрока