Als je gewoon een raster van pixels - een "big field" waarop pacman en ghost kunnen zich vrij bewegen - dan is de kortste weg gemakkelijk - een rechte lijn tussen de geest en de pacman.
Maar "de kortste weg" betekent steevast we proberen om een grafiek-theorie probleem op te lossen. (Ik neem aan dat de kennis van grafieken, sommige grafentheorie, adj. Matrices, etc!)
In het geval hierboven, overwegen elke pixel naar een knooppunt op een grafiek komen. Elk knooppunt is verbonden met zijn buren door een rand, en elke rand heeft gelijk "weight" (overgang naar het knooppunt "boven" niet langzamer beweegt dan het knooppunt "onder").
Dus je hebt dit: ( "*" = knooppunt, "-, /, \, |" = rand)
*-*-*
|\|/|
*-*-* ... (etc)
|/|\|
*-*-*
Als pacman ligt in het centrum, kan het heel gemakkelijk naar een ander knooppunt.
Iets dichter bij de werkelijkheid dan kan dit worden:
*-*-*
| | |
*-*-* ... (etc)
| | |
*-*-*
Nu, pacman kan niet diagonaal bewegen. Om van het midden naar de rechterbenedenhoek vereist 2 "hop" in plaats van één.
Om de progressie voort te zetten:
*-*-*-*
| | | |
| | | |
| | | |
*-*-*-*
| | | |
*-*-*-*
Nu, om te gaan van een knooppunt in het midden om een knooppunt aan de top, moet je 3 hop. Echter, om te bewegen in de richting van de bodem duurt slechts 1 hop.
Het zou gemakkelijk zijn om een game-board setup te zetten in een grafiek. Elke "kruising" is een knooppunt. Het pad tussen twee snijpunten is een rand en de lengte van die baan is het gewicht van die rand.
Voer A *. Door de aanleg van een grafiek (gebruik een adjency matrix of een lijst van nodes), kunt u de A * algoritme gebruiken om de kortste weg te vinden. Andere algoritmes Dijkstra. En vele anderen! Maar eerst moet u uw probleem in termen van een grafiek, en vervolgens speelgoed omlijsten met hoe je zou gaan van knooppunt A (pacman) naar knooppunt B (spook).
Hoop dat het helpt!