Stellen Sie sich ein sehr einfaches Shoot-em-up vor, etwas, das wir alle kennen:
Du bist der Spieler (grün). Ihre Bewegung ist auf die X
Achse beschränkt. Unser Feind (oder Feinde) befindet sich oben auf dem Bildschirm, seine Bewegung ist auch auf die X
Achse beschränkt. Der Spieler schießt mit Kugeln (gelb) auf den Feind.
Ich möchte eine KI für den Feind implementieren, die wirklich gut darin ist, den Kugeln des Spielers auszuweichen. Meine erste Idee war, den Bildschirm in einzelne Abschnitte zu unterteilen und diesen Gewichte zuzuweisen:
Es gibt zwei Gewichte: Das "Kugelgewicht" (grau) ist die von einer Kugel ausgehende Gefahr. Je näher die Kugel dem Feind ist, desto höher ist das "Kugelgewicht" ( 0..1
wobei 1 die höchste Gefahr darstellt). Fahrspuren ohne Kugel haben ein Gewicht von 0. Das zweite Gewicht ist das "Distanzgewicht" (lindgrün). Für jede Spur addiere ich die 0.2
Bewegungskosten (dieser Wert ist jetzt ein bisschen willkürlich und könnte angepasst werden).
Dann addiere ich einfach die Gewichte (weiß) und gehe auf die Spur mit dem niedrigsten Gewicht (rot). Dieser Ansatz weist jedoch einen offensichtlichen Fehler auf, da lokale Minima leicht übersehen werden können, da der optimale Ort einfach zwischen zwei ankommenden Kugeln liegt (wie durch den weißen Pfeil angegeben).
Also hier ist was ich suche:
- Sollte einen Weg durch den Kugelsturm finden, auch wenn es keinen Ort gibt, an dem keine Kugel droht.
- Der Feind kann Kugeln zuverlässig ausweichen, indem er eine optimale (oder nahezu optimale) Lösung auswählt.
- Der Algorithmus sollte in der Lage sein, die Geschossbewegungsgeschwindigkeit zu berücksichtigen (da sie sich möglicherweise mit unterschiedlichen Geschwindigkeiten bewegen).
- Möglichkeiten, den Algorithmus so zu optimieren, dass verschiedene Schwierigkeitsgrade angewendet werden können (dumm für superintelligente Feinde).
- Algorithmus sollte verschiedene Ziele ermöglichen, da der Feind nicht nur Kugeln ausweichen will, er sollte auch in der Lage sein, den Spieler zu schießen. Das bedeutet, dass Positionen, an denen der Feind auf den Spieler schießen kann, bevorzugt werden sollten, wenn er Kugeln ausweicht.
Wie würden Sie das angehen? Im Gegensatz zu anderen Spielen dieses Genres möchte ich nur wenige, aber sehr "geschickte" Feinde haben, anstatt eine Menge dummer Feinde.