Si solo tiene una cuadrícula de píxeles, un "gran campo" en el que Pacman y el fantasma pueden moverse libremente, entonces el camino más corto es fácil: una línea recta entre el fantasma y el pacman.
Pero el "camino más corto" invariablemente significa que estamos tratando de resolver un problema de teoría de grafos. (¡Estoy asumiendo el conocimiento de gráficos, algunas teorías de grafos, matrices adj, etc.!)
En el caso anterior, considere cada píxel como un nodo en un gráfico. Cada nodo está conectado a sus vecinos por un borde, y cada borde tiene el mismo "peso" (moverse al nodo "arriba" no es más lento que moverse al nodo "debajo").
Entonces tienes esto: ("*" = nodo, "-, /, \, |" = borde)
*-*-*
|\|/|
*-*-* ... (etc)
|/|\|
*-*-*
Si Pacman está en el centro, puede moverse a cualquier otro nodo muy fácilmente.
Algo más cercano a la realidad podría ser esto:
*-*-*
| | |
*-*-* ... (etc)
| | |
*-*-*
Ahora, pacman no puede moverse en diagonal. Para ir del centro a la parte inferior derecha, se requieren 2 "saltos" en lugar de uno.
Para continuar la progresión:
*-*-*-*
| | | |
| | | |
| | | |
*-*-*-*
| | | |
*-*-*-*
Ahora, para pasar de un nodo en el medio a un nodo en la parte superior, necesita 3 saltos. Sin embargo, para avanzar hacia la parte inferior solo se necesita 1 salto.
Sería fácil traducir cualquier configuración de tablero de juego en un gráfico. Cada "intersección" es un nodo. El camino entre dos intersecciones es un borde, y la longitud de ese camino es el peso de ese borde.
Entrar a*. Al construir un gráfico (use una matriz de ajuste o una lista de nodos), puede usar el algoritmo A * para encontrar la ruta más corta. Otros algoritmos incluyen Dijkstra. ¡Y muchos otros! Pero primero necesitas enmarcar tu problema en términos de un gráfico, y luego jugar con cómo irías del nodo A (pacman) al nodo B (fantasma).
¡Espero que ayude!