Path εύρεση σε Java 2D παιχνίδι;

ψήφοι
6

Ουσιαστικά της ένα pacman κλώνος παιχνίδι δουλεύω. Έχω μια τάξη Enemy, και 4 περιπτώσεις αυτής της κατηγορίας δημιουργήθηκαν τα οποία όλα αντιπροσωπεύουν 4 φαντάσματα του παιχνιδιού.

Όλα τα φαντάσματα ξεκινήσει σε τυχαία σημεία της οθόνης και, στη συνέχεια, θα πρέπει να συνεχίσουν την πορεία τους προς το χαρακτήρα pacman. Καθώς ο παίκτης ελέγχει το pacman, κινείται γύρω, θα πρέπει να το ακολουθήσουν και να πάρει το πλησιέστερο δυνατό τρόπο προς αυτόν.

Δεν υπάρχουν λαβύρινθο / εμπόδια (ακόμα), έτσι ώστε το σύνολο του χάρτη (400x400 pixels) είναι ανοιχτό έδαφος σε αυτούς.

Για τον παίκτη και κάθε φάντασμα, μπορώ να ανακτήσετε το Χ, Υ, πλάτος εικόνας και τα χαρακτηριστικά ύψος. Επίσης, έχω ήδη έναν αλγόριθμο ανίχνευσης σύγκρουσης, οπότε δεν ανησυχώ γι 'αυτό, ακριβώς για τα φαντάσματα βρίσκουν το δρόμο τους για να pacman.

Δημοσιεύθηκε 08/03/2009 στις 06:14
πηγή χρήστη
Σε άλλες γλώσσες...                            


7 απαντήσεις

ψήφοι
0

Θα μπορούσατε να αρχίσετε να ψάχνετε σε Α * (Ένα αστέρι)

Και εδώ είναι μια σελίδα που έχει συνδέσμους προς άλλους αλγορίθμους πορεία εύρεση.

[Επεξεργασία] gah ... εγκέφαλος είναι πολύ αργά ... ξέχασε για αυτό το βιβλίο, είναι C ή C ++ (ξεχάσω το οποίο), αλλά μπορείτε να πάρετε τις έννοιες για Java. Μπορεί να μην είναι το πιο εύκολο για σας να διαβάσει, αλλά δεν είναι κακό συνολικά. AI για την ανάπτυξη παιχνιδιών από τον David M. Bourg, Glenn Seemann .

Απαντήθηκε 08/03/2009 στις 06:17
πηγή χρήστη

ψήφοι
12

Για έναν καλό αλγόριθμο pathfinding, χρησιμοποιώντας μια * θα μπορούσε πιθανότατα να είναι μια καλή ιδέα, ωστόσο, για ένα απλό παιχνίδι που δεν απαιτεί εξελιγμένες, αποτελεσματική, ούτε αποτελεσματική αναζήτηση διαδρομής, απλά έχουν οι χαρακτήρες κινούνται προς ένα στόχο, με τον εντοπισμό της κατεύθυνσης της ο στόχος θα πρέπει να είναι επαρκής.

Για παράδειγμα, η απόφαση να κάνει την κίνηση του χαρακτήρα, σε ψευδοκώδικα:

if (target is to the left of me):
    move(left);
else
    move(right);

if (target is above me):
    move(up);
else
    move(down);

Ναι, ο χαρακτήρας δεν πρόκειται να κάνει την πιο αποτελεσματική κίνηση, αλλά θα πάρει όλο και πιο κοντά στο στόχο σε κάθε επανάληψη του βρόχου παιχνίδι.

Είναι, επίσης, η εικασία μου είναι ότι ένα arcade παιχνίδι από τις αρχές της δεκαετίας του '80 κατά πάσα πιθανότητα δεν θα πρέπει να χρησιμοποιούν περίπλοκους αλγορίθμους pathfinding.

Απαντήθηκε 08/03/2009 στις 06:25
πηγή χρήστη

ψήφοι
6

Αν έχετε μόνο ένα πλέγμα των pixels - ένα «μεγάλο πεδίο» στην οποία pacman και φάντασμα μπορεί να κινηθεί ελεύθερα - τότε η συντομότερη διαδρομή είναι εύκολη - μια ευθεία γραμμή μεταξύ το φάντασμα και το pacman.

Αλλά «συντομότερη διαδρομή» σημαίνει πάντα προσπαθούμε να λύσουμε ένα πρόβλημα γράφημα-θεωρία. (Υποθέτω γνώση των γραφημάτων, κάποια θεωρία γραφημάτων, adj. Μήτρες, κλπ!)

Στην παραπάνω περίπτωση, να εξετάσει κάθε pixel να είναι ένας κόμβος σε ένα γράφημα. Κάθε κόμβος συνδέεται με τους γείτονές της από μία ακμή, και κάθε άκρη έχει ίσο «βάρος» (κινείται προς τον κόμβο για «πάνω» δεν είναι βραδύτερη από κινείται προς τον κόμβο «κάτω»).

Έτσι έχετε αυτό: ( "*" = node, "-, /, \, |" = άκρη)

*-*-*
|\|/|
*-*-*  ... (etc)
|/|\|
*-*-* 

Αν Pacman είναι στο κέντρο, μπορεί να κινηθεί σε οποιοδήποτε άλλο κόμβο πολύ εύκολα.

Κάτι πιο κοντά στην πραγματικότητα θα μπορούσε να είναι η εξής:

*-*-*
| | |
*-*-*  ... (etc)
| | |
*-*-* 

Τώρα, pacman δεν μπορεί να κινηθεί διαγώνια. Για να πάτε από το κέντρο προς τα κάτω δεξιά απαιτεί 2 «λυκίσκος» και όχι ένα.

Για να συνεχίσετε την εξέλιξη:

*-*-*-*
| | | |
| | | |
| | | |
*-*-*-*
| | | |
*-*-*-*

Τώρα, για να πάει από ένα κόμβο στη μέση σε έναν κόμβο στην κορυφή, θα πρέπει να έχετε 3 λυκίσκου. Ωστόσο, για να κινηθεί προς το κάτω μέρος διαρκεί μόνο 1 hop.

Θα ήταν εύκολο να μεταφράσει οποιαδήποτε ρύθμιση παιχνίδι του σκάφους σε ένα γράφημα. Κάθε «διασταύρωση» είναι ένας κόμβος. Η διαδρομή μεταξύ δύο διασταυρώσεις είναι μία ακμή, και το μήκος της εν λόγω διαδρομής είναι το βάρος του εν λόγω άκρου.

Εισάγετε Α *. Με την κατασκευή ενός γραφήματος (χρησιμοποιήστε ένα πλέγμα adjency ή μια λίστα των κόμβων), μπορείτε να χρησιμοποιήσετε το A * αλγόριθμο για να βρουν τη συντομότερη διαδρομή. Άλλοι αλγόριθμοι περιλαμβάνουν του Dijkstra. Και πολλοί άλλοι! Αλλά πρώτα πρέπει να πλαισιώσει το πρόβλημά σας από την άποψη ενός γραφήματος, και στη συνέχεια παιχνίδι με το πώς θέλετε να πάτε από τον κόμβο Α (pacman) στον κόμβο Β (φάντασμα).

Ελπίδα που βοηθά!

Απαντήθηκε 08/03/2009 στις 06:55
πηγή χρήστη

ψήφοι
0

Νομίζω ότι πάμε για τη συντομότερη διαδρομή αλγόριθμο σε κάθε κίνηση γίνεται από pacman. Μια πολύ καλή εφαρμογή είναι ο αλγόριθμος του Dijkstra .

Ακριβώς για να συνοψίσουμε: Κοίτα το λαβύρινθο και ένα γράφημα με κορυφές και ακμές. Κάθε πλευρά έχει αναμονής (στην περίπτωσή σας όλες οι πλευρές έχουν το ίδιο βάρος). Ο αλγόριθμος βρίσκει τη συντομότερη διαδρομή από vertice πηγή να στοχεύσετε vertice με τη μετακίνηση ένα βήμα κάτω από κάθε άμεση προσβάσιμο άκρη. Στη συνέχεια, την επόμενη vertice θα κάνουν το ίδιο και να συνεχίσουμε να κάνουμε μέχρι να φτάσετε στο στόχο. Η πρώτη διαδρομή που επιτεύχθηκε είναι η συντομότερη διαδρομή. Μπορεί να υπάρχουν πολλές βελτιστοποιήσεις γίνει σε αυτόν τον αλγόριθμο για να επιταχύνει τα πράγματα όπως λαμβάνοντας υπόψη, όπου ο pacman ήταν στην προηγούμενη θέση του και προς ποια κατεύθυνση θα κινηθεί ώστε να μπορείτε να πάρετε κάποια heiristics στον αλγόριθμο. Θα ήθελα να προτείνω να βρουν τη συντομότερη διαδρομή από κάθε φάντασμα στο pacman σε κάθε κίνηση και να μετακινήσετε το φάντασμα προς αυτή την κατεύθυνση. Τελικά η απόσταση θα μειώσει και θα είστε σε θέση να πιάσει pacman.

Μια άλλη ευρετική που μπορεί να χρησιμοποιήσει για να βρείτε όλες τις άμεσες άκρες προσβάσιμο από το pacman και να προσπαθήσουμε να καλύψει όσες από αυτές τις κορυφές όσο το δυνατόν από φαντάσματα. Έτσι, αντί για τη pacman ως vertice στόχο που θέσαμε τις κορυφές immediatetly προσβάσιμο από pacman ως στόχο, το αποτέλεσμα θα είναι ότι οι διαθέσιμες φαντάσματα θα προσπαθήσει να καλύψει έως και οδούς διαφυγής themajor του pacman και να τον πιάσει.

Απαντήθηκε 08/03/2009 στις 08:26
πηγή χρήστη

ψήφοι
3

Έχει περάσει πολύ μεγάλο χρονικό διάστημα, αλλά από τη μνήμη τα φαντάσματα στο Pac-Man δεν κάνει πολύ με τον τρόπο του pathfinding. Θα κάνουμε μια αρκετά πρότυπο διάσχιση τυχαιοποιημένη λαβύρινθο μέχρι να «εντοπίσει» σας, στην οποία συμμετείχαν εξεύρεση ανεμπόδιστη διαδρομή κατά μήκος του άξονα του διαδρόμου προς το μέρος σας, και στη συνέχεια θα κινηθεί άμεσα προς το μέρος σας μέχρι να εξαφανιστεί από τη γραμμή τους επαφή, οπότε θα θα επαναλάβει ένα τυχαίο μοτίβο. Σε υψηλότερα επίπεδα Pac-Man θα αφήσει αόρατα ίχνη πίσω του για μια στιγμή ότι τα φαντάσματα θα «μυρίζει» και μερικές φορές ακολουθούν.

Όταν Pac-Man πήρε μια δύναμη επάνω, η μόνη διαφορά στον αλγόριθμο είναι ότι, όταν σας εντοπίσει, τα φαντάσματα θα φύγουν, αντί να κινείται προς το μέρος σας.

Έτσι, για μια αυθεντική εμπειρία, τότε μάλλον δεν χρειάζονται ένα πολύ εξελιγμένο αλγόριθμο pathfinding καθόλου. Αν θέλετε να είναι φανταχτερό, φυσικά, μπορείτε να εφαρμόσετε μια *.

Απαντήθηκε 10/03/2009 στις 09:11
πηγή χρήστη

ψήφοι
2

Περπατώντας απευθείας προς τους εχθρούς σας είναι μια αρχή, αλλά όταν προσθέτετε ένα λαβύρινθο που θα θελήσετε να προσθέσετε λίγο πιο έξυπνος pathfinding έτσι φαντάσματα σας να μην κολλήσουν στις στροφές ή αδιέξοδα.

Το ακόλουθο σεμινάριο είναι μια μεγάλη ελαφρύ οδηγός για να ξεκινήσετε με το Α *, με δυνατότητα λήψης παραδείγματα.

Path εύρεση για Tile βασίζονται Χάρτες

Απαντήθηκε 12/03/2009 στις 13:42
πηγή χρήστη

ψήφοι
1

στο Pacman όλο το φάντασμα είχε ένα διαφορετικό αλγόριθμο κυνηγώντας

  • Blinky -> Chases. Θα λαμβάνουν συνήθως τη συντομότερη διαδρομή για εσάς, και τείνει να ακολουθήσει.
  • Pinky -> ενέδρες. Τείνει να λάβει μια πιο έμμεσο τρόπο για να pac-man. Θανάσιμα. (Ροζ και Blinky τείνουν να κάνουν διαφορετικές επιλογές κατά την επιλογή ενός κατεύθυνση, συχνά εγκλωβισμός τον παίκτη σε μια γωνιά)
  • Μελανωμένος -> φρικιό. Αυτό το μάγκα ενεργεί παράξενα. Κινείται για το διοικητικό συμβούλιο αρκετά τυχαία, αλλά μερικές φορές κυνηγά όταν παίρνει σε στενή.
  • Clyde -> ηλίθιος. Μετακινεί τυχαία. Δεν είναι ένα μεγάλο μέρος μιας απειλής.

Τα φαντάσματα έχουν μια ενδιαφέρουσα πορεία που έχει προγραμματιστεί στη κινήσεις τους: μερικές φορές, θα σταματήσουν ταυτόχρονα και να απέχουν προσπάθειά τους Pac-Man και να επιστρέψει στις αντίστοιχες γωνίες τους από το λαβύρινθο, πληκτρολογώντας «κατάσταση διασποράς».

υπάρχει μια πλήρης περιγραφή του algo στο φάκελο pacman

Χαιρετισμοί

Guillaume

Απαντήθηκε 10/04/2009 στις 15:59
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more