Крестики-Нолики онлайн!
Данный код разработан для игры в Крестики-Нолики онлайн. В разработке использовались TCP-сокеты под операционную систему Windows. Могут играть только 2 человека одновременно.
За клиента отвечают файлы client.cpp
и client.h
В данном файле хранятся библиотеки, которые используются в приложении и глобальные переменные: время на ход, порт, состояние текущего хода, состояние хода определенного игрока, переменная, для открытия файла с логами клиента и игровое поле.
В данном файле реализованы следующие функции:
void logWriter(std::string buffer)
- функция записи действий в лог файл. На вход подается сообщение с действием.void getTimeForMove()
- функция считывания значения времени на ход с кофигурационного файла.void getPort()
- функция считывания значения порта с кофигурационного файла.bool authorize()
- функция авторизации клиента. Если введены правильный логин и пароль, то возвращаетtrue
, иначеfalse
.void fillGameMap(const char* buffer)
- функция заполнения игрового поля по буферу, полученному с сервера. На вход подается буфер.void printGameMap()
- функция печати игрового поля в консоль.void recieveMessages(int socket)
- функция обработки сообщений с сервера. На вход подается значение сокета соответствующего клиента.void sendMove(int socket)
- функция отправки хода пользователя, который он ввел в консоль. На вход подается значение сокета, присвоенного этому клиенту.void printHelloMessage()
- функция печати приветственного сообщения.bool startGame()
- функция начала игры. Пользователь решает, хочет ли он сыграть в Крестики-Нолики. Если да, то функция вернетtrue
, иначе функция вернетfalse
.void WaitOtherPlayer()
- функция ожидания второго игрока.void getMove(int socket)
- функция определения текущего статуса хода игрока - Крестик или Нолик. На вход подается значение сокета, присвоенного этому клиенту.int connect2Server()
- функция подключения клиента к серверу. Возвращает значение сокета, присвоенного этому клиенту.int main()
- основная функция.
В данном файле хранятся библиотеки, которые используются в приложении и глобальные переменные: вектор, хранящий клиентов онлайн, вектор, хранящий значения ходов клиентов, количество ходов, игровое поле и состояние текущего хода.
В данном файле реализованы следующие функции:
void logWriter(std::string buffer)
- функция записи действий в лог файл. На вход подается сообщение с действием.void clearMap()
- функция очистки игрового поля.int winner()
- функция определения победителя на каждом ходу. Возвращает1
, если победили Крестики,-1
, если победили Нолики,0
, если еще никто не победил.bool ticTacToe(int coord)
- функция заполнения игрового поля фигурой пользователя по соответствующей координате, которая подается на вход. Возвращаетfalse
, если пользователь пытается занять клетку, на которой уже стоит другая фигура, иначе возвращаетtrue
.bool checkNewClientsExists(std::string Nickname, std::string Password)
- функция проверки существования клиента в конфигурационном файле. На вход подается логин и пароль. Возвращаетtrue
, если находит клиента с таким же именем и паролем, иначе возвращаетfalse
.bool checkNewClientNotOld(std::string Nickname)
- функция проверки того, что клиент не пытается зайти под логином, который уже в сети. На вход подается логин. Возвращаетtrue
, если клиента с таким именем еще нет в сети, иначе возвращаетfalse
.void fillBuffer(char* buffer)
- функция заполнения буфера по элементам с игрового поля. На вход подается указатель на буфер.void clientHandler(int socket)
- функция обработки сообщений с клиента. На вход подается значения сокета соответствующего клиента.void clearLogClients()
- функция очистки логов клиента.void getPort()
- функция считывания значения порта с кофигурационного файла.int openServer()
- функция открытия сервера. Возвращает значение дескриптора сокета.bool firstMove()
- функция определения первого хода. Если вернетtrue
, то первым будет ходить клиент, который первый подключился, иначе - наоборот.void connectionClients(int socket, bool& gamer_l)
- функция подключения клиентов. На вход подается значение сокета соответствующего клиента и адрес переменной, содержащей информацию о состоянии хода текущего клиента.int main()
- основная функция
Приложение работает при запуске из Visual Studio. Сначала запускаем сервер, затем двух клиентов.
В проекте присутствует конфигурационный файл config.txt
. Там находится ip-адрес, порт, по которому мы слушаем, время для хода игрока, логины и пароли пользователей, имя конфигурационного файла. Если в конфиге пользователя последней строчкой указан логин и пароль, то пользователь авторизовывается автоматически.
Все действия клиента записываются в его лог-файл: log_clients.txt
Все действия на сервере также записываются в лог-файл: log_server.txt
Логи создаются автоматически!