Шаблоны проектирования для описания игровой логики
| |
nikita1828 | Дата: Четверг, 25 Декабря 2014, 19:23 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Здравствуйте,
Я уже писал здесь что пишу игрушку. Сейчас вот столкнулся с проблемой в написании игровой логики. Логика у меня получается весьма закрученная. Если её пытаться описать в виде обычных условных операторов, код получается весьма громоздким и не читабельным. Я попробовал описать логику используя парадигму автоматного программирования (http://ru.wikipedia.org/wiki/Автоматное_программирование). Стало получаться лучше, но тоже как-то не красиво: слишком много состояний, причём у многих состояний только один вход и один выход. Ещё пробовал описать логику через разветвлённую систему триггеров, как-то тоже не очень.
В общем вопрос у меня такой. Какие паттерны / подходы / парадигмы программирования используются при написании игровой логики и логики AI? Где об этом можно почитать? Что именно вы используете?
Спасибо!
Сообщение отредактировал nikita1828 - Четверг, 25 Декабря 2014, 19:28 |
|
| |
beril | Дата: Четверг, 25 Декабря 2014, 19:32 | Сообщение # 2 |
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
| Может поможет И это
Накодил? Убери за собой! Инвентарь в Unity(UI) Инвентарь в Unity(GUI)
Сообщение отредактировал beril - Четверг, 25 Декабря 2014, 19:34 |
|
| |
KamiRonin | Дата: Четверг, 25 Декабря 2014, 21:17 | Сообщение # 3 |
почти ветеран
Сейчас нет на сайте
| Книжек и правда очень много.. Но я заметил, что для каждого типа ИИ требуется свой подход в реализации. Иногда смешиваешь несколько парадигм, иногда обходишься одной - двумя раздельными и чередующимися.. Поэтому это вопрос философский, алхимический. Философского камня в ИИ пока нет.
Имхо, лучше всего подходит модель где ключевыми являются - раздельные классы сущностей со своей логикой внутри + события (Events, подписка) + между объектные сообщения (часто через центральный класс - синглтон)..
Например, 2Д файтинг, обзор сбоку. Из логики ИИ там алгоритмы распознавания манеры боя юзера, цепочки приемов для наибольшего поражения и поведение при наступлении полудохлого состояния. начну с последнего, полудохлое состояние: тут способ действия проще некуда - быстрое уклоняющееся перемещение, постоянный блок и самые безопасные удары время от времени. Значит для реализации такого поведения требуется логики: определение местоположения бойца противника, вычисление расстояния -- при величине расстояния меньше Х - вкл. блок и ускоренное перемещение на противоположную сторону поля боя, возможно с разворотом. Я бы сделал у сабЗиро класс, который занимался бы только тем, что постоянно фиксировал сведения о противнике - его удаленность, положение ударных поверхностей, скорость изменения этих данных, отслеживание состояния - блок, удар, прыжок и тп. В этом классе я бы сделал эвенты - OnJump, OnKick, OnBlock и тп, в которые бы подписывал класс управления действиями сабЗиро. В классе действий - были бы стратегические узлы, которые бы реагировали на события заданным характерным образом, причем в зависимости от условий и ситуации. Реакция выражалась бы в виде фиксированных наборов действий - "блок", "подсечка" и тп.. В менеджере бойца пользователя можно сделать посыл сообщений "начат удар", "завершен удар", "начат шаг" и тп и тд.. Чтобы не писать полностью человеческое восприятие у сабЗиро! Он будет получать эти сообщения как будто "увидел" это сам и реагировать соответственно... Так что вот такая логика вышла - класс поточного восприятия, эвенты, класс осуществления действия и сообщения.
Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
|
|
| |
nikita1828 | Дата: Пятница, 26 Декабря 2014, 14:21 | Сообщение # 4 |
был не раз
Сейчас нет на сайте
| Цитата beril ( ) Может поможет И это Спасибо! Вроде есть за что уцепиться.. Почитаю ещё.
Цитата KamiRonin ( ) Например, 2Д файтинг, обзор сбоку. У меня хоть и вправду с виду 2д файтинг, но геймплей в нём совсем не такой как в классических файтингах. Геймплей больше похож на логическую или танцевальную игру. И запутанная логика, которую я пытаюсь описать, это не логика ИИ (он у меня, как раз, достаточно тривиален), а логика взаимодействия объектов (актёров) в игровом пространстве.
Цитата KamiRonin ( ) Так что вот такая логика вышла - класс поточного восприятия, эвенты, класс осуществления действия и сообщения. Что то подобное у меня получилось при реализации машины состояний. Те же евенты, только вместо класса действий, набор классов состояний которые обрабатывают эти евенты.
Сообщение отредактировал nikita1828 - Пятница, 26 Декабря 2014, 14:22 |
|
| |
|