Я новичок в программировании игр и пытаюсь создать простую 2d космическую игру сверху вниз с двумя космическими кораблями, которые сражаются друг с другом. Я хорошо справляюсь с управляемым пользователем космическим кораблем, но понятия не имею, как даже начать программировать ИИ. Определенные методы / образцы лучше для этой ситуации? С чего бы мне начать?
58
Ответы:
Шаблон « Стратегия» отлично подходит для определения того, что делать, но не когда это делать. Вам также понадобится использовать конечные автоматы, чтобы узнать, в каком состоянии находится ваш ИИ, и какие соответствующие решения доступны.
Практическое руководство по созданию полноценного игрового AI: Том I
источник
Если вы впервые разрабатываете ИИ, вам не нужно беспокоиться о таких вещах, как паттерн состояния, поведенческая математика или даже получить книгу на эту тему.
Вы можете буквально сойти с рук что-то вроде этого:
Главный аспект правильного ИИ заключается в том, чтобы подумать о том, какое поведение вы хотите, чтобы персонаж обладал, и как этого можно добиться реалистично. Таким образом, для обычного врага космического корабля, я бы предположил, что возможные действия, которые он мог бы выполнить, были бы:
И когда могли произойти эти действия?
После того как вы сделали это из-за небольшого количества «состояний», в которых может находиться ваш персонаж, вы можете использовать простое выражение if, подобное приведенному выше. Затем я бы порекомендовал вам взглянуть на поведение рулевого управления, поскольку это очень простое поведение, которое может быть реализовано и может привести к действительно хорошему движению.
Более подробную информацию можно найти здесь: http://www.red3d.com/cwr/steer/
И я определенно рекомендую книгу Мэта Бакленда « Программирование игры AI на примере» , особенно когда вы только начинаете.
Когда вам действительно это удобно, я бы посоветовал взглянуть на паттерны состояния и стратегии.
Дело в том, чтобы начать с малого и просто. Не беспокойтесь обо всех этих терминах, о которых все говорят, о FSM, шаблонах проектирования и прочем. Спроектируйте и постройте прежде всего, затем подумайте, как вы можете улучшить его, используя существующие методы или стандарты.
Надеюсь, это поможет!
источник
Возможно, вы захотите взглянуть на OpenSteer и документацию Steering Behaviors, которая прилагается к нему. Исходный код не для начинающих, но концепции, лежащие в его основе, должны дать вам несколько хороших идей.
источник
Возможно, вы захотите взглянуть на шаблон проектирования стратегии . По сути, напишите те же основные стратегии поведения кораблей:
Затем вы будете использовать логику (конечные автоматы) для выбора между этими стратегиями. Например: если щиты кораблей опустились ниже 50%, убегайте от цели и двигайтесь в сторону бонусов / целительных предметов и так далее.
источник
Могу ли я предложить вам купить книгу Иана Миллингтона «Искусственный интеллект для игр» - это отлично! :) http://www.ai4g.com/
Исходный код по лицензии Github - MIT.
Конечно, если вы не используете C / C ++, то это может быть менее актуально.
Но действительно потрясающее введение в мир Искусственной глупости / интеллекта.
Вещи, которые вам понадобятся, это рулевое управление и конечные автоматы. Для начинающих.
источник
Несколько практических советов, если вы выбираете конечные автоматы: остерегайтесь мегасостояния.
Соблазнительно иметь состояние «бегства», которое обрабатывает установку позиции, в которую нужно бежать, установление высокой скорости цели, очистку всех целей и т. Д. Гораздо лучше вместо этого иметь много конечных автоматов, каждый из которых управляет одним или несколькими средствами управления кораблем - например, конечный автомат, который обрабатывает выбор целевой позиции, тот, который обрабатывает оружие и т. д.
Это может показаться глупым, поскольку вам придется добавлять состояния сброса на каждую отдельную машину, но, поскольку вы ограничены только одним или двумя выходами, ваши состояния в конечном итоге будут очень маленькими, поэтому это не должно быть проблемой.
Кроме того, поскольку каждый элемент управления теперь находится под индивидуальным контролем, вы можете в конечном итоге выбрать целевую позицию беглеца, в то время как состояние атаки контролирует ваше оружие. Вы можете атаковать врага, сохраняя при этом мощность двигателя из-за утечки охлаждающей жидкости. Вы можете управлять, чтобы избежать столкновения, все еще сбрасывая контрмеры. Все это было бы невозможно с помощью единого всеобъемлющего конечного автомата.
источник
Поведенческая математика для игрового ИИ
Добавление этой книги в список отправных точек для обучения программированию ИИ. Я полагаю, что он сосредоточен на наблюдении и реализации поведения, а не на алгоритмах ограниченного применения, и хорошо подходит для этой задачи.
источник
Как создать ИИ - сложный вопрос, потому что он состоит из многих частей:
Другие постеры предлагали отличные книги, и мне нравятся AI4Games, предложенные jacmoe, хотя он довольно общий по частям (например, много книг, что, конечно, понятно).
Конечно, у каждого типа игры есть свои специфические потребности, и аркадные игры / шутеры не нуждаются в сложной архитектуре для поддержки интересного игрового процесса. Простые рулевые библиотеки будут выполнять эту работу в качестве основы для такого поведения, а затем вы добавляете детали для различных типов врагов (некоторые, периодически стреляют, некоторые стреляют, предсказывая движение игрока, некоторые поворачиваются, чтобы противостоять врагу, другие могут координировать свои действия) их атаки и т. д.).
источник
Подумайте о том, что вы делаете, когда играете в игру. Задайте себе несколько вопросов.
Затем, я делаю, чтобы ИИ смотрел на игровое поле и составлял список возможных действий или движений, которые ИИ мог бы сделать на основе этих вопросов. Я оцениваю и сортирую эти шаги с «фактором разумности». Тогда это так же просто, как выбрать и выполнить движение / действие, основанное на некоторой комбинации случайности и любого уровня сложности, который игрок выбрал в начале игры.
Затем, через 500 миллисекунд, я делаю это снова.
У него нет никаких способностей к обучению или чего-то еще, но с достаточным количеством настроек это может быть довольно убедительно, что действительно важно.
источник