Calea găsi într-un joc 2d Java?

voturi
6

În mod esențial un joc Pacman clona care lucrez. Am o clasă de inamic, și 4 instanțe ale acestei clase a creat toate acestea reprezentând 4 fantome ale jocului.

Toate fantomele pornesc în zone aleatorii ale ecranului și apoi ei trebuie să lucreze drumul lor spre caracterul pacman. În timp ce jucătorul controlează Pacman, deplasându-l în jurul valorii, acestea ar trebui să-l urmeze și să ia cel mai apropiat mod posibil spre el.

Nu există nici un labirint / obstacole (încă), astfel încât întreaga hartă (400x400 pixeli) este teren deschis pentru ei.

Pentru player-ul și fiecare fantomă, i se poate prelua X, Y, lățimea imaginii și atributele înălțime. De asemenea, am deja un algoritm de detectare de coliziune, astfel încât să nu îngrijorat de faptul că, doar despre fantome gasi drumul lor de a pacman.

Întrebat 08/03/2009 la 06:14
sursa de către utilizator
În alte limbi...                            


7 răspunsuri

voturi
0

Ai putea începe uita la A * (o stea)

Și aici este o pagină care are legături cu alți algoritmi de cale constatare.

[edit] Aaaaa ... creierul este prea lent ... a uitat despre această carte, este C sau C ++ (am uitat care), dar puteți obține în continuare conceptele pentru Java. Nu poate fi mai ușor pentru tine de a citi, dar nu este rău în ansamblu. AI pentru Game Developers de David M. Bourg, Glenn Seemann .

Publicat 08/03/2009 la 06:17
sursa de către utilizator

voturi
12

Pentru un algoritm pathfinding bun, folosind un * ar fi , probabil , o idee bună, cu toate acestea, pentru un joc simplu , care nu are nevoie de sofisticat, eficient, nici eficiente de căutare cale, pur și simplu , având caracterele muta spre o țintă de a afla direcția obiectivul ar trebui să fie suficientă.

De exemplu, decizia de a face mișcare de caractere, în pseudocod:

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

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

Da, personajul nu se va face cel mai eficient mișcarea, dar se va apropia și mai aproape de ținta pe fiecare iterație a buclei de joc.

Este, de asemenea, cred mea că un joc arcade de la inceputul anilor '80, probabil, nu ar fi folosind algoritmi pathfinding sofisticate.

Publicat 08/03/2009 la 06:25
sursa de către utilizator

voturi
6

Dacă aveți doar o grilă de pixeli - un „câmp mare“ pe care PacMan și fantoma să se poată deplasa liber - atunci calea cea mai scurtă este ușor - o linie dreaptă între fantoma și Pacman.

Dar „calea cea mai scurtă“ înseamnă invariabil încercăm să rezolve o problemă grafic-teorie. (Sunt presupunând cunoștințe de grafice, unele teoria grafurilor, adj. Matrici, etc!)

În cazul de mai sus, ia în considerare fiecare pixel pentru a fi un nod pe un grafic. Fiecare nod este conectat cu vecinii săi de o margine, iar fiecare muchie are egal „greutate“ (se deplasează la nodul pe „sus“ nu este mai lent decât trecerea la nodul „de mai jos“).

Deci, aveți acest lucru: ( "*" = nod, "-, /, \, |" = margine)

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

Dacă Pacman este în centru, se poate muta în orice alt nod foarte ușor.

Ceva mai aproape de realitate ar putea fi aceasta:

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

Acum, Pacman nu se pot deplasa pe diagonală. Pentru a trece de la centru spre dreapta jos necesită 2 „hamei“, mai degrabă decât unul.

Pentru a continua progresia:

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

Acum, pentru a trece de la un nod în mijlocul unui nod în partea de sus, aveți nevoie de 3 hamei. Cu toate acestea, să se deplaseze spre partea de jos durează doar 1 hop.

Ar fi ușor să traducă orice configurare joc de bord într-un grafic. Fiecare „intersecție“ este un nod. Calea dintre două intersecții este o margine, iar lungimea această cale este greutatea acelei margini.

Introduceți o *. Prin construirea unui grafic (utilizați o matrice adjency sau o listă de noduri), puteți utiliza A * algoritm pentru a găsi calea cea mai scurtă. Alți algoritmi includ lui Dijkstra. Și multe altele! Dar, mai întâi, trebuie să încadrați problema în ceea ce privește un grafic, și apoi jucărie cu modul în care ai merge de la nodul A (PacMan) la nodul B (fantomă).

Sper că vă ajută!

Publicat 08/03/2009 la 06:55
sursa de către utilizator

voturi
0

Cred că merge pentru cel mai scurt algoritmul de cale la fiecare mișcare făcută de pacman. O implementare foarte bună este algoritmul lui Dijkstra .

Doar pentru a rezuma: Vizualizați labirint ca un grafic cu noduri și muchii. Fiecare muchie are o așteptare (în cazul dumneavoastră toate marginile au aceeași greutate). Algoritmul gaseste calea cea mai scurtă de la Vertice sursă la țintă Vertice prin deplasarea cu un pas în jos fiecare margine accesibil imediat. Apoi, pe următoarea Vértice ai face același lucru și face în continuare până să ajungi la țintă. Prima cale a ajuns este calea cea mai scurtă. Pot exista mai multe optimizări făcute acestui algoritm pentru a accelera lucrurile, cum ar fi luarea în considerare în cazul în care a fost pacman în poziția sa anterioară și în ce direcție a mutat, astfel încât să puteți obține niște heiristics în algoritmul. Aș sugera găsirea calea cea mai scurtă de la fiecare fantomă la PacMan pe fiecare mișcare și pentru a muta fantoma în acea direcție. În cele din urmă distanța va reduce și va fi capabil de a captura pacman.

O altă euristică, care poate fi folosit pentru a găsi toate marginile imediat accesibile prin pacman și să încerce să acopere cât mai multe dintre aceste noduri care este posibil prin fantome. Deci, în loc de a stabili pacman ca Vértice țintă am stabilit nodurile immediatetly ca poate ajunge cu un PacMan țintă, rezultatul va fi că fantomele disponibile vor încerca să acopere themajor căi de evacuare de PacMan și să-l prind.

Publicat 08/03/2009 la 08:26
sursa de către utilizator

voturi
3

A trecut foarte mult timp, dar din memorie fantomele din Pac-Man nu a făcut mult în modul de Pathfinding. Ei ar face-o destul de standard traversal labirint randomizat, până când „reperat“ tu, care a implicat găsirea unui traseu liber de-a lungul axei unui coridor spre tine, iar apoi s-ar muta direct spre tine până când a dispărut de la linia lor de vedere, după care ei ar relua un model aleatoriu. La niveluri mai ridicate Pac-Man ar lasă urme invizibile din spatele lui pentru o vreme că fantomele vor „mirosi“ și, uneori, urmați.

Când Pac-Man a primit o putere în sus, singura diferență în algoritmul este că, atunci când te reperat, fantomele te-ar fugi în loc să mute spre tine.

Deci, pentru o experiență autentică, probabil că nu au nevoie de un algoritm foarte sofisticat Pathfinding la toate. Dacă doriți să fie fantezie, desigur, puteți implementa o *.

Publicat 10/03/2009 la 09:11
sursa de către utilizator

voturi
2

Mersul pe jos direct către dușmanii tăi este un început, dar atunci când adăugați un labirint veți dori să adăugați Pathfinding un pic mai inteligent astfel încât fantome dvs. să nu fie blocat în curbe sau se termină mort.

Acest program de instruire este un mare ghid ușor pentru a începe cu A *, cu exemple care pot fi descărcate.

Harta Path Găsirea pe placi de ceramica bazate

Publicat 12/03/2009 la 13:42
sursa de către utilizator

voturi
1

în Pacman toate fantoma a avut un algoritm diferit de alungare

  • Blinky -> Urmăriri. Va dura, de obicei, cel mai scurt drum spre tine, și tinde să urmeze.
  • Pinky -> Ambuscade. Tinde să ia o cale ocolitoare la Pac-Man. Mortal. (Pinky și Blinky au tendința de a face o alegere diferită atunci când aleg o direcție, de multe ori cuștile player-ul într-un colț)
  • Tuș -> ciudat. Acest tipule acționează în mod ciudat. El se mută cu privire la bord destul de aleatoriu, dar, uneori, urmăriri atunci când el devine în strânsă.
  • Clyde -> Idiot. Mută ​​la întâmplare. Nu este mult de o amenințare.

Fantomele au un model interesant programat în mișcările lor: ocazional, ele vor înceta simultan și desist urmărirea lor de Pac-Man și a reveni la colțurile lor respective din labirint, intră „în modul de dispersie“.

există o descriere completă a algo la dosar pacman

Salutari

Guillaume

Publicat 10/04/2009 la 15:59
sursa de către utilizator

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