Традиционным способом достижения этой цели в разработке игр является использование управляемой данными архитектуры для игровых систем.
По сути, это означает, что код не реализует определенный тип оружия (оружие) с явно определенными значениями для его диапазона / урона / проникновения, а заполняет общие концепции оружия дальнего боя (дальность / урон / проникновение ...) из внешнего (к коду) источника данных. Этот внешний источник может варьироваться от разбираемых (возможно, XML) файлов, считываемых с диска, до двоичных файлов или элементов базы данных, созданных с помощью инструментов, внутренних или внешних для самого игрового движка.
Определяя что-то наподобие врага, система ИИ может быть спроектирована для поддержки некоторого количества общих поведений (агрессивных, оборонительных, поддерживающих, трусовых), которые затем настраиваются элементами, управляемыми данными.
«Мой новый враг» начинается с агрессивного поведения базового ИИ с управляемыми данными значениями для: -игнора игроков> моего уровня + Х-преследования игроков до X юнитов вне точки возрождения-бой, когда здоровье <Х-приоритеты способностей -приоритеты-приоритеты способностей (когда игроки подходят слишком близко)
Более сложная схема, управляемая данными, может позволить определить конкретные точки данных (события), в которых состояние ИИ переходит (конечный автомат) в другое состояние (или даже возможность перехода в одно из N других состояний), что позволяет вашим пользователям определять сложная иерархия поведения.
Все это, конечно, больше, чем просто кодирование поведения, но это интересная задача, позволяющая пользователям создавать контент без изменения источника.
Есть бонусные баллы, которые должны быть достигнуты:
- если вы можете динамически обновлять данные и отражать изменения в игровом движке без перезапуска приложения
- если вы создаете удобный пользовательский интерфейс поверх данных, позволяющий пользователям использовать интерфейс для взаимодействия с данными, а не напрямую редактировать текстовые (xml или любые другие) файлы
Для обучающей игры, нацеленной на более техническую аудиторию, большая часть работы заключается в разработанных классах / объектах, которые предоставляют пользователям чистые интерфейсы для расширения, что, в свою очередь, также может управляться данными.