Multithread maze server description (without UML)
Fix link in README file
This commit is contained in:
1 parent
4402bbfe3f
commit
8823945938
3 files changed
+17
-7
No files matched your search
@@ -12,7 +12,7 @@
|
|||||||
Клиент должен работать по разработанному сетевому протоколу.
|
Клиент должен работать по разработанному сетевому протоколу.
|
||||||
|
|
||||||
## Разработанное приложение
|
## Разработанное приложение
|
||||||
Реализация [сервера на основе многопоточности](doc/multiprocess_echo_server.md) и клиента эхо-приложения.
|
Реализация [сервера на основе многопоточности](doc/multithread_maze_server.md) и клиента эхо-приложения.
|
||||||
|
|
||||||
## Требования
|
## Требования
|
||||||
Для сборки и запуска необходима Unix-система и компилятор C++ с поддержкой стандарта c++23.
|
Для сборки и запуска необходима Unix-система и компилятор C++ с поддержкой стандарта c++23.
|
||||||
|
|||||||
@@ -6,10 +6,14 @@ UML-диаграмма протокола пользовательского у
|
|||||||

|

|
||||||
|
|
||||||
## Описание работы приложения
|
## Описание работы приложения
|
||||||
Сервер maze-server ожидает подключения клиентов по протоколу TCP на заданный порт (по умолчанию 1024).
|
Сервер `maze-server` ожидает подключения клиентов по протоколу TCP на заданный порт (по умолчанию 1024). После установления соединения сервер запрашивает имя игрока, а затем начинает игру в лабиринте. Лабиринт генерируется случайным образом при старте каждой новой игровой сессии. Гарантируется наличие хотя бы одного пути из начальной точки `(0, 0)` в конечную точку `(2, 2)`. Добавление дополнительных стен происходит с соблюдением условия достижимости цели.
|
||||||
После установки соединения сервер ожидает получения имени игрока от клиента и запускает игровую сессию.
|
|
||||||
Каждому игроку предоставляется ограниченное количество ходов для прохождения случайного лабиринта. Игрок может перемещаться в четырёх направлениях: вперёд, назад, направо, налево. Сервер проверяет возможность перемещения и сообщает игроку о результате действия.
|
Cхема и нумерация клеток лабиринта представлена на рисунке ниже.
|
||||||
Игрок побеждает, если достигает конечной позиции (нода 8) за отведённое число шагов. В противном случае он проигрывает.
|
|
||||||
|

|
||||||
|
|
||||||
|
Клиент отправляет команды движения ("вперёд", "направо", "налево", "назад") или команду "сдаюсь" для завершения игры. Сервер обрабатывает команды, проверяет возможность хода, обновляет состояние лабиринта и отправляет клиенту текстовый ответ с результатом хода, количеством оставшихся ходов и текущей позицией (в формате координат). Игра завершается, если игрок достигает конечной точки (позиция 8), исчерпывает ходы или сдаётся.
|
||||||
|
|
||||||
|
|
||||||
### Запуск сервера
|
### Запуск сервера
|
||||||
Приложение сервера при запуске принимает следующие необязательные ключи:
|
Приложение сервера при запуске принимает следующие необязательные ключи:
|
||||||
@@ -37,8 +41,10 @@ UML-диаграмма протокола пользовательского у
|
|||||||
Если игрок исчерпал все ходы, но не дошёл до финиша, он считается проигравшим. Финиш находится в позиции (2, 2) (координаты x, y).
|
Если игрок исчерпал все ходы, но не дошёл до финиша, он считается проигравшим. Финиш находится в позиции (2, 2) (координаты x, y).
|
||||||
|
|
||||||
### Запуск клиента
|
### Запуск клиента
|
||||||
Приложение клиента при запуске принимает три необязательных ключа `-h`, `-p` и `-n` с параметрами.
|
Приложение клиента при запуске принимает два необязательных ключа:
|
||||||
Ключи `-h` и `-p` задают сетевой адрес (название хоста и номер порта соответственно) сервера для подключения.
|
- `-h` — задаёт имя хоста сервера для подключения;
|
||||||
|
|
||||||
|
- `-p` — задаёт номер порта сервера.
|
||||||
```bash
|
```bash
|
||||||
./maze_client -h localhost -p 1024
|
./maze_client -h localhost -p 1024
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Do not edit this file with editors other than draw.io -->
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="background: #ffffff; background-color: #ffffff; color-scheme: light;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="181px" height="141px" viewBox="-0.5 -0.5 181 141" content="<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Linux x86_64; rv:137.0) Gecko/20100101 Firefox/137.0" version="26.2.14" scale="1" border="0">
 <diagram name="Page-1" id="4dH0ZVNng5iTURC5q5_l">
 <mxGraphModel dx="946" dy="646" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
 <root>
 <mxCell id="0" />
 <mxCell id="1" parent="0" />
 <mxCell id="PpjUVarXfEZTr97tMgvP-1" value="" style="childLayout=tableLayout;recursiveResize=0;shadow=0;fillColor=none;" vertex="1" parent="1">
 <mxGeometry x="340" y="270" width="180" height="140" as="geometry" />
 </mxCell>
 <mxCell id="PpjUVarXfEZTr97tMgvP-2" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;top=0;left=0;bottom=0;right=0;dropTarget=0;collapsible=0;recursiveResize=0;expand=0;fontStyle=0;fillColor=none;strokeColor=inherit;" vertex="1" parent="PpjUVarXfEZTr97tMgvP-1">
 <mxGeometry width="180" height="47" as="geometry" />
 </mxCell>
 <mxCell id="PpjUVarXfEZTr97tMgvP-3" value="6" style="connectable=0;recursiveResize=0;strokeColor=inherit;fillColor=none;align=center;whiteSpace=wrap;html=1;" vertex="1" parent="PpjUVarXfEZTr97tMgvP-2">
 <mxGeometry width="60" height="47" as="geometry">
 <mxRectangle width="60" height="47" as="alternateBounds" />
 </mxGeometry>
 </mxCell>
 <mxCell id="PpjUVarXfEZTr97tMgvP-4" value="7" style="connectable=0;recursiveResize=0;strokeColor=inherit;fillColor=none;align=center;whiteSpace=wrap;html=1;" vertex="1" parent="PpjUVarXfEZTr97tMgvP-2">
 <mxGeometry x="60" width="60" height="47" as="geometry">
 <mxRectangle width="60" height="47" as="alternateBounds" />
 </mxGeometry>
 </mxCell>
 <mxCell id="PpjUVarXfEZTr97tMgvP-5" value="8" style="connectable=0;recursiveResize=0;strokeColor=inherit;fillColor=none;align=center;whiteSpace=wrap;html=1;" vertex="1" parent="PpjUVarXfEZTr97tMgvP-2">
 <mxGeometry x="120" width="60" height="47" as="geometry">
 <mxRectangle width="60" height="47" as="alternateBounds" />
 </mxGeometry>
 </mxCell>
 <mxCell id="PpjUVarXfEZTr97tMgvP-6" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;top=0;left=0;bottom=0;right=0;dropTarget=0;collapsible=0;recursiveResize=0;expand=0;fontStyle=0;fillColor=none;strokeColor=inherit;" vertex="1" parent="PpjUVarXfEZTr97tMgvP-1">
 <mxGeometry y="47" width="180" height="46" as="geometry" />
 </mxCell>
 <mxCell id="PpjUVarXfEZTr97tMgvP-7" value="3" style="connectable=0;recursiveResize=0;strokeColor=inherit;fillColor=none;align=center;whiteSpace=wrap;html=1;" vertex="1" parent="PpjUVarXfEZTr97tMgvP-6">
 <mxGeometry width="60" height="46" as="geometry">
 <mxRectangle width="60" height="46" as="alternateBounds" />
 </mxGeometry>
 </mxCell>
 <mxCell id="PpjUVarXfEZTr97tMgvP-8" value="4" style="connectable=0;recursiveResize=0;strokeColor=inherit;fillColor=none;align=center;whiteSpace=wrap;html=1;" vertex="1" parent="PpjUVarXfEZTr97tMgvP-6">
 <mxGeometry x="60" width="60" height="46" as="geometry">
 Line truncated
|
||||||
|
After Width: | Height: | Size: 29 KiB |
Reference in new issue
Block a user