Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Version 1 (modified by landauf, 16 years ago) (diff)

Artificial Intelligence

Author

Thomas Fahrni

Annahmen

  • Schüsse von NPC fliegen durch die anderen NPC hindurch, d.h. machen keinen Schaden. Sonst wird alles schrecklich kompliziert und die NPC können nie schiessen oder schiessen sich andauernd gegenseitig ab.
  • NPC können nicht nur ganz gerade aus schiessen sondern haben einen Winkel in dem sie schiessen können d.h. auch ein wenig seitwärts.

Konzept

1. Schiessen

Hier gibt es nicht viel Intelligenz, der NPC schiesst einfach sobald er schiessen kann. Eventuell nach verschiedenen "Intelligenznieveaus":

1) Immer schiessen wenn die Richtung ungefähr stimmt

3) Nur wenn nichts im Weg steht

2) Nur wenn die Reichweite der Waffe nicht überschritten wird (gibt es das?)

4) Wahl der besten Waffe (falls mehrere vorhanden)

Wobei Stuffen 1-3 keinen Einfluss auf die Schwierigkeit haben, aber sie lassen den NPC intelligenter aussehen. (Ein NPC der nur planlos in die Richtung des Spielers schiesst aber dummerweise immer nur einen Meteoriten trifft, sieht nicht sehr intelligent aus..)

Notwendige Informationen aus dem Framework:

  • Wo ist der Spieler und wie gross ist er
  • Wo bin ich
  • Wo sind Objekte und wie gross sind sie
  • Was habe ich für Waffen

Befehle an das Framework:

  • Schiessen
  • Waffe wechseln

2. Positionieren

Idee:

Jeder NPC bewertet (Punktesystem) für sich selbst jede mögliche Bewegungsrichtung und Beschleunigungsänderung. Danach liefert er alle Daten an die Schwarmintelligenz (Superhirn, Oberboss, etc..) Dieser vergleicht alle Daten und sucht sich die beste Kombination aus. Danach werden die NPC entsprechend bewegt.

Ein NPC bewertet Bewegungsrichtungen nach folgenden Kriterien:

  • Bewertung der Schussposition
    • kann ich von hier aus schiessen?
    • mit/ohne Vorausschiessen
    • evt. Treffsicherheit (ja näher desto grösser?)
    • Sind Objekte im Weg?
  • Physik: Es werden nur die Positionen bewertet und weitergegeben die auch tatsächlich möglich sind.
  • Gegnerische Schüsse: Positionen in denen man getroffen wird werden schlecht gewertet
  • Objekte: Kollisionen werden schlecht gewertet
  • Evt: Bewegungsdrang (Materialparameter) Damit man NPC's machen kann die sich viel bewegen und solche die eher träg sind
  • Evt: Hirarchiemultiplikator (Ich bin der Kommandant und kein Soldat soll mich daran hindern dorthin zu gehen)

Durch unterschiedliche Gewichtung der Kriterien kann man verschiedene Verhaltensmuster und Schweirigkeitsstuffen erzeugen. (Paranoide, Hyperaktive, Intelligente, Dumme, etc) Die Schwierigkeit kann auch variert werden indem man probiert weiter voraus zu berechnen.

Die Schwarmintelligenz ermittelt die beste Kombination nach folgenden Kriterien:

  • Maximierung der Gesamtpunktzahl
  • Zusammenstösse von NPC geben Minuspunkte
  • Schöne Formationen geben Pluspunkte :P

Notwendige Informationen aus dem Framework:

  • Position aller Schüsse des Spielers (oder: Position aller Schüsse und wem sie gehören)
  • Position, Bewegungsrichtung, Geschwindigkeit, Grösse der Objekte
  • Position, Bewegungsrichtung, Geschwindigkeit, Grösse des Spielers

Jeder NPC muss von sich selbst wissen oder sich merken:

  • Position, Geschwindigkeit, Flugrichtung, Grösse

Befehle an das Framework:

  • Position ändern
  • Lage im Raum ändern

Ablauf als Programm

(Nur so eine Idee wie es etwa gehen könnte)

Tik NPC1

  • Allgemeine aufgaben (Model animieren etc)
  • Schiessen
  • Richtungen bewerten und an Schwarmintelligenz weitergeben

Tik NPC2 …

Tik NPC3 …

Tik AI

  • Beste positionierung suchen
  • Neue NPC Positionen berechnen und NPC positionieren

Realisierung

Wahrscheinlich reicht die Zeit bis zum Ende des PPS nicht um alles komplett perfekt zu realisieren. Sicher müssen zuerst einmal die fetten sachen funktionnieren dann ist die AI schon ein kleines bisschen brauchbar. Danach werden die anderen Sachen grob implementiert. Schlussendlich kann man das dann beleibig perfektionieren…

Attachments (2)

Download all attachments as: .zip