Αν έχετε μόνο ένα πλέγμα των pixels - ένα «μεγάλο πεδίο» στην οποία pacman και φάντασμα μπορεί να κινηθεί ελεύθερα - τότε η συντομότερη διαδρομή είναι εύκολη - μια ευθεία γραμμή μεταξύ το φάντασμα και το pacman.
Αλλά «συντομότερη διαδρομή» σημαίνει πάντα προσπαθούμε να λύσουμε ένα πρόβλημα γράφημα-θεωρία. (Υποθέτω γνώση των γραφημάτων, κάποια θεωρία γραφημάτων, adj. Μήτρες, κλπ!)
Στην παραπάνω περίπτωση, να εξετάσει κάθε pixel να είναι ένας κόμβος σε ένα γράφημα. Κάθε κόμβος συνδέεται με τους γείτονές της από μία ακμή, και κάθε άκρη έχει ίσο «βάρος» (κινείται προς τον κόμβο για «πάνω» δεν είναι βραδύτερη από κινείται προς τον κόμβο «κάτω»).
Έτσι έχετε αυτό: ( "*" = node, "-, /, \, |" = άκρη)
*-*-*
|\|/|
*-*-* ... (etc)
|/|\|
*-*-*
Αν Pacman είναι στο κέντρο, μπορεί να κινηθεί σε οποιοδήποτε άλλο κόμβο πολύ εύκολα.
Κάτι πιο κοντά στην πραγματικότητα θα μπορούσε να είναι η εξής:
*-*-*
| | |
*-*-* ... (etc)
| | |
*-*-*
Τώρα, pacman δεν μπορεί να κινηθεί διαγώνια. Για να πάτε από το κέντρο προς τα κάτω δεξιά απαιτεί 2 «λυκίσκος» και όχι ένα.
Για να συνεχίσετε την εξέλιξη:
*-*-*-*
| | | |
| | | |
| | | |
*-*-*-*
| | | |
*-*-*-*
Τώρα, για να πάει από ένα κόμβο στη μέση σε έναν κόμβο στην κορυφή, θα πρέπει να έχετε 3 λυκίσκου. Ωστόσο, για να κινηθεί προς το κάτω μέρος διαρκεί μόνο 1 hop.
Θα ήταν εύκολο να μεταφράσει οποιαδήποτε ρύθμιση παιχνίδι του σκάφους σε ένα γράφημα. Κάθε «διασταύρωση» είναι ένας κόμβος. Η διαδρομή μεταξύ δύο διασταυρώσεις είναι μία ακμή, και το μήκος της εν λόγω διαδρομής είναι το βάρος του εν λόγω άκρου.
Εισάγετε Α *. Με την κατασκευή ενός γραφήματος (χρησιμοποιήστε ένα πλέγμα adjency ή μια λίστα των κόμβων), μπορείτε να χρησιμοποιήσετε το A * αλγόριθμο για να βρουν τη συντομότερη διαδρομή. Άλλοι αλγόριθμοι περιλαμβάνουν του Dijkstra. Και πολλοί άλλοι! Αλλά πρώτα πρέπει να πλαισιώσει το πρόβλημά σας από την άποψη ενός γραφήματος, και στη συνέχεια παιχνίδι με το πώς θέλετε να πάτε από τον κόμβο Α (pacman) στον κόμβο Β (φάντασμα).
Ελπίδα που βοηθά!