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