Sti finne i en Java 2d spill?

stemmer
6

I hovedsak sin en pacman klone spillet jeg jobber med. Jeg har en fiende klasse, og 4 forekomster av denne klasse er laget som alle representerer 4 ghosts av spillet.

Alle spøkelser starte opp i tilfeldige områder på skjermen, og så må de jobbe seg mot pacman karakter. Som spiller styrer pacman, flytte den rundt, bør de følge den og ta den nærmeste mulig måte mot ham.

Det er ingen labyrint / hindringer (ennå), slik at hele kartet (400x400 piksler) er åpne bakken for dem.

For spilleren og hver ånd, kan jeg hente X, Y, bildebredde og høyde attributter. Også, jeg har allerede en kollisjon algoritme, så ikke bekymret for det, bare om spøkelser finne veien til pacman.

Publisert på 08/03/2009 klokken 05:14
kilden bruker
På andre språk...                            


7 svar

stemmer
0

Du kan begynne å se på A * (A star)

Og her er en side som har linker til andre Sti finne algoritmer.

[rediger] gah ... hjernen er for treg ... glemte denne boken, det er C eller C ++ (jeg glemmer som), men du kan fortsatt få konsepter for Java. Det er kanskje ikke det enkleste for deg å lese, men er ikke dårlig samlet. AI for Game Developers av David M. Bourg, Glenn Seemann .

Svarte 08/03/2009 kl. 05:17
kilden bruker

stemmer
12

For en god pathfinding algoritme, ved hjelp av A * vil trolig være en god idé, men for et enkelt spill som ikke krever avansert, effektiv, eller effektiv vei å søke, bare å ha karakterene beveger seg mot et mål ved å finne ut retningen bør målet være tilstrekkelig.

For eksempel vil avgjørelsen gjøre karakteren farten, i pseudokode:

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

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

Ja, er tegnet ikke kommer til å få mest mulig effektiv bevegelse, men det vil komme nærmere og nærmere målet på hver iterasjon av spillet loop.

Det er også min gjetning at et arkadespill fra tidlig 80-tallet sannsynligvis ikke ville være ved hjelp av avanserte pathfinding algoritmer.

Svarte 08/03/2009 kl. 05:25
kilden bruker

stemmer
6

Hvis du bare har et rutenett av piksler - en "big-feltet" som pacman og spøkelse kan bevege seg fritt - da den korteste veien er enkelt - en rett linje mellom gjenferdet og Pacman.

Men "korteste veien" alltid betyr at vi prøver å løse en graf-teori problem. (Jeg antar kunnskap om grafer, noen grafteori, adj. Matriser, etc!)

I tilfellet ovenfor, vurdere hver piksel til en node på et diagram. Hver node er koplet til sine naboer ved en kant, og hver kant har lik "vekt" (flytting til noden "ovenfor" er ikke tregere enn å flytte til noden "under").

Så du har dette: ( "*" = node, "-, /, \, |" = kant)

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

Hvis Pacman er i sentrum, kan den flytte til en annen node veldig enkelt.

Noe mer nærmere virkeligheten kan være dette:

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

Nå pacman kan ikke flytte diagonalt. Å gå fra sentrum til nederste høyre krever 2 "hopp" i stedet for en.

For å fortsette utviklingen:

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

Nå, for å gå fra en node i midten til en node på toppen, trenger du 3 hopp. Men for å bevege seg mot bunnen tar bare ett hopp.

Det ville være lett å oversette alle spill-bord oppsett i en graf. Hver "skjæringspunkt" er en node. Banen mellom to krysninger er en kant, og lengden av denne banen er vekten av den kanten.

Tast A *. Ved å bygge en graf (bruk en adjency matrise eller en liste over noder), kan du bruke A * algoritmen for å finne den korteste veien. Andre algoritmer inkluderer Dijkstras. Og mange andre! Men først må du ramme inn problemet i form av en graf, og deretter leke med hvordan du vil gå fra node A (pacman) til node B (spøkelse).

Håper det hjelper!

Svarte 08/03/2009 kl. 05:55
kilden bruker

stemmer
0

Jeg tror gå for den korteste veien algoritmen på hver bevegelse gjort av Pacman. En veldig god gjennomføring er Dijkstras algoritme .

Bare for å oppsummere: Visual labyrinten som en graf med noder og kanter. Hver kant har en vente (i ditt tilfelle alle kanter har samme vekt). Algoritmen finner den korteste veien fra kilde vertice til målet vertice ved å bevege ett trinn ned hver umiddelbar nås kant. Deretter på neste vertice du gjør det samme, og holder på å gjøre før til du kommer til målet. Den første bane er nådd vil si den korteste vei. Det kan være mange optimaliseringer gjort til denne algoritmen for å øke hastigheten på ting som tar hensyn til hvor pacman var i sin tidligere stilling og i hvilken retning flyttet den slik at du kan få noen heiristics i algoritmen. Jeg vil foreslå å finne den korteste veien fra hver spøkelse til pacman på hver bevegelse og flytte spøkelset i den retningen. Omsider avstand vil redusere og du vil være i stand til å fange pacman.

En annen heuristisk som kan brukes til å finne alle de umiddelbare kanter nås fra pacman og prøver å dekke så mange av disse hjørnene som mulig av spøkelser. Så i stedet for å sette pacman som målet vertice vi satt hjørnene immediatetly nås med pacman som mål, vil resultatet være at de tilgjengelige spøkelser vil prøve å dekke opp themajor rømningsveier pacman og fange ham.

Svarte 08/03/2009 kl. 07:26
kilden bruker

stemmer
3

Det har vært en veldig lang tid, men fra minnet spøkelsene i Pac-Man gjorde ikke mye i veien for pathfinding. De ville gjøre en ganske standard randomisert labyrint traversering før de "oppdaget" deg, som involverte å finne fri sikt langs aksen av en korridor mot deg, og da ville de gå direkte mot deg til du forsvant fra deres linje av syne, hvorpå de ville gjenoppta et tilfeldig mønster. På høyere nivåer Pac-Man ville forlate usynlige stier bak ham en stund at spøkelsene ville "lukte" og noen ganger følge.

Når Pac-Man fikk en oppstart, den eneste forskjellen i algoritmen er at når de oppdaget deg, ville spøkelsene flykte deg i stedet for å bevege seg mot deg.

Så, for en autentisk opplevelse, har du sannsynligvis ikke trenger en veldig sofistikert pathfinding algoritme i det hele tatt. Hvis du ønsker å være fancy, selvfølgelig, kan du implementere A *.

Svarte 10/03/2009 kl. 08:11
kilden bruker

stemmer
2

Walking direkte mot dine fiender er en start, men når du legger til en labyrint du ønsker å legge litt smartere pathfinding slik at spøkelser ikke blir sittende fast i svinger eller blindveier.

Følgende tutorial er en stor lett veiledningen for å komme i gang med A *, med nedlastbare eksempler.

Sti finne på flis basert Maps

Svarte 12/03/2009 kl. 12:42
kilden bruker

stemmer
1

i Pacman alle spøkelset hadde en annen chasing algoritme

  • Blinky -> Chases. Vil vanligvis ta den korteste veien til deg, og har en tendens til å følge.
  • Pinky -> bakholdsangrep. Tendens til å ta en mer rundkjøring måte å Pac-Man. Dødelig. (Pinky og blinky tendens til å gjøre ulike valg når du velger en retning, ofte bur spilleren i et hjørne)
  • Inky -> Freak. Denne fyren virker merkelig. Han beveger seg på brettet ganske tilfeldig, men noen ganger jager når han får i tett.
  • Clyde -> Idiot. Flytter tilfeldig. Ikke mye av en trussel.

Spøkelsene har et interessant mønster programmert inn i sine bevegelser: noen ganger, vil de samtidig stanse og avstå sin jakt på Pac-Man og vende tilbake til sine respektive hjørner av labyrinten, skrive inn "scatter mode".

det er en full beskrivelse av algo på pacman dossier

hilsen

Guillaume

Svarte 10/04/2009 kl. 14:59
kilden bruker

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