G

GreenBox

Основа онлайн-игры на Spring Boot, WebSocket (STOMP) и Three.js с серверным игровым циклом и синхронизацией состояния игроков. Real-time multiplayer game core using Spring Boot, WebSocket (STOMP) and Three.js. Includes server game loop, combat system and player state sync.

GreenBox

GreenBox — основа онлайн-игры, построенной на WebSocket (STOMP), Three.js, Spring Boot/Security и PostgreSQL.

Общая логика работы

  • Команды от клиента отправляются на сервер через WebSocket (STOMP).
  • После контроллера команды попадают в специальные хранилища.
  • Хранилище команд реализовано через CommandPool<T>.
  • Из хранилища команды передаются в игровой цикл, который:
    • вызывает сервисы для обработки команд и расчёта игровой логики,
    • работает с игровыми хранилищами, сохраняет данные из игровых сущностей в сущности БД.
  • В процессе выполнения команд данные отправляются клиенту по личным WS-каналам.
  • Клиент обновляет состояние персонажа по мере получения данных и своего игрового цикла.
  • Также существуют информационные каналы:
    • лог PvP,
    • лог перезарядки оружия,
    • уведомления о превышении допустимой дистанции для выстрела,
    • уведомления о превышении лимита команд на атаку.

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

  • config — настройки Security, WebSocket, простого логгера.
  • gameloop — игровой цикл сервера, работает с потоками. Сохраняет параметры игроков в БД (раз в n времени).
  • manager
    • combat — расчёт PvP,
    • environment — расчёт видимых позиций и объектов,
    • event — игровые события,
    • move — перемещение по игровому миру.
  • model — модели для БД, DTO, модели игрового цикла, мапперы.
  • pool — хранилища команд, игроков, оружия и т.д. CommandPoolInitBeen описывает бины хранилищ.
  • world — контроллер запуска игры, инициализация игроков.

Серверная игровая логика

  • Сервер знает положение игрока и после получения конечной точки от клиента рассчитывает движение, передавая каждый шаг обратно.
  • Команды перемещения не накапливаются: движение выполняется только к одной конечной точке (при необходимости можно расширить до серии команд: точка A → B → C и т.д.). Скорость перемещения зависит от показателя скорости игрока.
  • Игроки могут атаковать друг друга. При клике на противника отправляется команда на сервер.
  • Подряд могут быть выполнены только 4 атаки, после чего требуется время на перезарядку оружия.
  • Ход боя отображается в логе PvP, доступном по нажатию на иконку мечей.

Демонстрация игры

Запуск

  • Запустить через Maven (spring-boot:run).
  • Перейти на http://localhost:8080/login.
  • Ввести user1:1234.
  • Инициализация игроков находится в пакете world, класс PlayerInitializer.

GreenBox

GreenBox is the foundation of an online game built on WebSocket (STOMP), Three.js, Spring Boot/Security, and PostgreSQL.

Overall Logic of Operation

  • Commands from the client are sent to the server via WebSocket (STOMP).
  • After the controller, commands go to special repositories.
  • The command repository is implemented via CommandPool<T>.
  • From the repository, commands are passed to the game loop, which:
    • calls services to process commands and calculate game logic,
    • works with game repositories, saves data from game entities to DB entities.
  • During command execution, data is sent to the client via personal WS channels.
  • The client updates the character state as it receives data and its own game loop.
  • There are also information channels:
    • PvP log,
    • weapon reload log,
    • notifications about exceeding the allowable shooting distance,
    • notifications about exceeding the attack command limit.

Project Structure

  • config — Security, WebSocket, and simple logger settings.
  • gameloop — server game loop, works with threads. Saves player parameters to the DB (every n time).
  • manager
    • combat — PvP calculation,
    • environment — calculation of visible positions and objects,
    • event — game events,
    • move — movement in the game world.
  • model — models for DB, DTO, game loop models, mappers.
  • pool — command repositories, players, weapons, etc. CommandPoolInitBean describes repository beans.
  • world — game launch controller, player initialization.

Server Game Logic

  • The server knows the player's position and, after receiving the endpoint from the client, calculates the movement, passing each step back.
  • Movement commands do not accumulate: movement is performed only to one endpoint (if necessary, it can be extended to a series of commands: point A → B → C, etc.). Movement speed depends on the player's speed indicator.
  • Players can attack each other. Upon clicking on an opponent, a command is sent to the server.
  • Only 4 attacks can be performed in a row, after which time is required to reload the weapon.
  • The battle turn is displayed in the PvP log, available by clicking on the swords icon.

Game Demonstration

Launch

  • Run via Maven (spring-boot:run).
  • Go to http://localhost:8080/login.
  • Enter user1:1234.
  • Player initialization is in the world package, class PlayerInitializer.