Другие языки программирования и технологии

Товарищи программисты ответьте на вопрос пожалуйста!

В общем меня интересует геймдев
Возьмем напримр любой файтинг как тока он запущен то противник (ИИ) тут же начинает вас атаковать вопрос в том что каждый раз он атакует по разному и вообще атаки редко повторяются то есть ии генерирует атаки случайным образом или это реализуется по другому в коде ?
ИИ - это Имитатор Интеллекта?
Почти не играл в файтинги (последний - МК 3). Для меня они просто последовательность перетекающих друг в друга процессов:
- движение
- атака
- защита

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

Атака - просто процесс кадров анимации:
1. Выход на позицию - если запланирована атака, в последний раз проверить, нужно ли её осуществлять и не стоит ли сменить стиль - просто контроль, не стоит ли уйти в защиту и попадёт ли атака. Тупо рандом, например, 50% атака если попадёт, 40% - защита если в точке защиты, 10% - равный расклад на другие действия.

2. Подготовка атаки - анимация начала, короткий процесс, чтобы дать игроку среагировать.
3. Точка прерывания - предоставляет возможность игроку прервать атаку: уйти в блок, отпрыгнуть, контрудар.. . все способы прерывания просчитаны, на каждый сформирована анимация. Это тестируется при разработке.
4. Сам удар - тоже анимация, рассчитывается урон.
5. Завершение - откат после удара и принятие решения, что делать дальше в процессе завершающей анимации. Решение принимается опять рандомом, с дополнительной коррекцией: самые оптимальные пути режутся в зависимости от уровня сложности, не думаю, что игроку интересно 100% попадание на убивающую комбо серию после первого же пропущенного удара.

Защиту предлагаю осуществлять только по пункту 1 атаки. Причина - счётчик времени. Если необходимо, можно сделать особый тип атаки - глухая оборона при ударе игрока по входу в точку прерывания (вероятность - от уровня сложности)

Для меня файтинг - это набор анимированных действий под музыку. Мне это не интересно.
Александр Вавилов
Александр Вавилов
11 112
Лучший ответ
Вадим Чираев ИИ - Искусственный интеллект
В качестве варианта, может применяться стохастическое дерево решений и выбор действия в соответствии с вероятностью выигрыша.
Упрощенно говоря: ИИ делает оценку вероятности выигрыша при том или ином действии. Положим, ИИ оценил, что удар левой рукой даст 55% вероятности выигрыша, блок даст 40%, удар правой ногой даст 5%. Соответственно, действие выбирается случайным образом, но не с равномерно распределенной вероятностью, а именно так: с вер-ю 55% будет совершен удар левой, с вер-ью 40% блок, с вер-тью 5% удар правой ногой.
Дмитрий Грачёв
Дмитрий Грачёв
54 366
если в си, то есть функция rand, однако ее нужно инициализировать текущим временем, иначе любой генератор псевдослучайных чисел все равно будет генерировать одну и ту же последовательность псевдослучайных чисел :)
Andrey Kulagin
Andrey Kulagin
7 591
Ну, положим ИИ там быть не должно и близко :-)
Далее, атакует ровно так, как запрограммирован.

Например, можно

1. проверить расстояние до противника

2. если есть тип (-ы) атаки применимой с данного расстояния - применить. При отсутствии

3. приблизиться

Используемые типы атаки могут быть как равноправными (равновероятно использование каждой) , так и обладать "весами" (атака1 используется 5 из 10 раз, атака2 - 4 из 10, атака3 - 1 из 10), или быть зависимыми от текущей игровой ситуации (нет смысла бить на уровне головы, если противник присел) .

Ещё может быть фактор "агрессивности" учитываемый в алгоритме поведения. Можно ввести и такую стратегию:

1. уйти в защиту

2. ждать возможности провести успешную атаку

3. дождавшись - атаковать

В общем, атакует ровно так, как запрограммирован.
Serioja Sireac
Serioja Sireac
5 511
Александр Шульгин ии это просто название поведения нпс во всех туториалах что я сейчас в ютубике по нпс смотрю оно так называется а за ответ спасибо :)
всё верно вызывается функция рандом, где случайным образом определяется поведение ии, думаю от места положения/удалённости от противника тоже должно зависить, нечего ему в воздухе конечностями размахивать