Seite 3 von 4
Re: KI für Dummies
Verfasst: 17.07.2008, 19:44
von DasJan
Dijkstra berechnet nur die kürzesten Wege zu einem Ziel, hier sind aber alle möglichen kürzesten Wege erforderlich. Man kann natürlich für jedes Ziel den Dijkstra aufrufen, das ist dann aber langsamer als einmal Floyd-Warshall.
Das Jan
Re: KI für Dummies
Verfasst: 17.07.2008, 23:42
von DasJan
Hier ist die Datei:
http://www.adventure-treff.de/temp/dasj ... xample.php
Ich glaube aber, deine Matrix ist nicht korrekt. Der Eintrag (k_58, k_11) ist 0, der Eintrag (k_11, k_58) ist aber 1. Du kannst also von k_11 nach k_58 laufen, aber nicht von k_58 nach k_11 (oder umgekehrt).
Das Jan
Re: KI für Dummies
Verfasst: 18.07.2008, 15:42
von DieFüchsin
Danke dir.
Ja, ich dacht mir schon, dass ich da Fehler drin habe, aber so kann ich alles nochmal gut überprüfen.
Re: KI für Dummies
Verfasst: 20.07.2008, 01:04
von DieFüchsin
So, nun habe ich dank DasJan endlich die errechneten Werte für Abstand und Predecessors.
Allerdings kann ich in eindimensionalen Arrays ja nicht
schreiben, oder?
Ich müsste also alles in einen Array reinquetschen: 107*107 Stellen ergäbe das dann.
Leider macht AGS da aber nicht mit, das lässt nur maximal 500 Stellen zu.
Kann ich das mit eindimensionalen Arrays jetzt überhaupt irgendwie machen oder brauche ich dazu unbedingt zweidimensionale?
Re: KI für Dummies
Verfasst: 20.07.2008, 19:34
von Beowulf
Hast du es schon eimal mit einem Feld aus jeweils 107 Feldern mit je 107 Werten versucht? Also einem Array-Array?

Re: KI für Dummies
Verfasst: 20.07.2008, 22:37
von DieFüchsin
Öh wie meinst du das?

Re: KI für Dummies
Verfasst: 20.07.2008, 22:53
von Beowulf
Sowas hier:
Ein Feld, wo jedes Element wiederum ein Feld ist.
PS: Ist die Feldlänge bei AGS wirklich auf 500 begrenzt? Warum?
Re: KI für Dummies
Verfasst: 21.07.2008, 08:40
von DasJan
Beowulf hat geschrieben:Sowas hier:
Sicher, dass AGS das unterstützt? Sieht für mich eher nach PHP aus.
Das Jan
Re: KI für Dummies
Verfasst: 21.07.2008, 10:50
von DieFüchsin
Keine Ahnung, ob AGS das unterstützt. Ich werd mich mal an meine freundlichen Profis im AGS-Forum wenden.
Beowulf hat geschrieben:
PS: Ist die Feldlänge bei AGS wirklich auf 500 begrenzt? Warum?
Keine Ahnung, warum, aber als ich einen Spieltestlauf starten wollte, mokierte sich AGS mit einer Fehlermeldung über die hohe Anzahl an Einträgen im Array und meinte, 500 wären das Maximum.
Re: KI für Dummies
Verfasst: 21.07.2008, 12:05
von perfektopheles
Re: KI für Dummies
Verfasst: 21.07.2008, 13:07
von KhrisMUC
Mit einem kleinen "Trick" kann man in AGS ohne weiteres zweidimensionale Arrays benutzen:
Code: Alles auswählen
//header
struct zweidim {
int b[200];
};
//script
zweidim a[200];
...
// Verwendung:
a[34].b[162] = 2;
Edit:
Wie hier zu sehen hat jedes Feld eine eindeutige 2D-Koordinate, über die man gleich durch einfache Multiplikation die Bildschirmkoordinaten der Feldmitte ausrechnen kann.
Achja: Viel Spass beim Zeichnen der Walkbehinds

Re: KI für Dummies
Verfasst: 21.07.2008, 13:26
von DieFüchsin
@perfektopheles: Rocco schrieb aber auch, dass das Modul nicht mehr verfügbar ist.
@KhrisMUC: Danke, dass du mir die Mühe, einen neuen Thread zu erstellen, abgenommen hast und danke für deine schnelle Lösung! Werds gleich heut abend ausprobieren.
Da die Figuren auf dem Feld sehr klein sein werden, werden die Walkbehinds wohl weniger Probleme machen, denke ich.
Re: KI für Dummies
Verfasst: 27.07.2008, 19:07
von DieFüchsin
Es ist wirklich sehr schade - nachdem ich jetzt so lange an der Umsetzung der Pfadfindung gehangen habe, kann ich sie letztendlich doch nicht umsetzen. AGS beschwert sich über zu viel Datenmaterial.
Mein Dank gilt allen, die mir geholfen haben. Ich denke, die Arbeit ist dennoch nicht umsonst gewesen.
Re: KI für Dummies
Verfasst: 27.07.2008, 19:09
von perfektopheles
Geht es weger der großen Arrays nicht? Wäre ja sehr schade.
Re: KI für Dummies
Verfasst: 27.07.2008, 20:07
von DieFüchsin
Nach khrismucs Hinweis habe ich alles in diese Arrays gespeichert: a[0].b[0]=1 bis a[107].b[107]=2
doch AGS meldete mir: "stack overflow, attempted grow to 160004 bytes". Was das nun genau bedeutet, weiß ich nicht, aber ich gehe davon aus, dass es einfach zu viel Datenmenge ist.