diff --git a/README.md b/README.md index ba91b9d..89fb5a5 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Клиент должен работать по разработанному сетевому протоколу. ## Разработанное приложение -Реализация [сервера на основе многопоточности](doc/multiprocess_echo_server.md) и клиента эхо-приложения. +Реализация [сервера на основе многопоточности](doc/multithread_maze_server.md) и клиента эхо-приложения. ## Требования Для сборки и запуска необходима Unix-система и компилятор C++ с поддержкой стандарта c++23. diff --git a/doc/multithread_maze_server.md b/doc/multithread_maze_server.md index 4548a34..6e3b221 100644 --- a/doc/multithread_maze_server.md +++ b/doc/multithread_maze_server.md @@ -6,10 +6,14 @@ UML-диаграмма протокола пользовательского у ![UML-диаграмма протокола пользовательского уровня](echo-protocol.svg) ## Описание работы приложения -Сервер maze-server ожидает подключения клиентов по протоколу TCP на заданный порт (по умолчанию 1024). -После установки соединения сервер ожидает получения имени игрока от клиента и запускает игровую сессию. -Каждому игроку предоставляется ограниченное количество ходов для прохождения случайного лабиринта. Игрок может перемещаться в четырёх направлениях: вперёд, назад, направо, налево. Сервер проверяет возможность перемещения и сообщает игроку о результате действия. -Игрок побеждает, если достигает конечной позиции (нода 8) за отведённое число шагов. В противном случае он проигрывает. +Сервер `maze-server` ожидает подключения клиентов по протоколу TCP на заданный порт (по умолчанию 1024). После установления соединения сервер запрашивает имя игрока, а затем начинает игру в лабиринте. Лабиринт генерируется случайным образом при старте каждой новой игровой сессии. Гарантируется наличие хотя бы одного пути из начальной точки `(0, 0)` в конечную точку `(2, 2)`. Добавление дополнительных стен происходит с соблюдением условия достижимости цели. + +Cхема и нумерация клеток лабиринта представлена на рисунке ниже. + +![Схема лабиринта](maze_numeration.svg) + +Клиент отправляет команды движения ("вперёд", "направо", "налево", "назад") или команду "сдаюсь" для завершения игры. Сервер обрабатывает команды, проверяет возможность хода, обновляет состояние лабиринта и отправляет клиенту текстовый ответ с результатом хода, количеством оставшихся ходов и текущей позицией (в формате координат). Игра завершается, если игрок достигает конечной точки (позиция 8), исчерпывает ходы или сдаётся. + ### Запуск сервера Приложение сервера при запуске принимает следующие необязательные ключи: @@ -37,8 +41,10 @@ UML-диаграмма протокола пользовательского у Если игрок исчерпал все ходы, но не дошёл до финиша, он считается проигравшим. Финиш находится в позиции (2, 2) (координаты x, y). ### Запуск клиента -Приложение клиента при запуске принимает три необязательных ключа `-h`, `-p`  и `-n` с параметрами. -Ключи `-h` и `-p` задают сетевой адрес (название хоста и номер порта соответственно) сервера для подключения. +Приложение клиента при запуске принимает два необязательных ключа: +- `-h` — задаёт имя хоста сервера для подключения; + +- `-p` — задаёт номер порта сервера. ```bash ./maze_client -h localhost -p 1024 ``` diff --git a/doc/numeration_maze.svg b/doc/numeration_maze.svg new file mode 100644 index 0000000..3a8c9b5 --- /dev/null +++ b/doc/numeration_maze.svg @@ -0,0 +1,4 @@ + + + +
6
7
8
3
4
5
0
1
2
\ No newline at end of file