Erste Gehversuche: KI

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Erste Gehversuche: KI

    Die künstliche Intelligenz von Gegnern ist schon immer der Punktus Knaktus bei allen Spielen gewesen aber an einem Punkt bin ich wirklich am verzweifeln.

    Ziel: Ich möchte, dass mein Objekt selbständig den Weg an den Wänden vorbei zum Ziel findet.

    Dies hab ich bisher gelöst mit dem Code: mp_potential_step(object1.x,object1.y,64,solid)

    [die Schrittlänge 64 habe ich gewählt, da jedes Feld 64x64 groß ist]

    dies klappt auch wunderbar, allerdings soll sich das Objekt ja an die Spielregeln halten und immer schön friedlich von einem Feld in das andere hüpfen und nicht durch Querfeldeinlaufen den Weg abkürzen.

    Hoffe ihr könnt mir weiterhelfen, durch Suchen bin ich bisher nur auf den Code oben gekommen.

    Ps. die "Wände" sind eines von Win`s Holz-Fotos, finde deine Seite ganz toll und hoffe du bis nicht böse das ich das hier einfach mal für mein Beispiel verwende.
    Bilder
    • ki_versuch.gif

      29,13 kB, 392×652, 317 mal angesehen
    Dateien
    • Ki_Versuch.zip

      (18,14 kB, 140 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Jokohono ()

  • Hey. Ich denke diese Funktion sollte dir weiterhelfen


    mp_grid_path(id,path,xstart,ystart,xgoal,ygoal,allowdiag) Berechnet einen Pfad durch das Gitter. "path" muss einen existierenden Pfad angeben, der durch den Computerpfad ersetzt wird. "xstart" und "ystart" geben den Start und "xgoal" und "ygoal" das Ziel an. "allowdiag" gibt an, ob diagonale Bewegung zulässig ist statt nur horizontaler oder vertikaler. Die Funktion gibt wieder, ob sie erfolgreich einen Pfad gefunden hat. (Beachte, dass der Pfad unabhängig von der aktuellen Instanz ist; es ist ein Pfad durch das Gitter, nicht ein Pfad für eine besondere Instanz.)
  • LOL, im Moment steuert er geardewegs auf das Ziel zu, um es dann zu umkreisen und sich dann hoffnungslos zu verirren - denke da hapert`s ganz massiv an der Feinabstimmung.

    Auch wenn ich jetzt gerade mit der Align to Grid - Funktion arbeite sage ich schon mal vielen Dank für deine Hilfe, werde noch ein bisschen an der Lösung feilen und das "fertige" Produkt dann nochmal reinhauen und dann den Thread schließen.
  • WEGFINDUNG
    Ohoh... hoffentlich frisst mich bei der Überschrift keiner auf.
    Ich werde einfach mal an meinen alten Thread anknüpfen um nicht noch einen neue Wegfindungsfrage zu eröffnen da es davon ja schon genug gibt.
    Also als ich das letzte Mal diese Frage gestellt habe, war das meiste noch ein bisschen zu hoch für mich und ich habe diesen Abschnitt ruhen lassen und mich mit anderen Dingen beschäftigt.
    Da diese Diese jetzt aber größtenteils (leider/Gott sei dank) fertig sind muss ich wieder auf die alten Probleme zurückkommen und diese nun hoffentlich und endlich lösen.

    Die Wegfindung der Gegner funktioniert dank des tollen Tutorials von Glowing Orb ( Wegfindung mit den „mp_grid“ - Funktionen ) allerdings würde ich mir wünschen, dass der Gegner klare und deutliche Sprünge genau wie der Spieler macht um diese dann zu zählen und auf eine bestimmte Menge an Schritten zu beschränken.

    Ps. das Example ist *.gmk
    Pps. Shift bewegt das Monster nicht die Leertaste wie in der Hilfe angegeben.
    Dateien
    • Wegfindung.zip

      (10,42 kB, 154 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von Jokohono ()

  • Vielleicht hilft dir das weiter: A-Star Algorithm Pathfinding Engine
    Das ist zumindest für gridbasierte Bewegungen (4 / 8 Richtungen) ausgelegt.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Dankeschön @maug und T-Moe das ist wirklich ein tolles Exampel... ich glaube auch herausgefunden zu haben das es die Schritte wie erwünscht zählt "- straight and diagonal costs are now saved in variables which can be changed with AStar_setAll" jetzt suche ich nur noch nach ner Möglichkeit das auch für mich umzusetzen.
  • Nunja... es handelt sich um lokale Variablen für die Schrittpunkte der Gegner. Wenn die Gegner dran sind sollen sie sich fleißig auf ihr Opfer zubewegen - das tun sie ja auch schon wie die obrigen Examples zeigen das Problem ist nun diese Variablen so zu senken das Sie den "Schritten" des Grid`s entsprechen.
    Oder einfach gesagt: Feinde sollen sich nicht in einer fließenden Bewegung sondern sprungweise von einem Feld zum nächten hüpfen bis sie beim "Ziel" angekommen sind.
    Die Grundidee ist das sich Feinde genauso Schrittweise wie auf einem Schachbrett (auf dem nur Bauern stehen) immer nur Schritt für Schritt auf das momentan ausgewählte Ziel zubewegen, solange bis ein lokale Variable ihnen sagt das sie keine Schritte mehr haben und sie dadurch stehen bleiben.
    Wer ihr Ziel ist ergibt sich aus dem einfachen Vergleich der Lebenspunkte und der Entfernung, sprich ein halbtoter Held ist interessanter als ein völlig gesunder, kann das Monster den geschwächten aber erst in 4 Runden erreichen nimmt er den schwächsten welchen er noch in der gleichen Runde erreichen kann.
    Ich brauche also ein Script das es mir erlaubt (nicht die reine Entfernung, sondern ) die Felder die sich zwischen Monster und Held befinden zu berechnen. Erschwerend kommt hierbei noch dazu das keine diagonalen Schritte erlaubt sind und es sich um 64x48 Pixelfelder handelt, diese sind also nicht genau quadratisch.

    Ps. ich würd mir ja sogar die Mühe machen und das ganze in einer 400 Meter langen Wenn/Dann Funktion enden lassen. Frei nach: if (Held = "links von dir" Monster.x - 64) und so weiter und so weiter aber dann sterbe ich spätestens bei den Mauern an Altersschwäche.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Jokohono ()

  • Sorry für den Doppelpost aber ich hab das Problem noch nicht gelöst.
    Ich hab nochmal ein Beispiel angehängt und vielleicht hat jemand eine Lösung für die Umsetzung oder es hilft dem einen oder anderen zu sehen wie ich es haben möchte und er hat einen noch besseren Weg dafür.
    Zuerst Shift drücken, dann Leertaste (mehrmals) um zu sehen wie der grüne Kasten weiterhüpft.
    Dateien
    • Wegfindung2.zip

      (17,96 kB, 128 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Jokohono ()

  • Benutzer online 1

    1 Besucher