Я работаю над небольшой браузерной игрой, и у меня возникла проблема с дизайном, и единственные решения, о которых я могу подумать, плохие.
Это типичное веб-приложение - Angular2 / HTML / JSвнешний интерфейс, сервер Java с базой данных PostgreSQL, контент, размещенный на nginx и Tomcat
Пользователи могут взаимодействовать с различными NPC (неигровыми персонажами), у которых у всех свое поведение.Я обобщил эту логику, NPC хранятся в БД в виде строк конфигурации,
- ID: 1
- Имя: Сэм NPC
- ImgURL: "www.mygame.com / img / npc / sam.png "
При доступе к mygame.com/npc/1 выдается GET в JS для внутреннего API в Java, чтобы получить эту строку из БД и техзначения связаны и отображаются.Хранение их в виде строк конфигурации в БД позволяет мне добавлять новые NPC или редактировать существующие без повторного развертывания сервера или внешнего кода.
Пока что это стандарт.Тем не менее, я хочу, чтобы Сэм был дружелюбным, и посещение его увеличивает деньги игрока.Другой NPC, Стив, должен быть враждебным и убирать деньги или предметы из инвентаря игроков.Боб, NPC, иногда может разблокировать квест для игроков.
Вот где я застрял: каждый NPC с совершенно другим и произвольным поведением означает, что мне нужен исполняемый код для каждого NPC.
Myдва варианта, на мой взгляд, оба являются плохими, но по-разному.
Каждый NPC получает свой собственный класс Java и является сущностью первого класса в логике сервера.Все NPC реализуют метод interact()
, а для добавления или изменения NPC требуется принудительное нажатие кода.
Каждый NPC получает новый столбец в БД с исполняемым файлом JS для запуска через сценарийдвижок на Java.Это немного опасно, но и просто хлопотно.Написание JS, который может вызывать функции БД путем взаимодействия с базой кодов Java и последующего сохранения ее в виде строки в базе данных, является хитрым.
В настоящее время я использую вариант 2, но не слишком далекои интересно, есть ли приемлемый способ справиться с чем-то вроде этого, что лучше.