/JigsawMP

Primary LanguageJavaMIT LicenseMIT

Jigsaw Multiplayer with DB

Автор

Романцов Николай Сергеевич

Об игре

Игра представляет собой многопользовательскую реализацию игры Jigsaw. Пользователи могут играть как поодиночке, так и в парах, выигрывая или проигрывая. Дополнительно реализован список из 10 лучший игр, который хранится на Derby-сервере.

Игровой процесс

Игрок размещает предложенные ему фигуры на поле, если это возможно. Результатом игры является количество сделанных ходов. Кроме того, вы можете оценить свой прогресс не только по количеству ходов, но и по времени игры. Чтобы сообщить о том, что вы закончили, следует нажать на кнопку завершения игры.

Определение победителя

При определении победителя оценивается в первую очередь количество сделанных ходов. При их равенстве оценивается время игры(кто первый нажал кнопку "Завершить"). При равенстве этих параметров объявляется ничья.

Запуск из Intellij idea

Сервер

Перед запуском игрового сервера требуется запустить Derby-сервер. Для этого выполните startNetworkServer.

Точкой входа сервера является метод main в классе ServerApplication.

Клиент

Точкой входа клиента является метод main в классе ClientApplication.

Для тестирования многопользовательского режима требуется установить в настройках запуска Allow multiply instances.

Структура проекта

  • client - package реализующий клиентскую часть программы
    • Client - класс-синглетон, реализующий высокоуровневую логику взаимодействия с сервером
    • ClientApplication - окно с регистрацией пользователя
    • ClientController - класс, управляющий формой регистрации пользователя
    • ClientEntry - точка входа для клиентской части. Открывает окно с регистрацией
    • GameController - класс, управляющий пользовательским интерфейсом игры на машине пользователя
    • RatingController - класс для управления пользовательским интерфейсом окна со списком лучший игр
    • ServerHandler - класс, реализующий непосредственное общение с сервером
    • Timer - класс для подсчета оставшегося времени на игру
  • model - package, реализующий логику самой игры
  • server - package, реализующий клиентскую часть программы
    • ClientHandler - класс, реализующий непосредственную обработку сообщений от клиента
    • Controller - класс, управляющий окном управления сервера
    • Server - класс ответственный за высокоуровневую логику сервера
    • ServerApplication - окно управления сервером
    • ServerEntry - точка входа серверной части. Открывает окно управления сервером
    • ServerRegistrar - класс, что регистрирует игроков, прибывших на сервер
  • GameResult - класс для передачи и хранения результатов о завершенной игре
  • Message - класс представляющий собой сообщение, которым обмениваются клиент и сервер
  • MessageType - enum для типов сообщений
  • PlayerStatus - enum для статуса клиента (в игре/ожидает/готов)
  • ResultType - enum для победы/поражения/ничьей

Последовательность работы

  1. Запуск окна сервера. Выполнение настроек.
  2. Сервер запускается на определенном порту. С этого момента клиенты могут подключиться к игре
  3. Запуск окна регистрации клиента.
  4. Клиент вводит свое имя, адрес и порт сервера и, если это возможно, подключается к игре
  5. При подключении закрывается окно регистрации и открывается окно самой игры
  6. Ожидание второго игрока(п.3-п.5) или начало игры
  7. Отключение игроков закрытием игрового окна или по причине остановки сервера

Ограничения

Сервер может одновременно работать с двумя игроками, если включен многопользовательский режим, и с одним игроком, если включен одиночный режим.

Принцип формирования рейтинга

Результаты всех сыгранных матчей сортируются в первую очередь по количеству сделанных ходов, затем по продолжительности матча, а при прочих равных - по дате конца игры.