Obliczanie trajektorii pocisku wokół orbit przed strzelaniem

10

Buduję grę z Unity3D. To klon Gravity Wars . Zarówno wieże gracza, jak i AI strzelają do siebie pociski (podając zmienne Kąt i Moc), starając się nie rozbijać pocisków na planetach. Ale oto moje pytanie: jak zmusić AI do obliczenia mocy i kąta przed wystrzeleniem jego pocisku, biorąc również pod uwagę grawitację planety?

Onofrio
źródło

Odpowiedzi:

5

Taki system z wieloma ciałami będzie chaotyczny. Nie sądzę, że byłbyś w stanie rozwiązać równanie dla niego w czasie rzeczywistym. Najlepsze, co możesz mieć nadzieję, to znaleźć rozwiązanie za pomocą algorytmu genetycznego;

1: wyprodukuj liczbę (np. 100) losowych rozwiązań (kąt, pary mocy).

2: symuluj te rozwiązania.

3: jeśli którykolwiek z nich, trafi w cel (lub zbliży się wystarczająco blisko), Gotowe! w przeciwnym razie kontynuuj.

4: wybierz 10 najlepszych rozwiązań (takich, które kończą się najbliżej celu)

5: z tych 10 rozwiązań utwórz po 10 dzieci dla każdego, losowo dostosowując ich kąt i moc.

6: teraz masz 100 nowych rozwiązań, wróciłeś do kroku 2

Będziesz musiał ograniczyć liczbę iteracji, na wypadek gdyby nie było rozwiązania lub wyszukiwanie trwa zbyt długo.

Nawet takie podejście nie gwarantuje znalezienia dobrego rozwiązania, ponieważ; 1. rozwiązanie może nie istnieć 2. w chaotycznym systemie niewielkie zmiany rozwiązania mogą mieć ogromny wpływ na wynik

Rozpoznać
źródło
1

Powinieneś być w stanie zasymulować ujęcie bez rysowania go.

Następnie możesz powiedzieć, zasymuluj 10 strzałów, a następnie weź najbliższy z 10.

jgallant
źródło
0

Biorąc pod uwagę, że trajektoria pocisku opiera się na danych wejściowych Anglei Power, powinieneś być w stanie rozwiązać (uzyskać dokładną odpowiedź) z odwrotnego równania.

Podstawowe (psuedo) kroki AI są następujące:

  1. Wybierz losowy Powerpoziom. Nie ma znaczenia, jaka jest dokładna wartość (do pewnego stopnia), o ile mieści się w rozsądnym zakresie.
  2. Rozwiąż równanie (odwrócone od rzeczywistej ścieżki), aby uzyskać dokładne (możliwie jak najbliżej z podwójnymi) Angle.
  3. Wybierz (modyfikowalne) losowe przesunięcie od Angle, aby dostosować się do „ trudności ” AI.
  4. Wystrzel rakietę tak, jak postąpiłby gracz (losowo) Poweri (obliczono) Angle.

Oczywiście możesz po prostu strzelać AI na losowych poziomach dla obu wejść, co może dać ciekawe wyniki ...

Clockwork-Muse
źródło
Ta metoda ma idealny sens, gdy wszystko, co masz, to grawitacja prosto w dół i stały wiatr, ale czego używasz do „równania, aby podać dokładnie Angle”, gdy masz wiele ciał grawitacyjnych rozproszonych po całym wszechświecie? Ich siła zależy od twojej aktualnej pozycji. Niektóre ujęcia mogą nawet nie być możliwe.
John McDonald,
@John - jeśli strzał jest całkowicie niemożliwy ( pomijanie złego wyboru mocy wejściowej), istnieje poważny problem z twoim polem gry. W tego typu grach każdy z graczy powinien być wymienny na sztuczną inteligencję. To prawda, że ​​równania stają się bardziej skomplikowane (i z wieloma ciałami bardzo szybko), ale nadal powinno być to możliwe.
Clockwork-Muse,
Słusznie. Ale czy wiesz, czego byś użył do równania? Myślę, że właśnie dlatego to pytanie zostało stworzone.
John McDonald,
John ma rację: szukam tego równania.
Onofrio,
@Onofrio - Przepraszam, nie mam odpowiednich równań ... i wygląda na to, że potrzebujesz rachunku wielu zmiennych, aby zrobić to „poprawnie”.
Clockwork-Muse,
0

Co powiesz na to, aby uczynić to realistycznym, nie wymagając od nich obliczenia, ale zaczynając od zgadywania i odpowiednio dostosowując?

Kiedy grałem w Gravity Wars, właśnie to zrobiłem; zacznij od mocy pół losowej i dostosuj odpowiednio przyrostowo. W ciągu kilku zdjęć jesteś naprawdę blisko.

ashes999
źródło