@Kozgemikin

Как сделать работающий ИИ для игры на JS?

Делаю игру , столкнулся с проблемой , что непеси (говоря по христиански - боты) проходят сквозь друг друга и всячески игнорируют своих собратьев . Функции передвижения для них у меня есть , да и им можно цель поставить (ну там , следовать , стоять столбом , бежать от кого-то , найти и убить) . Но проблема в том , что все эти прелести работают только относительно конкретных переменных . Можно поставить боту какую-то задачу , но лишь вручную . Хотелось бы , скажем , при определенном расстоянии между объектами , причем неважно какими , прога проверяла , скажем , является ли фракция непеся враждебной (фракции у меня лишь параметр объекта , еще ни на что не влияющий) , и если это так , то один бот нападал бы на другого . Или скажем останавливался , если подошел слишком близко , чтоб насквозь не пройти . Как это сделать - ума ни приложу . Я сделал функцию , которая бы заносила все внутриигровые объекты в специальный массив , и проверяла бы , дистанцию между ними , например (для этого функция есть) . По каким-то причинам это не работает как надо , и по сему попрошу примерный алгоритм или псевдокод для решения моей проблемы . Заранее благодарю .
  • Вопрос задан
  • 222 просмотра
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Во-первых, движением и поведением должны заниматься разные участки кода. Первый должен контролировать коллизии, проверяя что фигуры не пересекаются. Как уже заметил grinat делает такая проверка простыми условными выражениями и простой же геометрической функцией. С поведением сложнее, если делать их условными выражениями, то даже для очень тупой NPC понадобиться очень сложный и жёсткий код. Решается эта проблема с помощью конечных автоматов и деревьев решений.
Ответ написан
@grinat
То что ты расписал через иф/елсе делается. Если хочется разнообразия, можно разные сценарии делать с разными расстоянии например и рандомно брать нужный. А ии от балды не возьмётся, сначала нужно долго и нудно обучать, настраивать параметры, в твоём случае lstm используется, он есть в тензор флоу, который есть на js.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы