KI für einen Rollenspiel Gegner

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Lador

Betreff: KI für einen Rollenspiel Gegner

BeitragMo, Sep 11, 2006 10:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, ich habe für mein RPG eine KI programmiert, die jedoch nicht funktionierte. Den Code hab ich schon gelöscht, weil ich jetzt eine neue KI programmiert habe. Die alte KI verlief so:

War zwischen Spieler und Gegner eine Mauer, so ging der Gegner an der Mauer vorbei. Allerdings funktionierte das nicht ganz, anscheinend war der Computer überlastet. Es gab nämlich für jede Mauer(oben, unten, links, rechts) eine eigene KI. Der Gegner verfolgte den Spieler nicht mehr, er ging immer nur nach oben(gy-1).

Bei der derzeitigen KI folgt der Gegner genau den Spuren von dir. Dazu habe ich in einem Dim-Feld alle vorherigen Positionen des Spielers angelegt.

Wenn jetzt aber(man kann es in der Galerie von Apprauuuus Screenshot "LOL³Warriors - Kampfszene" sehr schön sehen) der Spieler in eine Höhle kommt, und die Gegner oberhalb sind, wie soll man das dann Programmieren? Ich habe es so gemacht, mit der KI:

Code: [AUSKLAPPEN]
 v=1-v
 If v=1 Then
  If gx > folgen(folge,0) And map(gx-1,gy) < 2 Then gmove = 3:gsframe = 9:gaa = 1
  If gx < folgen(folge,0) And map(gx+1,gy) < 2 Then gmove = 4:gsframe = 3:gaa = 1
  If gy > folgen(folge,1) And map(gx,gy-1) < 2 Then gmove = 2:gsframe = 0:gaa = 1
  If gy < folgen(folge,1) And map(gx,gy+1) < 2 Then gmove = 1:gsframe = 6:gaa = 1
 EndIf


Hoffe, ich habe mich klar ausgedrückt, und dass ihr mir helfen könnt!

Lador
 

Ava

Gast

Betreff: Re: KI für einen Rollenspiel Gegner

BeitragMo, Sep 11, 2006 11:47
Antworten mit Zitat
Lador hat Folgendes geschrieben:
...wie soll man das dann Programmieren?...


Hast Du schon mal über ein echtes Pathfinding nachgedacht?
( oder widerspricht das der Spielidee irgendwie? Rolling Eyes )


+ Ava +
 

Lador

BeitragMo, Sep 11, 2006 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja schon, aber ich denke, dass kann ich noch nicht programmieren... Mein letzter Code sollte eigentlich auch so funktionieren, aber(wie schon beschrieben) lief der Gegner immer nach oben.

So ungefähr sah der Code aus:

Code: [AUSKLAPPEN]

If gx > px Then
 If map(gx-1,gy) < 2 Then
  gmove = 2;unten
  gaa = 1
 EndIf
EndIf


Apropos Pathfinding:
Müsste ich das dann für jeden Gegner einzeln machen?

Lador
 

Omenaton_2

BeitragMo, Sep 11, 2006 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Du solltest wirklich echte Pathfinding machen ("A*" empfohlen). Damit klappt alles.
Es ist tatsächlich nicht ganz einfach, aber wenn man Zeit investiert kriegt man das hin, nur nicht aufgeben.
So wie du das bisher geplant hast wirst du nicht weit kommen.

Wenn du eine Pathfinding-Rutine hast, dann mußt du einfach nur jeden Gegner Type durchlaufen und von deren aktuellen Position einen Pfad zu dem Spieler berechnen lassen, diesen ablegen und die Gegner rennen dann alle hin, egal wie komplex die Karte ist, Mauern hin oder her.

Wenn ein Gegner unterwegs aufgehalten wird, dann erst 3 Sekunden warten lassen und dann versuchen den Weg wie geplant und abgelegt fortzusetzen (weil oft die sich bewegende Figuren gegenseitig kurz hindern). Wenn dann der Weg immer noch blockiert ist, dann erneut von dem aktuellen Position aus die Pathfinding aufrufen und Weg neuberechnen.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group