Пример:
Имеется класс-персонаж "Колобок", которым мы не управляем (бот). У него есть метод (некая внутренняя логика), который должен принимать решение при появлении на горизонте субъекта(ов): лиса, волк, заяц, медведь, а также их комбинаций, количество которых конечно. Задача состоит в том, чтобы у каждого колобка был уникальный характер, но в то же время у каждого из них зашиты одинаковые методы (идти, смотреть, говорить, обходить, убегать). При создании объекта Колобок, нужно как-то определить его характер, от которого будут зависеть дальнейшиие действия с другими субъектами игры и их комбинаций. Примеры разнообразия колобков:
- Первый при появлении на горизонте лисы должен убегать, при появлении зайца - поговорить с ним. У его брата (другой бот) похожий характер, но при встрече любого героя, отличного от зайца или лисы, запускается рандомный метод.
- У второго колобка, наоборот, при появлении на горизонте лисы - поговорить с ней (но в случае атаки - убегать), при появлении зайца - обходить стороной, если заяц движется в его сторону - перейти на бег.
- У третьего колобка другой характер - говорить только в том случае, когда все остальные герои находятся рядом, в остальных случаях - убегать.
И вот эта внутренняя логика у каждого колобка должна быть уникальна и зависеть от некоторых параметров (характера), переданных при создании объекта "Колобок".
Пока у меня есть мысль создать некоторую json структуру (характер колобка) и покрыть её switch/case, if/else, чтобы реализовать вариативность действий.
[{
"visionArea": 0, // поле зрения
"heroesActions": [
"hero1": "action", // при появлении в поле зрения hero1, поговорить с ним, убежать и т.д.
"hero2": "action",
],
"multipleHeroesActions": [ // действия, в случае если несколько героев находятся рядом
{
"heroes": ["hero1, hero2, hero3"],
"action": "action"
},
{
"heroes": ["hero4, hero5, hero6"],
"action": "action"
},
]
}]
Думаю, таким вот образом, реализовать уникальное поведение у каждого бота-колобка. Правильно ли это? Я не совсем уверен, так как, на мой взгляд, это всё лютейший хардкодинг. Ищу как можно сделать лучше. Может есть готовые методики разработки характеристик для новичков-игроделов?
И вообще интересует, как в разработке игр называется такая задача и что почитать полезного, чтобы освоить такую тему?