Ścieżka znalezienie w gry 2D Java?

głosy
6

Zasadniczo jest to gra Pacman klon pracuję nad. Mam klasy wroga i 4 instancje tej klasy stworzonej które reprezentują 4 duchów w grze.

Wszystkie duchy zaczynają się w przypadkowych obszarach ekranu, a następnie muszą pracować drogę w kierunku znaku Pacman. Jako gracz steruje Pacman, przesuwając go dookoła, powinni śledzić go i wziąć najbliższą możliwą drogę ku niemu.

Nie ma labirynt / przeszkody (jeszcze), więc cała mapa (400x400 pikseli) jest otwartym terenie do nich.

Dla każdego gracza i Ducha, mogę pobrać X, Y, szerokość i wysokość obrazu atrybutów. Również mam już algorytm wykrywania kolizji, więc nie martwi się o to, tylko o duchy znajdują drogę do PacMan.

Utwórz 08/03/2009 o 06:14
źródło użytkownik
W innych językach...                            


7 odpowiedzi

głosy
0

Można zacząć patrząc na * (gwiazdką)

I o to strona , która zawiera linki do innych algorytmów ścieżki znalezienia.

[edit] gah ... Mózg jest zbyt powolny ... zapomniałem o tej książce, to C lub C ++ (nie pamiętam które), ale wciąż można dostać pojęcia Java. To może nie być najłatwiejsze do przeczytania, ale ogólnie nie jest źle. AI dla programistów gier David M. Bourg, Glenn Seemann .

Odpowiedział 08/03/2009 o 06:17
źródło użytkownik

głosy
12

Dla dobrego algorytmu pathfinding, używając A * będzie prawdopodobnie dobrym pomysłem, jednak na prostą grę, która nie wymaga wyrafinowanego, wydajne, ani skuteczne przeszukiwanie ścieżki, po prostu o postacie poruszać się w kierunku tarczy przez ustaleniu kierunku cel powinna być wystarczająca.

Na przykład, decyzja, aby przenieść znak, w Pseudokod:

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

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

Tak, postać nie będzie możliwie najbardziej efektywnego ruchu, ale będzie to bliżej i bliżej do celu na każdej iteracji pętli gry.

To również moje przypuszczenie, że gra zręcznościowa od wczesnych lat 80-tych prawdopodobnie nie będzie za pomocą zaawansowanych algorytmów Pathfinding.

Odpowiedział 08/03/2009 o 06:25
źródło użytkownik

głosy
6

Jeśli po prostu mieć siatkę pikseli - to „wielki” pole, na którym Pacman i duch może poruszać się swobodnie - to najkrótsza droga jest prosta - linia prosta pomiędzy duchem a Pacman.

Ale „najkrótsza droga” oznacza zawsze staramy się rozwiązać problem wykres teoria. (Zakładam, że znajomość teorii grafów, jakiś wykres, przym. Matryc itp!)

W powyższym przypadku, należy rozważyć każdy piksel być węzeł na wykresie. Każdy węzeł jest połączony z sąsiadami krawędzi, a każda krawędź jest równe „masy”, (ruchomy do węzła, „powyżej” nie jest mniejsza, niż ruchomy do węzła „poniżej”).

Więc masz to: ( "*" = node "-, /, \, |" = krawędź)

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

Jeśli Pacman jest w centrum, można go przenieść do innego węzła bardzo łatwo.

Coś bardziej bliższe rzeczywistości może być to:

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

Teraz pacman nie może poruszać się po przekątnej. Aby przejść od środka do prawej dolnej wymaga 2 „chmielu”, zamiast jednego.

Aby kontynuować postęp:

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

Teraz, aby przejść od węzła w środku do węzła na górze, trzeba 3 chmielu. Jednak, aby poruszać się w kierunku dna trwa tylko 1 hopu.

Łatwo byłoby przetłumaczyć dowolną konfigurację gra wyżywienie w postaci wykresu. Każdy „skrzyżowanie” jest węzłem. Ścieżka między dwoma skrzyżowaniami jest krawędzią, a długość tej ścieżki jest masa tej krawędzi.

Wprowadź a*. Konstruując wykres (użyj matrycę adjency lub listę węzłów), można użyć algorytm A *, aby znaleźć najkrótszą drogę. Inne algorytmy to Dijkstry. I wiele innych! Ale najpierw trzeba oprawić swój problem z punktu widzenia wykresu, a następnie bawić się jak chcesz iść z węzła A (pacman) do węzła B (ducha).

Nadzieję, że pomoże!

Odpowiedział 08/03/2009 o 06:55
źródło użytkownik

głosy
0

Myślę pójść na najkrótszej ścieżki algorytm na każdy ruch wykonany przez Pacman. Bardzo dobra realizacja jest Algorytm Dijkstry .

Wystarczy, aby podsumować: Wizualizacja labirynt jako wykres z wierzchołków i krawędzi. Każda krawędź ma czekać (w przypadku wszystkie krawędzie mają taką samą wagę). Algorytm znajduje najkrótszą drogą od źródła vértice kierować vértice przesuwając jeden krok na każdej krawędzi najbliższej osiągalny. Wtedy na następnej vértice zrobić to samo i ciągle robi aż do dostać się do celu. Pierwsza ścieżka osiągnął to najkrótsza droga. Istnieje wiele optymalizacje zrobić, aby tego algorytmu, aby przyspieszyć rzeczy jak uwzględnieniem gdzie pacman było w poprzedniej pozycji i w którym kierunku przeniósł się więc, że można dostać kilka heiristics w algorytmie. Proponuję znalezienie najkrótszej drogi z każdego Ghost Pacman w każdym ruchu i przenieść ducha w tym kierunku. Ostatecznie odległość zmniejszy i będzie można złapać Pacman.

Innym heurystyczne, które mogą być wykorzystywane go znaleźć wszystkie natychmiastowych krawędzie osiągalny z pacmana i starają się pokryć jak wiele z tych wierzchołków, jak to możliwe przez duchy. Więc zamiast ustawiania Pacman jako vértice docelowej Ustawiamy wierzchołki immediatetly dojechać Pacman jako cel, wynik będzie, że dostępne będą duchy starają się zatuszować themajor dróg ewakuacyjnych Pacman i go złapać.

Odpowiedział 08/03/2009 o 08:26
źródło użytkownik

głosy
3

To było bardzo dawno, ale z pamięci duchy w Pac-Man nie zrobił wiele w drodze odnajdywania ścieżki. zrobiliby dość standardowy randomizowane labirynt przechodzenie aż „zauważony” Ci, których udział znalezienie niezakłócony ścieżką wzdłuż osi korytarza wobec ciebie, a wtedy oni przejść bezpośrednio do siebie, dopóki nie zniknął z ich linii wzroku, po czym oni wznowi losowy wzór. Na wyższych poziomach Pac-Man będzie zostawić za sobą ślady niewidoczne na chwilę, że duchy to „zapach”, a czasami naśladowania.

Kiedy Pac-Man ma moc do góry, a jedyna różnica w algorytmie jest to, że kiedy cię zauważony, duchy ucieknie ci zamiast przenosić do siebie.

Tak więc, na autentyczne doświadczenie, to prawdopodobnie nie potrzebują bardzo skomplikowany algorytm pathfinding wcale. Jeśli chcesz być wyobraźnia, oczywiście, można wdrożyć A *.

Odpowiedział 10/03/2009 o 09:11
źródło użytkownik

głosy
2

Chodzenie bezpośrednio w kierunku swoich wrogów to początek, ale po dodaniu labirynt będziemy chcieli dodać nieco mądrzejszy Pathfinding więc wasze duchy nie utknąć w zakrętach i ślepych zaułków.

Poniższy poradnik jest doskonałym lekkie przypomnienie zacząć z A *, z pobrania przykładów.

Płytka ścieżka Znalezienie na podstawie mapy

Odpowiedział 12/03/2009 o 13:42
źródło użytkownik

głosy
1

w Pacman cały duch miał inny algorytm Chasing

  • Psotny -> potyczki. Trwa zwykle najkrótszą drogę do ciebie, i ma tendencję do naśladowania.
  • Pinky -> zasadzki. Dąży do przyjęcia bardziej okrężną drogę do Pac-Man. Śmiertelnie. (Pinky i Psotny tendencję do innego wyboru przy wyborze kierunku, często klatkach odtwarzacza w rogu)
  • Atramentowy -> Freak. Ten koleś działa dziwnie. Porusza się o płycie dość przypadkowo, ale czasami goni kiedy dostaje się w zamknięciu.
  • Clyde -> Idiot. Porusza się losowo. Nie większego zagrożenia.

Duchy mają ciekawy wzór zaprogramowany do swoich ruchów: od czasu do czasu, będą one jednocześnie zaprzestania ich wykonywania Pac-Man i powrócić do swoich narożników labiryntu, wprowadzając „tryb punktowy”.

znajduje się pełny opis algo w dokumentacji pacman

pozdrowienia

Guillaume

Odpowiedział 10/04/2009 o 15:59
źródło użytkownik

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