Я не знаю, совпадает ли это с вашим представлением о «справедливости», но я думаю, что хотелось бы предотвратить случай, когда один игрок оказался ближе ко всем 4 призракам, и поэтому они в конечном итоге сгруппировались наего и следуя за ним вокруг, никогда больше не преследовать другого игрока.Это было бы возможным результатом правила, согласно которому призрак всегда следует за ближайшим игроком.
Вы можете сначала выделить достаточно 2 призраков для игрока 1 и 2 других призрака для игрока 2, а затем заставить их преследовать своихцели (и переназначение это время от времени).Хотя, если бы я был призраком в реальном мире, мне было бы все равно, если бы все мои друзья и я собирались на одном пакмане.
Вместо BFS или Dijkstra, я бы использовал поиск сначала в глубину до глубины 3или 4, используя декартово расстояние между вашим призраком и Пакманом на листьях этого дерева поиска и выбирая значение лучшего листа до корня.Для небольшого взгляда было бы быстрее и проще кодировать по сравнению с BFS и Dijkstra.Поиск с ограниченной глубиной должен дать вам довольно разумное поведение для ваших призраков, при условии, что ваша игровая доска не имеет спиральных коридоров, где количество ходов, необходимых для выхода из спирали, больше 3 или 4. Это также означает, что время выполнения алгоритма неувеличивайтесь с увеличением и увеличением досок, как это делают BFS и Dijkstra, опять же при условии, что у вас нет спиральных коридоров.