Как реализовать ИИ для файтинга

8

Я построил 2D истребитель http://neighr.com/mif/index.htmlвчера.

Второй «игрок» почти ничего не делает. На самом деле ничего. Если честно, у меня никогда не было игр, в которых был бы такой противник.

Итак, мой вопрос: как начать с программирования ИИ для противника? Есть ли учебники, лучшие практики? Я хочу, чтобы это было проблемой (для игрока, а не для меня).

Lanbo
источник

Ответы:

12

N-граммы популярны здесь. Основная идея - сохранить список ходов, которые сделал игрок. Затем, учитывая последние N ходов игрока, можно определить процентную вероятность того, каким может быть его следующий ход.

Ваша игра должна иметь базу данных эффективных фишек и блоков для каждого хода.

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

Для сложности ИИ, просто потише ИИ на более простых уровнях. Худший режим ИИ может инвертировать выбор (то есть, если игрок знает, что он обычно блокирует удары, у него есть более высокий, чем более низкий шанс, чтобы нанести удар). Режим наивысшей сложности будет использовать алгоритм без недостатков и, скорее всего, выбьет дерьмо из игрока.

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

Шон Миддледич
источник
3

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

Например, простая система

подождите (0-3 секунды)

Roll d6

выбрать из 6 действий.

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

ProtoJazz
источник
2

Вот как я бы сделал ай для файтинга.

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

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

Kaliber64
источник
+1 Это чрезвычайно простое, но абсолютно жизнеспособное и эффективное решение. Вы случайно не знаете, использовалась ли такая система в коммерческих играх? :)
Мигель
Нет я не Я говорю из очень небольшого опыта. Так что, если это хорошо, и я подумал об этом. Тогда, конечно, я не первый. (Если это хорошо). N ходов будет умнее. Но сложнее.
Kaliber64