PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : KI Idee (Waypointsystem)



Rash
06.02.2005, 22:47
Hi,

ich hatte heute eine Idee, eine KI zu entwickeln, die mit hilfe von Waypoints die blöde Wegsuche und das ewige Problem mit dem umgehen von Hindernissen lösen müsste.

So entscheidet der NPC bei jedem Waypoint, zu welchem er als nächstes geht.
Diese sollte in erster linie mit einer Random Variable beeinflisst werden.

Später kommen dann noch ander Faktoren, wie zB die Position des Spielers oder anderer NPCs ins Spiel.

3 Fragen an euch:

1. Ist sowas von der Menge der Variabeln/ Switches im Maker möglich
bzw. lohnt sich der Aufwand, falls es ein großer sein sollte?

2. Würdet ihr die Waypoints aus Events oder aus reinen Koordinaten in Variablen machen?

3. Und wei währe so etwas am leichtesten zu realisieren?

Gruß
rash

Dhan
06.02.2005, 23:18
1. Es ist möglich, lohnen öhm... wenn du net grade ein hochtaktisches Game machst, lohnt sichs net
2. Huh? In was kann man die noch machen?
3. Durch nachdenken, wenn du diese Frage stellen willst, nehme ich mal an, du kennst dich net grad aus...
aber du kannst es so machen, erstelle Gegenden mit einem Zentrum, das von jedem Punkt der Gegend aus möglichst direkt erreicht werden kann und lasse die NPCs zu diesen Zentren laufen und von da aus in Richtung der nächsten Gegend

Don_Alexandro
07.02.2005, 00:01
Sagen wir mal ich wäre auf Jeden viel zu faul dafür. Nicht wegen der Arbeit, sondern wegen all diesen Zahlen; da wird mir schlecht ...

Lass den Verbündeten doch einfach {follow hero/ follow hero/ random dir./ follow hero/random dir.} oder ähnlich gehen, und bau ein Event dazu, dass verhindert, dass man sich weiter als X Schritte (Felder) von ihm entfernt.

Das nervt vielleicht beim Spielen ab und zu, aber das wäre ja nicht weiter wild ...

Falls das alles für ein AKS gedacht ist, kannste ja bei der Berührung Verbündeter/Gegner mit was weiss ich welchen Variablen heraufinden, wer trifft. Das kann man wie in nem Pen&Paper RPG berechen und in Echtzeit umsetzen (Attacke-/Parade- Werte) ....

Don

edit

Bessere Möglichkeit (etwas komplizierter):

Wenn der Verbündete im Umkreis von 3 oder 4 Feldern zum Hero steht, geht er {Random dir.} entfernt er sich auf 6 Felder , {follow hero}. Weiter entfernen geht nicht, weil der Hero dort geblockt wird.

Kleine Fehler werden auftauchen, wenn der Verbündete in eine Sackgasse läuft, aber dann mus man halt 2 Schritte in seine Richtung laufen...
Jeder der SoM durchgespielt hat kennt das Problem und ist daran gewöhnt ...

NPC Fighter
07.02.2005, 10:46
Also der Aufwand ist auf jeden Fall groß. Aber wenn es von einer Random Variable beeinflusst wird, wohin das Event geht, wird es wohl nicht immer den sinnvollsten Weg gehen.
Es gab im Forum bestimmt schon hunderte Threads, die sich mit der (bis jetzt noch nicht vorhandenen) KI im Maker beschäftigt haben, aber bei keinem ist was vernünftiges rausgekommen. Und selbst wenn man eine erschafft, muss man die Wege, die sie geht eh alle scripten.
Ich rate dir davon ab, das führt nur zu Frust und Tränen ;) ...


Liebe Grüße,

~ NPC ~

Deathball
07.02.2005, 11:50
Na dann geb ich dochma auch meinen Senf dazu ab:

Zu 1.
Möglich ist es bei 5000 Variablen und bei 5000 Tabs(wenn man trickst 9999) auf alle Fälle. Für extrem komplizierte Games könnte es vielleicht so was wie Variablen-Notstand geben, aber ich denke die Makerer die solche Games machen schaffen es auch dieses Problem zu umgehen.
Ob ssich der Aufwand lohnt musst du selbst entscheiden. Wenn ich nicht was bestimmtes damit vor hätte würde ich es lassen, aber es ist bestimmt keine schlechte Übung mehr Erfahrung im makern zu bekommen.

Zu 2.
Das ist Geschmackssache. Nimm die Methode mit der du besser klar kommst.

Zu 3.
Die Frage ist meiner Meinung nach etwas sinnlos, da ich noch nit ma kapier wie du das meinst. Am leichtesten wäre es wahrscheinlich mit Variablen zu realisieren :p ;)

cya
Deathball

Teufelsauge
07.02.2005, 11:55
Juhu endlich mal jemand der auch auf diese Idee kommt ich hab so ne KI für raian's War of ceneta gebaut es ist viiiiiiiiel arbeit. aber wenn es fertig ist super...

zu1: Der Aufwand lohnt auf jeden Fall...

zu2: Mach lieber Variablen events wären mehr arbeit...

zu3: Betriebsgeheimnis ;)

Phönix Tear
07.02.2005, 14:39
zu2: Mach lieber Variablen events wären mehr arbeit...

Da stimme ich dir allerdings nicht unbedingt zu. Wenn du dich am Anfang festlegst, dass du z.B. 20 Wegpunkte machst kannst du einfach (falls man viele Maps braucht) die alte Map kopieren, ummappen und die Wegpunkte entsprechend verschieben. Bei etwas komplexeren KS kommt die Abfrage der Position des nächsten Wegpunktes warscheinlich sehr heufig vor, wesshalb es dann einfacher wäre, als überall wieder die Werte zu ändern.


Zu 1:
Wie ja bereits erwähnt wurde hängt das von der Art des Spieles ab und wie viel Gedult du hast ;)

Zu 2:
Hab ich ja bereits gesagt...

Zu 3:
Musst dann wohl erstmal festlegen, was das Ziel der "Einheit" ist. Ist z.B. der Held ausgewählt wird automatisch der Wegpunkt berechnet, welcher diesem am nächsten ist. Das minimiert die Warscheinlichkeit einen Falschen Weg zu nehmen. Danach muss dann wohl oder übel berechnet werden, welchem Wegpunkt die "Einheit" am nächsten steht. Wenn du die Wegpunkte mit einem geschickten System positioniert hast, müsstest du dann einfach nur noch 2 Variablen machen. In der einen steht, zu welchem Wegpunkt die "Einheit" muss, in der anderen, an welcher sie gerade ist. Vieleicht dann auch noch eine in welche Richtung sie gehen muss (1 für aufsteigend, 2 für absteigend). Sind die Wegpunkte nun wirklich geschickt verknüpft ensteht am Ende eine Art Kreislauf.
Mal zur Verdeutlichung:

http://www.directupload.net/images/050207/69ThvVT9.png

http://www.directupload.net/images/050207/WzJm9R64.png = Die "Einheit"
http://www.directupload.net/images/050207/BolXMT8H.png = Der Held
http://www.directupload.net/images/050207/WrM6Xt9L.png = Ein Blocker (ein Stein, eine Erhöhung etc. Irgendetwas unpassierbares)
http://www.directupload.net/images/050207/rw9JwIV2.png = Der Wegpunkt
http://www.directupload.net/images/050207/TCHZCfs5.png = Der Strich dient dazu den Kreislauf zu verdeutlichen ^^

Also in diesem Beispiel würde die "Einheit" nachdem alles Errechnet würde zum Punkt 1 marschieren (natürlich mit dem üblichen Vorgang). Danach über 2 zu 3 zu 4 usw bis zu 10 wo ja errechnet wurde, dass der Held diesem Punkt am nächsten ist. Dann würde sich die Einheit dem Punkt lösen und direkt auf den Helden zumarschieren. Natürlich müsste man ab da auch überprüfen ob der Held nun der "Einheit" oder einem andern Punkt näher ist. Wäre nun die "Einheit" weiter als z.B. 2 Felder vom Helden entfernt, als dies ein beliebiger Wegpunkt ist, wird der ganze Vorgang erneut gestartet (also bewegt sich die "Einheit" zu dem besagten Punkt in dem bereits erwähnten Kreislauf). Natürlich könnte man speziell für diese Map eine Sonderregelung einführen, die besagt, dass wenn sich die "Einheit" auf Punkt 2 befindet und der Held einem der Punkte zwischen 7 und 11 am nächsten ist, das die "Einheit" dann direkt zu Punkt 9 weitergeht. Sollte nun der Held einem Punkt unter 9 am nächsten sein muss die bereits erwähnte dritte Variable auf 2 gestellt werden, so dass sich der Held zu Punkt 8, dann zu 7 usw. bewegt.

Das macht zwar extrem viel Arbeit, aber vieleicht würde es sogar funktionieren :rolleyes:

mfg
Phönix Tear

Oburi
09.02.2005, 14:00
Es funktioniert. Sogar mit KS mit KI-Gegnern, die entscheiden, wer näher dran ist: Du oder dein Virtueller Partner und dann angreifen. Auch das mit dem umgehen geht. Ich hab mal über NAcht die gleiche Idee gehabt und die in ein AKS aus der Skriptsektion (da hat man son Blauen Held) miteingebaut. Trick dabei: Man benutzt das Hintereinanderlaufenskript. Man setzt ein unsichtbares Event, das über allen anderen liegt und sich immer zum Waypointbeweget. Der KI-Freund folgt dem dem Event. Ich habs hier irgenndwo noch als Beta-Skript rumfliegen. Ich versuch mal, das ichs demnächst mal fertigstelle und hoste, ok?
MfG, Oburi

Venoran
12.02.2005, 13:14
Es kommt immer auf das Spiel an. Wenn du z. B. einen Shooter programmieren willst, wo die Events möglichst genau einen Zielort treffen sollen, ist es nötig Wegpunkte zu programmieren. Willst du allerdings eine "Deathmatch-KI", die auf jeder Karte funktionieren soll, ist es einfach zu viel Aufwand. Generell funktionieren Wegpunkte besser als die "Deathmatch-KI" (alles, nur nicht gegen die Wände laufen) haben aber auch einen hohen Arbeitsaufwand, der sich nur bei größeren Projekten wirklich lohnt.
Ich selber habe bisher nur selten Wegpunkte benutzt, da die Events diese WPs in gerader Linie anlaufen und das sieht total unnatürlich aus. Wenn du allerdings programmierst, dass die Events die WPs nicht in einer geraden Linie anlaufen sollen, dann rennen sie oft gegen die Wand. Es ist also ein Kompromiss.