Новое в создании ИИ - с чего начать? [закрыто]

58

Я новичок в программировании игр и пытаюсь создать простую 2d космическую игру сверху вниз с двумя космическими кораблями, которые сражаются друг с другом. Я хорошо справляюсь с управляемым пользователем космическим кораблем, но понятия не имею, как даже начать программировать ИИ. Определенные методы / образцы лучше для этой ситуации? С чего бы мне начать?

JLE
источник
1
Вот мои слайды об искусственном интеллекте из курса, который я сделал: sol.gfxile.net/gpc/05ai.pdf
Яри ​​Комппа,
4
если заявления. много их.
замедленная

Ответы:

34

Шаблон « Стратегия» отлично подходит для определения того, что делать, но не когда это делать. Вам также понадобится использовать конечные автоматы, чтобы узнать, в каком состоянии находится ваш ИИ, и какие соответствующие решения доступны.

Практическое руководство по созданию полноценного игрового AI: Том I

Дэвид Янг
источник
27

Если вы впервые разрабатываете ИИ, вам не нужно беспокоиться о таких вещах, как паттерн состояния, поведенческая математика или даже получить книгу на эту тему.

Вы можете буквально сойти с рук что-то вроде этого:

if( targetInRange == true )  
{
    FireAtTarget();
}
else if( bulletComingTowardsMe == true )
{
    MoveAwayFromBullet();
}
else
{
    WanderAroundAimlessly();
}

Главный аспект правильного ИИ заключается в том, чтобы подумать о том, какое поведение вы хотите, чтобы персонаж обладал, и как этого можно добиться реалистично. Таким образом, для обычного врага космического корабля, я бы предположил, что возможные действия, которые он мог бы выполнить, были бы:

  • Передвигаться
  • Пожар
  • Убегать

И когда могли произойти эти действия?

  • Передвигаться - больше нечего делать
  • Огонь - когда я замечаю врага
  • Беги - когда у меня мало здоровья / когда я плачу / т. Д.

После того как вы сделали это из-за небольшого количества «состояний», в которых может находиться ваш персонаж, вы можете использовать простое выражение if, подобное приведенному выше. Затем я бы порекомендовал вам взглянуть на поведение рулевого управления, поскольку это очень простое поведение, которое может быть реализовано и может привести к действительно хорошему движению.

Более подробную информацию можно найти здесь: http://www.red3d.com/cwr/steer/
И я определенно рекомендую книгу Мэта Бакленда « Программирование игры AI на примере» , особенно когда вы только начинаете.

Когда вам действительно это удобно, я бы посоветовал взглянуть на паттерны состояния и стратегии.

Дело в том, чтобы начать с малого и просто. Не беспокойтесь обо всех этих терминах, о которых все говорят, о FSM, шаблонах проектирования и прочем. Спроектируйте и постройте прежде всего, затем подумайте, как вы можете улучшить его, используя существующие методы или стандарты.

Надеюсь, это поможет!

Рэй Дей
источник
@Fuu Приветствия для помощника редактирования :)
Рэй Дей
9

Возможно, вы захотите взглянуть на OpenSteer и документацию Steering Behaviors, которая прилагается к нему. Исходный код не для начинающих, но концепции, лежащие в его основе, должны дать вам несколько хороших идей.

AShelly
источник
Люди используют openteer в играх или это больше для симуляции?
2010 года
Я, по крайней мере, пытаюсь использовать его в разработке игры. Пока это хорошо работает для меня. Я думаю, что автор разработал большую часть этого, работая в группе Playstation в Sony - вероятно, он сделал это в некоторых играх. MobyGames перечисляет его в титрах JohnMadden Football и одной из игр Leary Suit Larry.
AShelly
FreeOrion использует OpenSteer в своем тактическом боевом движке.
Майк Штробель
1
+1 За упоминание новичка. Если вы хотите увидеть несколько замечательных примеров объединения очень простых поведений вместе, чтобы сформировать что-то очень сложное и запутанное. Оформление руля! Google, "Boids" и посмотрите на некоторые интересные использования. Не совсем то, что вы хотите, но это покажет вам, что из простоты возникает сложность
onedayitwillmake
9

Возможно, вы захотите взглянуть на шаблон проектирования стратегии . По сути, напишите те же основные стратегии поведения кораблей:

  • Подойдите ближе к цели
  • Цель атаки
  • Убежать от цели
  • Двигаться в сторону бонусов
  • Используйте бонусы

Затем вы будете использовать логику (конечные автоматы) для выбора между этими стратегиями. Например: если щиты кораблей опустились ниже 50%, убегайте от цели и двигайтесь в сторону бонусов / целительных предметов и так далее.

Брайан Денни
источник
1
поэтому каждый раз в игровом цикле он решает, какая из этих «стратегий» имеет приоритет, а затем выполняет это?
2010 года
@jle Довольно. Таким образом, каждая из ваших стратегий будет разбита на свои собственные классы, сохраняя ваш код организованным.
Брайан Денни
7

Могу ли я предложить вам купить книгу Иана Миллингтона «Искусственный интеллект для игр» - это отлично! :) http://www.ai4g.com/

Исходный код по лицензии Github - MIT.

Конечно, если вы не используете C / C ++, то это может быть менее актуально.

Но действительно потрясающее введение в мир Искусственной глупости / интеллекта.

Вещи, которые вам понадобятся, это рулевое управление и конечные автоматы. Для начинающих.

jacmoe
источник
2

Несколько практических советов, если вы выбираете конечные автоматы: остерегайтесь мегасостояния.

Соблазнительно иметь состояние «бегства», которое обрабатывает установку позиции, в которую нужно бежать, установление высокой скорости цели, очистку всех целей и т. Д. Гораздо лучше вместо этого иметь много конечных автоматов, каждый из которых управляет одним или несколькими средствами управления кораблем - например, конечный автомат, который обрабатывает выбор целевой позиции, тот, который обрабатывает оружие и т. д.

Это может показаться глупым, поскольку вам придется добавлять состояния сброса на каждую отдельную машину, но, поскольку вы ограничены только одним или двумя выходами, ваши состояния в конечном итоге будут очень маленькими, поэтому это не должно быть проблемой.

Кроме того, поскольку каждый элемент управления теперь находится под индивидуальным контролем, вы можете в конечном итоге выбрать целевую позицию беглеца, в то время как состояние атаки контролирует ваше оружие. Вы можете атаковать врага, сохраняя при этом мощность двигателя из-за утечки охлаждающей жидкости. Вы можете управлять, чтобы избежать столкновения, все еще сбрасывая контрмеры. Все это было бы невозможно с помощью единого всеобъемлющего конечного автомата.

tenpn
источник
2

Поведенческая математика для игрового ИИ

Добавление этой книги в список отправных точек для обучения программированию ИИ. Я полагаю, что он сосредоточен на наблюдении и реализации поведения, а не на алгоритмах ограниченного применения, и хорошо подходит для этой задачи.

Джей Белл
источник
1

Как создать ИИ - сложный вопрос, потому что он состоит из многих частей:

  • Вы выбираете общую архитектуру / парадигму для своего ИИ. Это основано на сценариях? Будет ли оно использовать планирование? Это простой FSM или вы предпочитаете BT?
  • Затем вы применяете эти парадигмы с определенной реализацией / набором инструментов.
  • Теперь у вас есть выбор игрового дизайна, так как вы должны думать о поведении, которое будет использовать ваша архитектура.

Другие постеры предлагали отличные книги, и мне нравятся AI4Games, предложенные jacmoe, хотя он довольно общий по частям (например, много книг, что, конечно, понятно).

Конечно, у каждого типа игры есть свои специфические потребности, и аркадные игры / шутеры не нуждаются в сложной архитектуре для поддержки интересного игрового процесса. Простые рулевые библиотеки будут выполнять эту работу в качестве основы для такого поведения, а затем вы добавляете детали для различных типов врагов (некоторые, периодически стреляют, некоторые стреляют, предсказывая движение игрока, некоторые поворачиваются, чтобы противостоять врагу, другие могут координировать свои действия) их атаки и т. д.).

  • Я думаю, что лучший способ узнать о кодировании игр (ИИ) - это посмотреть на хороший, работающий код. Итак, изучите ohloh.net и github и найдите существующие проекты FOSS!
  • Конечно, вы можете выбрать на твердую часть и играть существующие (но простой) игры. Попробуйте перепроектировать поведение и подумайте «Как бы я спроектировал это?». Конечно, подсказки всегда помогают, и, вероятно, поэтому вы спросили здесь, на gamedev.SE!
  • Что-то среднее между ними - слишком посмотреть на существующие шутеры на форумах GameMaker! Вы можете найти много простых скриптов, которые сделают свое дело! ;)
Astyanax
источник
1

Подумайте о том, что вы делаете, когда играете в игру. Задайте себе несколько вопросов.

  • Какая информация мне нужна , чтобы принять решение?
  • Когда я реагирую на изменения?
  • Каковы мои "долгосрочные" цели в этой конкретной игровой сессии?

Затем, я делаю, чтобы ИИ смотрел на игровое поле и составлял список возможных действий или движений, которые ИИ мог бы сделать на основе этих вопросов. Я оцениваю и сортирую эти шаги с «фактором разумности». Тогда это так же просто, как выбрать и выполнить движение / действие, основанное на некоторой комбинации случайности и любого уровня сложности, который игрок выбрал в начале игры.

Затем, через 500 миллисекунд, я делаю это снова.

У него нет никаких способностей к обучению или чего-то еще, но с достаточным количеством настроек это может быть довольно убедительно, что действительно важно.

Gagege
источник