Если у вас просто сетка пикселей - «большое поле», по которому pacman и призрак могут свободно перемещаться - тогда самый короткий путь прост - прямая линия между призраком и pacman.
Но «кратчайший путь» неизменно означает, что мы пытаемся решить проблему теории графов. (Я предполагаю знание графов, некоторой теории графов, вспомогательных матриц и т. Д.)
В приведенном выше случае рассмотрим каждый пиксель как узел на графике. Каждый узел соединен со своими соседями ребром, и каждый ребро имеет одинаковый «вес» (перемещение к узлу «сверху» не медленнее, чем перемещение к узлу «снизу»).
Итак, у вас есть это: ("*" = узел, "-, /, \, |" = край)
*-*-*
|\|/|
*-*-* ... (etc)
|/|\|
*-*-*
Если Пакман находится в центре, он может очень легко перейти к любому другому узлу.
Что-то более близкое к реальности может быть следующим:
*-*-*
| | |
*-*-* ... (etc)
| | |
*-*-*
Теперь Пакман не может двигаться по диагонали. Для перехода из центра в правый нижний угол требуется 2 «прыжка», а не один.
Чтобы продолжить прогресс:
*-*-*-*
| | | |
| | | |
| | | |
*-*-*-*
| | | |
*-*-*-*
Теперь, чтобы перейти от узла посередине к узлу сверху, вам нужно 3 прыжка. Тем не менее, чтобы двигаться к дну, требуется всего 1 прыжок.
Было бы легко перевести любую настройку игрового поля в график. Каждое «пересечение» является узлом. Путь между двумя пересечениями является ребром, а длина этого пути - весом этого ребра.
Введите A *. Построив график (используйте матрицу смежности или список узлов), вы можете использовать алгоритм A *, чтобы найти кратчайший путь. Другие алгоритмы включают Дейкстры. И много других! Но сначала вам нужно сформулировать свою проблему в виде графика, а затем поиграть с тем, как бы вы перешли от узла A (pacman) к узлу B (ghost).
Надеюсь, это поможет!