czuję się wywołany do tablicy więc odpowiem jak to działało w OpenFire. Będę pisał mocno ogólnie, bo jak nie teraz to może się to przydać później. Prawdopodobnie będzie Ci potrzebna tylko jedna wskazówka albo dwie z tych nastu poniżej. ;)
- widok z góry, ruch mam w 128 możliwych kątach, bardzo mocno to możesz uprościć jak masz tylko 4 kąty (lewo-prawo-góra-dół)
- każda mapa ma węzły po których czołg potencjalnie może jeździć - np. skrzyżowania dróg, punkty zakrętowe itd. Trasowanie to było wyznaczenie trasy między węzłami.
- każdy węzeł musi pamiętać z którymi węzłami się łączy. To Ci pozwala zamodelować omijanie ścian, jeziorek, czegokolwiek.
- jak masz niszczejący teren (np. mury które można rozwalić) to to powinno dodawać nowe węzły żeby AI mogło trasować po nowych skrótach
- na tak przygotowane dane wrzucasz jakikolwiek algorytm trasowania, np.
A* - trochę mordęgi z napisaniem tego jest, ale warto.
- samo trasowanie mam napisane tak, że nie ustala całej nowej trasy jak jej potrzebuje, tylko jedna klatka gry liczy to przez max 2ms i wraca do tego w kolejnej jak trzeba. Dzięki temu gra się nie zacina bo AI sobie musi coś policzyć.
- strzelanie do przeciwników to nic innego jak sprawdzanie czy na obecnej pozycji przeciwnik znajduje się odpowiednio blisko. I teraz, zależnie czy wieżyczka jest sterowana niezależnie od podwozia albo nie przerywasz ruchu i strzelasz do gracza, albo zatrzymujesz się, celujesz i strzelasz.
Pojawia się też problem "uczciwości AI":
- kod można zorganizować tak że masz tam po prostu kilku graczy - część dostaje input z dżoja/klawy a część z AI
- AI wypracowuje sterowanie kierunkami i fajerem na bazie tego co się dzieje na mapie. Dzięki temu przeciwnik gra co najwyżej tak dobrze jak bardzo dobry gracz
- pozostaje jeszcze kwestia zasięgu widzenia i znajomości tego co dzieje się na całej mapie, zwłaszcza jeśli jest ona scrollowana.
- tak jest zrobione AI w mojej grze germz, do tego stopnia że nawet zaznaczanie jednostek jest zrobione przez takie sztuczne machanie dżojem. AI wyznacza pozycje gdzie jest obecnie jego kursor na planszy, gdzie chce być i przy użyciu A* wyznacza najkrótszą drogę do machania.
Co do germzów, to tam się jeszcze pojawił problem ofensywności/defensywności AI. Zrobiłem to tak że bot robi i to i to: raz robi ruch ofensywny (puzcza najsilniejszy atak do najsłabszego przeciwnika) a raz defensywny (przerzuca do najsłabszego miejsca połowę jednostek z najsilniejszego sąsiada).
I tak, jedna gra na raz. Wiem że to cholernie trudne powstrzymać się przed robieniem paru rzeczy, zwłaszcza że te kolejne wydają się być ciekawsze, ale najpierw skończ jedno a potem bierz się za drugie. Sam mam z tym problem bo rozgrzebałem 4 gry i żadnej nie skończyłem tak na 100%, ale zanim wezmę się za kolejną to choćby skały defekowały to skończę jedną z zaczętych. ;)
EDYT: znalazłem
dokumentację z projektu na studiach który zaliczyłem właśnie trasowaniem w OpenFire. Może to Ci coś pomoże. ;)
Ostatnia aktualizacja: 03.09.2021 12:55:35 przez teh_KaiN