Jump-and-Run-KI, wie programmieren?
Übersicht

![]() |
SkabusBetreff: Jump-and-Run-KI, wie programmieren? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Ich muss momentan für die Uni eine KI programmieren, die es schaffen soll ein zufällig generiertes Mario-Level zu durchlaufen und ans Ziel zu kommen.Dabei soll die KI Münzen einsammeln, Gegner killen, Lücken überspringen und darauf achten immer im Feuerblumenmodus zu bleiben. Ich hab mir auch schon ne Menge Gedanken gemacht und ein paar einfache KI´s geschrieben, die aber ein wenig unflexibel waren. Daher hab ich mir überlegt einen modifizierten A-Star-Algo zu benutzen, der valide Pfade findet und dabei die JumpAndRun-"Physik" mit einbezieht. Das funktioniert mitlerweile auch problemlos. Mein großes Problem ist nun die Frage, wie ich die KI den Pfad entlang laufen lassen soll? Erwähnen sollte ich, dass ich ein vollständiges Framework gegeben habe und die KI nicht koordinatengenau steuern kann.Ich kann ihn nur nach rechts oder links gehen lassen, ihn springen lassen oder ducken.Nichts weiter. Daher nun meine Frage: Nachdem ich eine Liste von Knoten habe die die KI ablaufen soll, wie soll ich das Ablaufen des Pfades realisieren? Ich hab dazu schon einiges ausprobiert, das meiste führt aber dazu, dass die KI manchmal 2 Knoten weiter springt als erwartet und dann nur noch Schwachsinn macht(unter anderem Exceptions ohne ende werfen) Ich hoffe das waren jetzt nicht zu wenig Infos, ansonsten fragt mich. Das Programm wird übrigens in Java geschrieben.Also is es nicht notwendig irgendwelche Code-Snippetszu schrieben. Ansätze und Ideen reichen völlig. Ich danke wie immer im vorraus ;D MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich würde durch den A* Algo die Kontenpunkte markieren, und zwar so, das diese Speichern wie man den Nächsten knoten erreicht. Ist dort gespeichert "gehe-Links" dann übergib das deinem Framework, oder "springe" dann tu dies auch. Brauchste zwar im A* Algo ein wenig mehr Mathematik, aber wäre glaub ich nicht so dramatisch...
mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja fürs links-rechts laufen reicht es völlig aus einfach die Differenz von einem Knotenpunkt zum anderen
zu berechnen und ihn dann solange zu bewegen bis er den Knoten erreicht hat. Das Problem ergibt sich nur beim Springen.Mir fällt keine sinnvolle Idee ein wie man das Springen bei Knotenpunkten handhaben soll... Der A* sagt ja bereits das der Sprung möglich ist, nur muss dann ja auch der Folgeknoten angesteuert werden, da ja einige Sprungknoten im wahrsten Sinne "übersprungen" werden. MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann versuch es so hinzukriegen, dass dein Algo einen Knotenpunkt beim Absprung-Platz erstellt und beim Lande-Platz. Dann noch noch seperat sagen ob sich beim sprung nach links oder rechts bewegen muss, schon gehts ...
mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
darth |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
mich würden da noch ein paar zentrale Aspekte interessieren: - wieviel kann die Spielfigur sehen? So wie du es beschreibst, scheinst du das ganze Spielfeld auslesen zu können, stimmt das so? - ist das System variabel? Sprich: Bewegen sich die Gegner oder sind die stationär? Falls ja, halte ich deinen Ansatz für gefährlich, weil er zu oft von Gegnern gestört werden kann. Dann müsstest du wahrscheinlich irgendwas wie "Backtracking" einbauen, dass er zum letzten bekannten Punkt zurückgeht wenn er von einem Gegner gezwungen wurde sein Verhalten zu ändern. Sind die Gegner allerdings stationär, kannst du die sehr gut in deinen Weg einbauen.. - soll es sich menschlich oder rational verhalten? Es gab verschiedene Ansätze zur KI. Die einen wollten den Menschen imitieren, die anderen möchten lieber eine vollständig rationale KI. Wahrscheinlich ist dir die Wahl selber überlassen, und der Unterschied in der KI-Reaktion wird gering sein, aber interessant wäre deine Überlegung trotzdem. - was ist deine Kostenfunktion? Soll die KI möglichst sicher sein? Möglichst schnell? Mit möglichst wenigen Bewegungen/Sprüngen? Optimierung kann sich auf verschiedene Aspekte richten, die auch widersprüchlich sein können. Da sollte man sich überlegen, was das Ziel ist. Und was die Strafe. Z.B wäre ein Tod für eine möglichst schnelle KI ziemlich deftig. Für eine KI die mit möglichst wenigen Sprüngen auskommen soll, ist ein Tod völlig egal, sie ist ja nicht gesprungen ![]() Hmm, mehr fällt mir auch grad nicht ein. Vllt hätte ich die Vorlesung doch nicht so oft ausfallen lassen sollen, keke ![]() MfG, Darth |
||
Diese Signatur ist leer. |
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
darth hat Folgendes geschrieben: Hallo,
mich würden da noch ein paar zentrale Aspekte interessieren: - wieviel kann die Spielfigur sehen? So wie du es beschreibst, scheinst du das ganze Spielfeld auslesen zu können, stimmt das so? Die Spielfigur sieht genausoviel wie der menschliche Spieler. Nur den aktuellen Levelausschnitt, auch nur die Gegner im aktuellen Levelausschnitt. darth hat Folgendes geschrieben: - ist das System variabel? Sprich: Bewegen sich die Gegner oder sind die stationär? Falls ja, halte ich deinen Ansatz für gefährlich, weil er zu oft von Gegnern gestört werden kann. Dann müsstest du wahrscheinlich irgendwas wie "Backtracking" einbauen, dass er zum letzten bekannten Punkt zurückgeht wenn er von einem Gegner gezwungen wurde sein Verhalten zu ändern. Sind die Gegner allerdings stationär, kannst du die sehr gut in deinen Weg einbauen.. Einige sind stationär, einige bewegen sich. Mir ist klar das für dynamische Gegner das Prinzip nicht hinhaut. Für: -Münzen sammeln -stationäre Gegner plätten/umgehen -Feuerblumen einsammeln -Rästelboxen anhüpfen Ist das System ganz gut, das Gegner dazwischenkommen wird natürlich noch mit einem anderen System berücksichtigt. darth hat Folgendes geschrieben: - soll es sich menschlich oder rational verhalten? Es gab verschiedene Ansätze zur KI. Die einen wollten den Menschen imitieren, die anderen möchten lieber eine vollständig rationale KI. Wahrscheinlich ist dir die Wahl selber überlassen, und der Unterschied in der KI-Reaktion wird gering sein, aber interessant wäre deine Überlegung trotzdem. Naja meine Vorstellung ist eher, ich sag mal "rational". Es gibt eben nen Prioritätsschaltung und klare Vorgaben. Eigtl. is es gar net viel: Zu Anfang werden die Objekte im aktuellen Levelausschnitt betrachtet, dann nach Priorität und Nähe zum Spieler sortiert. Es werden immer erst Gegner getötet, dann Münzen gesammelt. Sofern sich die KI nicht im Feuer-Modus befindet wird vor dem Münzen sammeln das Öffnen von Rästelboxen und das Aufsammeln von Pilzen/Blumen bevorzugt. Sofern diese Dinge alle abgearbeitet sind, oder nicht zutreffen wird die KI in Richtung Ziel bewegt.Eine Ausnahme besteht hier bei Gaps, die werden direkt in die Pfadbetrachtung eingebaut und werden darum nicht gesondert betrachtet. Gaps werden einfach bei der Vorverarbeitung der Leveldaten so markiert, dass sie als Hindernisse erkannt werden. Der A*-Algo sorgt dann dafür, dass die KI einen validen Pfad findet, sodass die KI über die Lücke springt. darth hat Folgendes geschrieben: - was ist deine Kostenfunktion? Soll die KI möglichst sicher sein? Möglichst schnell? Mit möglichst wenigen Bewegungen/Sprüngen? Optimierung kann sich auf verschiedene Aspekte richten, die auch widersprüchlich sein können. Da sollte man sich überlegen, was das Ziel ist. Und was die Strafe. Z.B wäre ein Tod für eine möglichst schnelle KI ziemlich deftig. Für eine KI die mit möglichst wenigen Sprüngen auskommen soll, ist ein Tod völlig egal, sie ist ja nicht gesprungen ![]() Die Aufgabe besagt nur, die KI soll sicher ins Ziel kommen.Es gibt aber eine Zeitvorgabe. Dass heißt ein optimaler Ausgleich von Schnelligkeit und Sicherheit. Sekundär soll die KI möglichst viele Punkte machen. darth hat Folgendes geschrieben: Hmm, mehr fällt mir auch grad nicht ein. Vllt hätte ich die Vorlesung doch nicht so oft ausfallen lassen sollen, keke ![]() MfG, Darth Hehe, ja bei uns ist das nicht für ne KI-Vorlesung. Sowas haben wir(noch) nicht. Es is für ne Grundlagenveranstaltung... MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group