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