Курсовая работа

Задание на курсовую работу

Часть 1. Разработка алгоритма игровой ситуации и протокола взаимодействия клиентской и серверной частей.

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

Все программы и функции должны корректно обрабатывать исключительные ситуации.

Часть 2. Разработка сетевой игры "крестики-нолики"

Доработайте программу-сервер следующим образом:

  1. Информация об играх хранится в разделяемой памяти.
  2. После подключения клиенту передаётся список зарегистрированных игр, с указанием в каких из них число участников меньше 2.
  3. От клиента ожидается либо согласие принять участие в одной из зарегистрированных игр, либо создать новую игру.
  4. Если клиент желает создать новую игру:
    1. Если это невозможно (количество игр достигло максимального значения), клиенту отсылается отказ, и соединение закрывается.
    2. Создаётся новая игра, в которой первым игроком является клиент.
    3. Клиенту отправляется согласие на создание игры и её номер.
  5. Если клиент желает принять участие в игре:
    1. Проверяется, можно ли в выбранной игре принять участие. Если нет, клиенту сообщается об ошибке, и соединение закрывается.
    2. В выбранной игре изменяется количество участников.
    3. Порождается новый процесс, который в дальнейшем контролирует игру (согласно ранее разработанным правилам и протоколу).
  6. По завершении игры (сигнал о завершении дочернего процесса) сервер очищает информацию об игре и увеличивает количество доступных игр.

Доработайте программу-клиент следующим образом:

  1. После подключения принимает от сервера перечень игр. Предлагает пользователю выбрать одну из них или создать новую.
  2. Получив подтверждение от сервера о начале игры, выводит на экран игровое поле.
  3. Создает две нити: одну для работы с экраном (игровым полем и области для диалога), вторую для контролирования сетевого взаимодействия.