Реализация расширяемой игровой механики для клиента ролевой игры
Краткое описание проекта: приложение представляет собой одновременно и сетевой клиент и сервер для ролевой игры в жанре фэнтези, наподобие серии игр Dungeons and Dragons. Сценарии игры заранее не регламентированы и возможность их реализации достаточно обширные. В ходе игры участники управляют отдельными персонажами, из которых создаются группы, которые взаимодействуют с окружающим миром, разрешают различные конфликты, участвуют в сражениях и получают награды. Приложение может выступать как в роли клиента игры, который подключается к ведущему игру серверу, так и непосредственно в роли сервера, к которому подключаются другие клиенты. Также существует возможность приобретения различных артефактов через платный магазин.
Целью проекта была разработка новой расширяемой системы игровой логики, которая позволяет автоматизировать сложные расчеты взаимодействия персонажей в игре. Была переработана система игровых взаимодействий персонажей, все статичные предустановленные конструкции заменены обобщенным настраиваемым поведением. Для создания скриптов используется JavaScript. Выполнение производится средствами Java Nashorn.
Технологии: Java, Spring, JavaFX, Swing, Jackson, Jetty, Log4j, HTML, XML, JSON, Nashorn API, JS, Git.
Скриншоты:
Особенности проекта:
- Legacy system. Приложение разрабатывалось на протяжении 10 лет, в большинстве случаев использовался старый код, множество библиотек было устаревшими.
- Необходимость обеспечения совместимости с более старыми версиями. Нужно было обеспечить обратную совместимость с предыдущими версиями сохраненных игр. Также старая и новая версии должны были быть взаимоувязаны с магазином, содержащим платный контент. Это создало ограничение на изменения в модели данных и игровых персонажей.
- Архитектура приложения. Сложная архитектура приложения, трудно допускающая какие-либо расширения. Архитектура приложения не допускала возможности разделения на логические слои, часто логика обработки осуществлялась непосредственно в пользовательском интерфейсе.
- AWT Swing и JavaFX элементы смешиваются в реализации пользовательского интерфейса. Это создавало значительные трудности при добавлении новых элементов.
- Обширные правила игры. Одна из целей проекта – добавить возможность играть в различных режимах игры, используя различные версии правил. Реализация этого требует глубокого понимания логики и механики игры. Мануал правил только одной версии правил игры занимает около 600 страниц.
Результат проекта:
- Новая версия игры была успешно реализована. Заказчик остался доволен результатом.
- Все требования проекта выполнены, несмотря на частые изменения.
Достижения компании на проекте:
- Было реализовано REST API, которое предоставляет доступ к просмотру данных игровых персонажей извне клиента.
- Изменена архитектура приложения. Несколько подсистем были полностью переписаны, чтобы дать им возможность расширяться в будущем, сделан рефакторинг, который позволил расширять игровую логику.
- Все элементы UI части приложения были заменены на JavaFX.
- Была добавлена возможность создания пользователями нелинейных алгоритмов взаимодействия персонажей как с помощью интерфейса для визуального программирования, так и в текстовом виде.
Отзыв клиента:
Вадим Кастрицкий, заместитель директора, VironIT, компания по разработке программного обеспечения, Минск, Беларусь
Задача команды JazzTeam на этом проекте была довольно сложной – расширение функционала игры, которое включало в себя погружение в существующую уже на протяжении более 10 лет реализацию. Для разработки необходимо было изучить и учесть правила игры, которые отображены в большом шестисотстраничном мануале. Задача комплексная, требующая серьезного архитектурного подхода и высокой квалификации разработчика. И команда JazzTeam справилась с ней на должном уровне. Хочу отметить, что работа компании JazzTeam всецело соответствует духу Agile. Команда активно предлагала свои решения реализации сложных технических моментов, а также заранее предупреждала о возможных рисках. Мы полностью довольны сотрудничеством с JazzTeam.