Percorso trovare in un gioco 2D Java?

voti
6

Essenzialmente il suo un gioco di Pacman clone su cui sto lavorando. Ho un nemico di classe, e 4 istanze di questa classe creata, che rappresentano tutti 4 fantasmi del gioco.

Tutti i fantasmi start up nelle aree casuali dello schermo e poi devono farsi strada verso il personaggio pacman. Come il giocatore controlla il pacman, muovendolo, dovrebbero seguire e prendere la via più possibile verso di lui.

Non ci sono labirinto / ostacoli (ancora) in modo che l'intera mappa (400x400 pixel) è terreno aperto a loro.

Per il giocatore e ogni fantasma, posso recuperare la X, Y, larghezza e altezza attributi. Inoltre, ho già un algoritmo di rilevamento delle collisioni, quindi non sono preoccupato per questo, appena circa i fantasmi trovare la loro strada per pacman.

È pubblicato 08/03/2009 alle 06:14
fonte dall'utente
In altre lingue...                            


7 risposte

voti
0

Si potrebbe iniziare guardare A * (una stella)

E qui è una pagina che ha legami con altri algoritmi Percorso trovare.

[modifica] gah ... cervello è troppo lento ... dimenticato di questo libro, è C o C ++ (non ricordo quale), ma è ancora possibile ottenere i concetti per Java. Esso non può essere il modo più semplice per voi a leggere, ma non è male nel complesso. AI per gli sviluppatori del gioco da David M. Bourg, Glenn Seemann .

Risposto il 08/03/2009 a 06:17
fonte dall'utente

voti
12

Per un buon algoritmo di pathfinding, usando A * probabilmente sarebbe una buona idea, tuttavia, per un gioco semplice che non richiede sofisticate, efficienti, né efficace ricerca percorso, il fatto di avere i personaggi si muovono verso un bersaglio trovando la direzione di l'obiettivo dovrebbe essere sufficiente.

Ad esempio, la decisione di fare la mossa carattere, in pseudocodice:

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

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

Sì, il personaggio non ha intenzione di rendere il movimento più efficiente, ma otterrà sempre più vicino al bersaglio in ogni iterazione del ciclo di gioco.

E 'anche la mia ipotesi che un gioco arcade dai primi anni '80, probabilmente non sarebbe utilizzando sofisticati algoritmi di pathfinding.

Risposto il 08/03/2009 a 06:25
fonte dall'utente

voti
6

Se v'è solo una griglia di pixel - un "grande campo" su cui pacman e fantasma in grado di muoversi liberamente - poi il percorso più breve è facile - una linea retta tra il fantasma e il pacman.

Ma "percorso più breve" significa invariabilmente che stiamo cercando di risolvere un problema grafico-teoria. (Sto assumendo la conoscenza di grafici, alcuni teoria dei grafi, agg. Matrici, ecc!)

Nel caso di cui sopra, si consideri ogni pixel ad essere un nodo su un grafico. Ogni nodo è collegato ai suoi vicini da un bordo, e ciascun bordo ha uguali "peso" (passare al nodo "sopra" non è più lento di muoversi verso il nodo "sotto").

In modo da avere questo: ( "*" = node "-, /, \, |" = bordo)

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

Se Pacman è nel centro, si può passare a qualsiasi altro nodo molto facilmente.

Qualcosa di più vicino alla realtà potrebbe essere questo:

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

Ora, pacman non può muoversi in diagonale. Per andare dal centro verso il basso a destra richiede 2 "hop" piuttosto che uno.

Per continuare la progressione:

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

Ora, per passare da un nodo in mezzo ad un nodo in alto, avete bisogno di 3 luppolo. Tuttavia, a muoversi verso il fondo richiede solo 1 hop.

Sarebbe facile da tradurre qualsiasi preparazione del gioco di bordo in un grafico. Ogni "intersezione" è un nodo. Il percorso tra due incroci è un vantaggio, e la lunghezza del percorso che è il peso di quel bordo.

Entrare in un*. Costruendo un grafico (utilizzare una matrice adjency o un elenco di nodi), è possibile utilizzare l'algoritmo A * per trovare il percorso più breve. Altri algoritmi includono Dijkstra di. E molti altri! Ma prima è necessario per inquadrare il problema in termini di un grafico, e poi giocare con il modo devi andare dal nodo A (pacman) al nodo B (fantasma).

Spero possa aiutare!

Risposto il 08/03/2009 a 06:55
fonte dall'utente

voti
0

Credo che andare per l'algoritmo di percorso più breve ad ogni mossa fatta da pacman. Un ottimo implementazione è l'algoritmo di Dijkstra .

Giusto per ricapitolare: Visualizzare il labirinto come un grafico con vertici e spigoli. Ogni bordo ha un attesa (nel tuo caso tutti i bordi hanno lo stesso peso). L'algoritmo trova il percorso più breve dal vertice sorgente alla destinazione vertice muovendo un passo lungo ogni bordo raggiungibile immediato. Poi sul prossimo vertice si fa lo stesso e continuare a fare fino ad arrivare al bersaglio. Il primo percorso raggiunto è il percorso più breve. Ci possono essere molte ottimizzazioni fatte a questo algoritmo per accelerare le cose come tenendo conto, se il pacman era nella sua precedente posizione e in quale direzione si muoveva in modo che è possibile ottenere alcuni heiristics nell'algoritmo. Vorrei suggerire di trovare il percorso più breve da ogni fantasma pacman su ogni movimento e spostare il fantasma in quella direzione. Alla fine la distanza ridurrà e sarà in grado di catturare pacman.

Un'altra euristica che può essere usato per trovare tutti i bordi immediati raggiungibile da pacman e cercare di coprire il maggior numero di questi vertici il più possibile da fantasmi. Così, invece di impostare pacman come il vertice target fissato i vertici immediatetly raggiungibili da pacman come bersaglio, il risultato sarà che i fantasmi disponibili cercheranno di coprire themajor vie di fuga di Pacman e lo cattura.

Risposto il 08/03/2009 a 08:26
fonte dall'utente

voti
3

E 'stato un tempo molto lungo, ma dalla memoria i fantasmi di Pac-Man non ha fatto molto in termini di pathfinding. Farebbero un attraversamento randomizzato labirinto abbastanza standard fino a quando non "macchiati" di te, che ha coinvolto trovare un percorso senza ostacoli lungo l'asse di un corridoio verso di voi, e poi sarebbero passati direttamente verso di voi fino a quando non scomparve dalla loro linea di vista, dopo di che sarebbe riprendere un pattern casuale. Su livelli più elevati di Pac-Man avrebbe lasciato tracce invisibili dietro di lui per un po 'che i fantasmi sarebbero "odore" e, a volte seguire.

Quando Pac-Man ha un potere in su, l'unica differenza nell'algoritmo è che, quando si è notato, i fantasmi sarebbero fuggiti voi, invece di muoversi verso di voi.

Così, per un'esperienza autentica, probabilmente non è necessario un algoritmo di pathfinding molto sofisticato a tutti. Se si vuole essere di fantasia, naturalmente, è possibile implementare A *.

Risposto il 10/03/2009 a 09:11
fonte dall'utente

voti
2

Camminando direttamente verso i vostri nemici è un inizio, ma quando si aggiunge un labirinto ti consigliamo di aggiungere un po 'più intelligente pathfinding in modo che i fantasmi non rimanere bloccati in curva o vicoli ciechi.

Il seguente tutorial è una grande guida leggera per iniziare con A *, con esempi scaricabili.

Mappe Percorso trovare sulla base di Tile

Risposto il 12/03/2009 a 13:42
fonte dall'utente

voti
1

in Pacman tutti il ​​fantasma aveva un algoritmo diverso caccia

  • Blinky -> Chase. Di solito prendere la via più breve per voi, e tende a seguire.
  • Pinky -> imboscate. Tende a prendere un modo più indiretto per Pac-Man. Mortale. (Pinky e Blinky tendono a fare una scelta diversa quando si sceglie una direzione, spesso messa in gabbia il giocatore in un angolo)
  • Inky -> Freak. Questo tizio si comporta in modo strano. Si muove sul bordo abbastanza casuale, ma a volte insegue quando si mette nei stretta.
  • Clyde -> Idiot. Muove in modo casuale. Non più di una minaccia.

I fantasmi hanno un modello interessante programmato i loro movimenti: di tanto in tanto, saranno contemporaneamente cessare e desistere loro ricerca di Pac-Man e tornare ai loro rispettivi angoli del labirinto, inserendo "modalità di dispersione".

v'è una descrizione completa del algo al fascicolo pacman

Saluti

Guillaume

Risposto il 10/04/2009 a 15:59
fonte dall'utente

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