Wyobraź sobie bardzo prostą strzelankę, coś, co wszyscy wiemy:
Jesteś graczem (zielony). Twój ruch jest ograniczony do X
osi. Nasz wróg (lub wrogowie) znajduje się u góry ekranu, jego ruch jest również ograniczony do X
osi. Gracz strzela we wroga pociskami (żółtymi).
Chciałbym wdrożyć sztuczną inteligencję dla wroga, która powinna być naprawdę dobra w unikaniu pocisków graczy. Moim pierwszym pomysłem było podzielenie ekranu na odrębne sekcje i przypisanie im wag:
Istnieją dwa ciężary: „kula” (szary) jest niebezpieczeństwem nałożonym przez kulę. Im kula jest bliżej wroga, tym większa jest „waga pocisku” ( 0..1
gdzie 1 oznacza najwyższe niebezpieczeństwo). Ścieżki bez pocisku mają wagę 0. Drugi ciężar to „odległość-waga” (limonkowo-zielony). Do każdego pasa dodaję 0.2
koszt ruchu (ta wartość jest teraz trochę arbitralna i może zostać zmieniona).
Następnie po prostu dodaję obciążniki (białe) i idę na tor o najniższej wadze (czerwony). Ale to podejście ma oczywistą wadę, ponieważ może łatwo ominąć lokalne minima, ponieważ optymalnym miejscem do przejścia byłyby po prostu między dwiema nadlatującymi kulami (oznaczonymi białą strzałką).
Oto czego szukam:
- Powinien znaleźć drogę przez burzę, nawet gdy nie ma miejsca, które nie stanowiłoby zagrożenia ze strony kuli.
- Wróg może niezawodnie unikać pocisków, wybierając optymalne (lub prawie optymalne) rozwiązanie.
- Algorytm powinien uwzględniać prędkość ruchu pocisku (ponieważ mogą one poruszać się z różnymi prędkościami).
- Sposoby poprawiania algorytmu, aby można było zastosować różne poziomy trudności (głupie dla superinteligentnych wrogów).
- Algorytm powinien pozwalać na różne cele, ponieważ wróg nie tylko chce unikać pocisków, powinien także móc strzelać do gracza. Oznacza to, że pozycje, w których wróg może strzelać do gracza, powinny być preferowane podczas unikania pocisków.
Jak więc sobie z tym poradzisz? W przeciwieństwie do innych gier tego gatunku, chciałbym mieć tylko kilku, ale bardzo „wykwalifikowanych” wrogów zamiast mas głupich wrogów.