Hi
Vorgeschichte:
Ich möchte eine KI entwickeln, die so flexibel wie möglich einsetzbar ist. Dafür möchte ich ein Programm schreiben, in welchem man seine KI-Objektypen (Hase, Soldat, Alien, Fussballspieler... was auch immer), definieren kann. Dazu gehören, je nach Objekttyp, unterschiedliche Eigenschaften, Pathfinding, State-Machines usw.
Nehmen wir z.B. mal die State-Machines. Dort definiert man verschiedene Zustände wie laufen, flüchten, jagen, fressen. Einer dieser Zustände ist von Anfang an aktiv. Um jetzt jedoch in einen anderen Zustand zu gelangen, müssen bestimmte Kriterien erfüllt sein.
Zustand: laufen
Bedingung: Wenn Hunger, dann jagen.
Zustand: jagen
Bedingung: Wenn Beute gemacht, dann fressen.
Zustand: fressen
Mit solchen State-Machines lassen sich viele lustige Sachen anstellen.
Wenn ich so ein Programm schreibe, wo ich das alles definieren kann, müssen alle Angaben von der KI ausgewertet und ausgeführt werden. Jetzt ist es natürlich so, daß jeder Objekttyp unterschiedliche Eigenschaften hat, die die KI im Vorfeld garnicht kennt. Demnach kann ich nicht einfach in Delphi Klassen erstellen und deren Eigenschaften zur Laufzeit erweitern. Auch sind die Bedingungen ein Problem (Wechsel von einem Zustand in den nächsten), da diese oftmals komplexere Formeln enthalten. Ich hatte mir das so vorgestellt, daß man in dem separaten Programm die Bedingungen wie in einem Ausdrucks- bzw. Formeleditor erstellt (kennt man z.B. von Microsoft
Access).
Jetzt gibt es zwei Möglichkeiten:
Variante A: Ich schreibe so ein Programm.
Vorteil: Die KI ist flexibel einsetzbar. *** Nachteil: Die Ausführungsgeschwindigkeit ist langsam, da alle Eigenschaften der Objekte und vorallem die Bedingungen in den State-Machines erstmal ausgewertet (interpretiert) werden müssen. Und das in jedem Hauptschleifendurchlauf.
Variante B: Ich lasse das mit dem separaten Programm und codiere alles "hart" in Delphi.
Vorteil: Die Ausführungsgeschwindigkeit ist deutlich höher. *** Nachteil: Die KI ist nicht flexibel einsetzbar.
Jetzt fiel mir allerdings eine mögliche Lösung ein, um evtl. die Vorteile beider Varianten zu vereinen. Die sieht so aus:
Ich schreibe diese separate Programm, wo ich jegliche Objekttypen, Eigenschaften, Kriterien für State-Machines usw. definieren kann. Final, wenn alle Informationen eingegeben wurden, erzeugt das Programm Pascal-Code in Form von *.pas-Dateien, speichert diese ab und läßt durch den Kommandozeilen-Compiler eine
DLL erstellen. Die KI selbst läuft in einer
DLL und wird an eine 3D-Engine gebunden.
OK, zugegeben, die Idee klingt ziemlich abenteuerlich.
Was haltet Ihr davon?
Danke