Задание на курсовую работу
Часть 1. Разработка алгоритма игровой ситуации и протокола взаимодействия клиентской и серверной частей.
- Опишите правила игры и алгоритм проведения игровой ситуации "крестики-нолики" (3x3).
- Разработайте протокол взаимодействия клиентской и серверной частей приложения при: создании новой игры, подключении игроков к ранее созданной игре, проведении игровой ситуации и завершении её. Заложите возможность диалога игроков в режиме чата (через контролирующий сервер).
- Определите тип протокола, который будет использоваться для взаимодействия клиентов и сервера (TCP или UDP).
- С использованием библиотек MyTerm и BigChars разработайте набор функций:
- printBoard (struct board), выводящую на экран рабочее поле игры. Каждая ячейка поля представляется "большим" символом, само поле обведено в рамку. Рисунки символов "крестик" и "нолик" хранятся в одном файле (два больших символа, один - крестик, другой - нолик).
- setBoardPos (struct board, int, int, enum tPosSign), устанавливающую в указанную позицию поля крестик или нолик
- getBoardPos (struct board, int, int, enum tPosSign *), возвращает значение указанной позиции поля игры (крестик или нолик).
- editBoard (struct board *, int *, int *), реализующую редактирование поля (в свободное место устанавливается крестик (F5) или нолик (F6), на занятое место установить ничего нельзя) и возвращающую позицию установленного символа.
- Реализуйте простейшую программу-сервер.
- При запуске анализируются параметры командной строки, в которых указывается
- количество одновременно поддерживаемых игр (опция --count-games | -g). По умолчанию возможно проведение только одной игры.
- номер порта, который будет использоваться сервером для ожидания начальных запросов от клиентов. По умолчанию используется порт 7777.
- Сервер открывает сокет, "привязывает" его к соответствующему интерфейсу и порту и "слушает" его.
- При подключении клиента передаем ему строку "HELLO <IP>", в которой вместо IP указывается адрес только что подключившегося клиента.
- В течение 60 секунд ожидается подключение ещё одного клиента. Если клиент подключился, то ему отправляется строка "HELLO. YOU ARE NUMBER TWO. THE FIRST CLIENT IS <IP>", в которой вместо IP отправляется адрес первого подключившегося клиента. Первому клиенту в этом случае отправляется строка вида "CLIENT NUMBER TWO IS <IP>", в которой вместо IP указывается адрес второго подключившегося клиента.
- Порт закрывается, и сервер завершает свою работу.
- При запуске анализируются параметры командной строки, в которых указывается
- Клиент
- При запуске анализирует параметры командной строки, в которых указывается:
- адрес игрового сервера (опция --game-server | -s). По умолчанию используется адрес 127.0.0.1;
- порт, на котором сервер ожидает сообщений от клиентов (опция --game-server-port | -p). По умолчанию используется порт 7777.
- Клиент подключается к указанному серверу и порту.
- Ожидает от сервера строку (в течение 60 секунд).
- Если сервер присылает строку вида "HELLO <IP>", то ожидается (в течение 60 секунд) ещё одна строка вида "CLIENT NUMBER TWO IS <IP>".
- На экран выводится адрес второго игрока.
- Сокет закрывается, и работа клиента завершается.
- При запуске анализирует параметры командной строки, в которых указывается:
Все программы и функции должны корректно обрабатывать исключительные ситуации.
Часть 2. Разработка сетевой игры "крестики-нолики"
Доработайте программу-сервер следующим образом:
- Информация об играх хранится в разделяемой памяти.
- После подключения клиенту передаётся список зарегистрированных игр, с указанием в каких из них число участников меньше 2.
- От клиента ожидается либо согласие принять участие в одной из зарегистрированных игр, либо создать новую игру.
- Если клиент желает создать новую игру:
- Если это невозможно (количество игр достигло максимального значения), клиенту отсылается отказ, и соединение закрывается.
- Создаётся новая игра, в которой первым игроком является клиент.
- Клиенту отправляется согласие на создание игры и её номер.
- Если клиент желает принять участие в игре:
- Проверяется, можно ли в выбранной игре принять участие. Если нет, клиенту сообщается об ошибке, и соединение закрывается.
- В выбранной игре изменяется количество участников.
- Порождается новый процесс, который в дальнейшем контролирует игру (согласно ранее разработанным правилам и протоколу).
- По завершении игры (сигнал о завершении дочернего процесса) сервер очищает информацию об игре и увеличивает количество доступных игр.
Доработайте программу-клиент следующим образом:
- После подключения принимает от сервера перечень игр. Предлагает пользователю выбрать одну из них или создать новую.
- Получив подтверждение от сервера о начале игры, выводит на экран игровое поле.
- Создает две нити: одну для работы с экраном (игровым полем и области для диалога), вторую для контролирования сетевого взаимодействия.