В общем меня интересует геймдев
Возьмем напримр любой файтинг как тока он запущен то противник (ИИ) тут же начинает вас атаковать вопрос в том что каждый раз он атакует по разному и вообще атаки редко повторяются то есть ии генерирует атаки случайным образом или это реализуется по другому в коде ?
Другие языки программирования и технологии
Товарищи программисты ответьте на вопрос пожалуйста!
ИИ - это Имитатор Интеллекта?
Почти не играл в файтинги (последний - МК 3). Для меня они просто последовательность перетекающих друг в друга процессов:
- движение
- атака
- защита
С движением понятно: все удары имеют позицию для начала, все защиты против ударов тоже.
Способы переходов тоже ограничены и на каждом из них есть точки прерывания атакой противника. ИИ просто определяет следующее действие и движется к точке входа в него.
Атака - просто процесс кадров анимации:
1. Выход на позицию - если запланирована атака, в последний раз проверить, нужно ли её осуществлять и не стоит ли сменить стиль - просто контроль, не стоит ли уйти в защиту и попадёт ли атака. Тупо рандом, например, 50% атака если попадёт, 40% - защита если в точке защиты, 10% - равный расклад на другие действия.
2. Подготовка атаки - анимация начала, короткий процесс, чтобы дать игроку среагировать.
3. Точка прерывания - предоставляет возможность игроку прервать атаку: уйти в блок, отпрыгнуть, контрудар.. . все способы прерывания просчитаны, на каждый сформирована анимация. Это тестируется при разработке.
4. Сам удар - тоже анимация, рассчитывается урон.
5. Завершение - откат после удара и принятие решения, что делать дальше в процессе завершающей анимации. Решение принимается опять рандомом, с дополнительной коррекцией: самые оптимальные пути режутся в зависимости от уровня сложности, не думаю, что игроку интересно 100% попадание на убивающую комбо серию после первого же пропущенного удара.
Защиту предлагаю осуществлять только по пункту 1 атаки. Причина - счётчик времени. Если необходимо, можно сделать особый тип атаки - глухая оборона при ударе игрока по входу в точку прерывания (вероятность - от уровня сложности)
Для меня файтинг - это набор анимированных действий под музыку. Мне это не интересно.
Почти не играл в файтинги (последний - МК 3). Для меня они просто последовательность перетекающих друг в друга процессов:
- движение
- атака
- защита
С движением понятно: все удары имеют позицию для начала, все защиты против ударов тоже.
Способы переходов тоже ограничены и на каждом из них есть точки прерывания атакой противника. ИИ просто определяет следующее действие и движется к точке входа в него.
Атака - просто процесс кадров анимации:
1. Выход на позицию - если запланирована атака, в последний раз проверить, нужно ли её осуществлять и не стоит ли сменить стиль - просто контроль, не стоит ли уйти в защиту и попадёт ли атака. Тупо рандом, например, 50% атака если попадёт, 40% - защита если в точке защиты, 10% - равный расклад на другие действия.
2. Подготовка атаки - анимация начала, короткий процесс, чтобы дать игроку среагировать.
3. Точка прерывания - предоставляет возможность игроку прервать атаку: уйти в блок, отпрыгнуть, контрудар.. . все способы прерывания просчитаны, на каждый сформирована анимация. Это тестируется при разработке.
4. Сам удар - тоже анимация, рассчитывается урон.
5. Завершение - откат после удара и принятие решения, что делать дальше в процессе завершающей анимации. Решение принимается опять рандомом, с дополнительной коррекцией: самые оптимальные пути режутся в зависимости от уровня сложности, не думаю, что игроку интересно 100% попадание на убивающую комбо серию после первого же пропущенного удара.
Защиту предлагаю осуществлять только по пункту 1 атаки. Причина - счётчик времени. Если необходимо, можно сделать особый тип атаки - глухая оборона при ударе игрока по входу в точку прерывания (вероятность - от уровня сложности)
Для меня файтинг - это набор анимированных действий под музыку. Мне это не интересно.
Вадим Чираев
ИИ - Искусственный интеллект
В качестве варианта, может применяться стохастическое дерево решений и выбор действия в соответствии с вероятностью выигрыша.
Упрощенно говоря: ИИ делает оценку вероятности выигрыша при том или ином действии. Положим, ИИ оценил, что удар левой рукой даст 55% вероятности выигрыша, блок даст 40%, удар правой ногой даст 5%. Соответственно, действие выбирается случайным образом, но не с равномерно распределенной вероятностью, а именно так: с вер-ю 55% будет совершен удар левой, с вер-ью 40% блок, с вер-тью 5% удар правой ногой.
Упрощенно говоря: ИИ делает оценку вероятности выигрыша при том или ином действии. Положим, ИИ оценил, что удар левой рукой даст 55% вероятности выигрыша, блок даст 40%, удар правой ногой даст 5%. Соответственно, действие выбирается случайным образом, но не с равномерно распределенной вероятностью, а именно так: с вер-ю 55% будет совершен удар левой, с вер-ью 40% блок, с вер-тью 5% удар правой ногой.
если в си, то есть функция rand, однако ее нужно инициализировать текущим временем, иначе любой генератор псевдослучайных чисел все равно будет генерировать одну и ту же последовательность псевдослучайных чисел :)
Ну, положим ИИ там быть не должно и близко :-)
Далее, атакует ровно так, как запрограммирован.
Например, можно
1. проверить расстояние до противника
2. если есть тип (-ы) атаки применимой с данного расстояния - применить. При отсутствии
3. приблизиться
Используемые типы атаки могут быть как равноправными (равновероятно использование каждой) , так и обладать "весами" (атака1 используется 5 из 10 раз, атака2 - 4 из 10, атака3 - 1 из 10), или быть зависимыми от текущей игровой ситуации (нет смысла бить на уровне головы, если противник присел) .
Ещё может быть фактор "агрессивности" учитываемый в алгоритме поведения. Можно ввести и такую стратегию:
1. уйти в защиту
2. ждать возможности провести успешную атаку
3. дождавшись - атаковать
В общем, атакует ровно так, как запрограммирован.
Далее, атакует ровно так, как запрограммирован.
Например, можно
1. проверить расстояние до противника
2. если есть тип (-ы) атаки применимой с данного расстояния - применить. При отсутствии
3. приблизиться
Используемые типы атаки могут быть как равноправными (равновероятно использование каждой) , так и обладать "весами" (атака1 используется 5 из 10 раз, атака2 - 4 из 10, атака3 - 1 из 10), или быть зависимыми от текущей игровой ситуации (нет смысла бить на уровне головы, если противник присел) .
Ещё может быть фактор "агрессивности" учитываемый в алгоритме поведения. Можно ввести и такую стратегию:
1. уйти в защиту
2. ждать возможности провести успешную атаку
3. дождавшись - атаковать
В общем, атакует ровно так, как запрограммирован.
Александр Шульгин
ии это просто название поведения нпс во всех туториалах что я сейчас в ютубике по нпс смотрю оно так называется а за ответ спасибо :)
всё верно вызывается функция рандом, где случайным образом определяется поведение ии, думаю от места положения/удалённости от противника тоже должно зависить, нечего ему в воздухе конечностями размахивать
Александр Шульгин
спасибо
Random
Александр Шульгин
спасибо
Похожие вопросы
- Пацаны, кто программист, ответьте, простой вопрос.
- Уважаемые программисты, у меня вопрос, пожалуйста отзовитесь)
- Товарищи программисты!!!!Ну помогите пожалуйста!!!!
- Товарищи программисты на Delphi и Pascal помогите девушке!!!)) вопрос глупый..насчет паскаля..
- вопрос товарищам программистам на PHP
- кем лучше быть программистом или поваром? вопрос внутри
- Меня зовут Влад и мне 16, вижу себя программистом в будущем помогите пожалуйста, дайте совет, поддержите!
- Здравствуйте товарищи программисты хотел спросить. VIsual studio 2022 или Visual Studio Code
- Программисты, ответьте пожалуйста..
- Товарищи программисты и те кто знает!!!