Отойди от объекта в 2D-сетке - PullRequest
0 голосов
/ 22 января 2012

Я разрабатываю небольшую игру на Python. Я использую 2D прямоугольную сетку. Я знаю, что для поиска пути я могу использовать A * и тому подобное, я знаю, как это работает, но у меня немного другая проблема.

Допустим, у нас есть человек, управляемый компьютером, и несколько зомби, управляемых компьютером. Когда человек замечает зомби, он должен уйти от этого как можно дальше. Сейчас, чтобы проверить все, я просто поворачиваюсь на 180 ° и убегаю, пока не увижу другого зомби и не повторю.

Очевидно, что это не очень умно (и может вызвать проблемы, если с обеих сторон зомби).

Мне было интересно, есть ли более разумный способ сделать это? Что-то вроде использования Дейкстры, чтобы найти «безопасную зону», куда я могу бежать? Альтернативы всегда приветствуются, я не могу понять это.

Ответы [ 2 ]

1 голос
/ 22 января 2012

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

0 голосов
/ 22 января 2012

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

Я не знаю, насколько хорошо это будетработать (или как он будет масштабироваться до количества зомби у вас есть), но вы можете сделать что-то вроде:

  • Для каждого зомби, вычислите расстояние до человека и направление, в котором он находитсяот человека.

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

  • Найти сумму всех векторов.

  • Заставить человека бежать по нормали к вашему результату,

Я не уверен, насколько ресурсоемким это будет, но кажется, что это наиболее логичный способ расставить приоритеты для запуска.

...