| 
	
		
		
			| Шаблоны проектирования для описания игровой логики |  |  |  | 
| 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 |  |  |  |  |  
 |