KI für Top-Down-Shooter

    • Diskussion

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

    • KI für Top-Down-Shooter

      Einige erinnern sich vielleicht noch an mein Top-Down-Shooter-Spiel, das ich vor längerer Zeit im K&E-Thread schon einmal vorgestellt hab.
      Die Arbeit daran ging mit vielen Unterbrechungen weiter, und in den letzten Tagen hat die KI der Gegner-Figuren einen Status erreicht, in dem man ihr Verhalten als annähernd realistisch bezeichnen kann.

      Nun möchte ich die Frage an euch weitergeben, was die KI so taugt und wie intelligent sie wirkt. Über Verbesserungsvorschläge, Ideen zum Verhalten der KI und Bug-Meldungen würde ich mich sehr freuen.

      ki_test.zip (Jetzt auch Vista-Ready)

      Hinweis: Das Spiel befindet sich im frühen Pre-Alpha-Stadium, in dem noch an der Engine gearbeitet wird. Für die KI-Demo hab ich auch ein paar bereits funktionierende Features entfernt. Die Grafik ist ebenfalls noch alles andere als final, wahrscheinich bleibe ich nicht beim WW2-Szenario.

      Steuerung:
      WASD - Bewegen
      Linke Maustaste - Schießen
      'R': Nachladen
      '1','2': Waffe wechseln.
      'Q': Waffe genauer betrachten

      Zur Demonstrationszwecken ist der Gegner in dieser Demo immer sichtbar. Im Spiel wird er unsichtbar, sobald er sich außerhalb des Sichtbereichs des Spielers befindet. Außerdem ist der Spieler unsterblich.

      Eingebaute KI-Routinen:

      -) Schrecksekunde: Wenn der Gegner den Spieler zum 1. Mal sieht, tut er für ca 1 Sekunde nichts. Bei einem 2. Zusammentreffen innerhalb von 30 Sekunden tritt die Schrecksekunde nicht auf. Die Schrecksekunde wird durch ein Rufzeichen über dem Kopf des Gegner symbolisiert. Ein Auge bedeutet, dass sich der Spieler im Sichtbereich des Gegners befindet.

      -) Schießt auf den Spieler: Sobald sich der Spieler im Sichbereich (180° um Umkreis von 350 Pixel) des Gegners befindet, schießt er auf ihn.

      -) Verfolgt den Spieler, sobald er aus dem Sichtbereich verschwindet. Er sucht meistens unterschiedliche Wege zum Spieler. Sollte er den Spieler nicht innerhalb von 30 Sekunden finden, bricht er die Verfolgung ab.

      -) Gehör: Wenn der Spieler schießt, dreht sich der Gegner in Richtung der Lärm-Quelle

      -) Eigenes Magazin: Der Gegner schießt nur, wenn er genügend Munition hat. Wenn nicht, lädt er nach.

      -) Eigene Health: Regeneriert selbständig nach gewisser Zeit
      Dateien
      • ki_test_vista.zip

        (1,04 MB, 273 mal heruntergeladen, zuletzt: )

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

    • Also ich finde die KI richtig gut. Auch die anderen Spiele effekte find ich klasse. Hatte zwar eine Fehler meldung als ich mit die Waffe "Q-taste" genauer anschauen wollte aber bevor die meldung kamm fand ich schon diesen Blur efekt cool.

      Na egal. Die Ki ist soweit ganz gut. Man sagt ja der Computer macht nur das was man ihn sagt. Also mus man ihn auch sagen wie man etwas nicht macht oder einen Fehler macht.
      Wo ich hinaus will ist. Da der gegner ja immer zum Spieler läuft. Lass den gegner doch ab und zu mal zu einer Spieler position laufen die schon ein Sekunden alt ist.
      Somit würde es menschlicher wirken und die KI muss ja auch mal Fehler machen.

      Du kanst ja die x,y pos per zufall, od wen die sichtline besteht zwischen speichern und dann auch nur wenn ein zufall ist die KI dort hin schicken +- Random wert.


      Und ganz große klassen sind Sprites auch so wie das Softe Ausblenden der Wände. Solche kleien feinheiten find ich immer echt toll. Weiter so und bin gespant was raus wird
      Meine Signatur hat kein Visum für das GM Forum erhalten.
    • Erstmal danke für das Lob, ich geb mir Mühe ^^

      x-sascha schrieb:

      ... Hatte zwar eine Fehler meldung als ich mit die Waffe "Q-taste" genauer anschauen wollte aber bevor die meldung kamm fand ich schon diesen Blur efekt cool.
      Welche Fehlermeldung kam denn da genau? Der Blur-Effekt stammt leider nicht von mir, sondern von Verwurster. Werde das natürlich auch im fertigen Spiel anmerken.

      x-sascha schrieb:

      Lass den gegner doch ab und zu mal zu einer Spieler position laufen die schon ein Sekunden alt ist.
      Somit würde es menschlicher wirken und die KI muss ja auch mal Fehler machen.
      An so was in der Art hab ich auch schon gedacht. Dass der BOT dorthin geht, wo sich der Spieler "eigentlich befinden müsste", sobald er um eine Ecke gebogen ist. Werde darüber nachdenken, wie ich das einbaue. Danke! :)

      x-sascha schrieb:

      Und ganz große klassen sind Sprites auch so wie das Softe Ausblenden der Wände.
      Auch da muss ich dich leider enttäuschen, die Sprites stammen nicht von mir, sondern aus dem Internet. Bis auf das Gewehr im HUD, das kann man sich im Pixel-Thread anschauen.
    • da fällt mir nur eine sache auf die man verbessern könnte.

      ich stehe links von der wand, der gegner rechts....

      nun läuft der gegner je nachdem wie weit "oben" ode r"unten" ich am screen bin in eine besitmmte richtung, jedoch ändert er die richtung schlagartig falls ich ihm entgegenlaufe auf der anderen seite, was bedeutet dass er immer weiß wo du bisd (klar), und das sieht man eben da er die wand nicht zuende entlang läuft sondern ohne dass ich geräusche mache wieder umkehrt.

      bei längeren labyrinth-artigen mauern, kann das auch zu problemem führen, da er möglicherweise an einer mauer hin und her läuft ohne wirklich weiter zukommen, man kann den PC so richtig verarschen.



      btw: wenn man "q" nicht gedrückt hält bis die "animation" zuende ist, dann friert das spiel ein, oder zumindest mein spieler, hab ich nciht genau getestet,.

      bevor ich wieder weiterlaufen kann muss ich nochmal "q" drücken, diesmal wirklich solange bis die animation zuende ist, sonsd bleibts imemr noch stehn
    • anti0ogen blau schrieb:

      ich stehe links von der wand, der gegner rechts....

      nun läuft der gegner je nachdem wie weit "oben" ode r"unten" ich am screen bin in eine besitmmte richtung, jedoch ändert er die richtung schlagartig falls ich ihm entgegenlaufe auf der anderen seite, was bedeutet dass er immer weiß wo du bisd (klar), und das sieht man eben da er die wand nicht zuende entlang läuft sondern ohne dass ich geräusche mache wieder umkehrt.
      bei längeren labyrinth-artigen mauern, kann das auch zu problemem führen, da er möglicherweise an einer mauer hin und her läuft ohne wirklich weiter zukommen, man kann den PC so richtig verarschen.
      Ich denke das fällt im Spiel selbst nicht so stark auf, da der Gegner unsichtbar wird, sobald der Spieler ihn nicht sieht. Da bemerkt man auch nicht, dass der Gegner sich relativ unrealistisch verhält, wenn er versucht, sich um eine Mauer zu bewegen. Der positive Nebeneffekt ist aber, dass es so aussieht, als wolle er den Spieler immer in den Rücken fallen.

      anti0ogen blau schrieb:

      btw: wenn man "q" nicht gedrückt hält bis die "animation" zuende ist, dann friert das spiel ein, oder zumindest mein spieler, hab ich nciht genau getestet,.

      bevor ich wieder weiterlaufen kann muss ich nochmal "q" drücken, diesmal wirklich solange bis die animation zuende ist, sonsd bleibts imemr noch stehn
      Ja, dieser Fehler ist mir bekannt, aber nicht so gravierend, deshalb hab ich mir auch noch nicht so viel Gedanken über seine Behebung gemacht. Bis zum fertigen Spiel werd ich mir da aber etwas überlegen. :)

      @The Gamer: Ich glaube, das geht zu sehr ins Off-Topic. Ich schick dir morgen eine PM, da kann ichs dir erklären.
    • ich hätte noch nen Vorschlag:
      Es ist ein bischen unrealistisch das der gegner stehen bleibt wenn er ihn nicht sieht vieleicht eine zufallsgesteurte bewegung? ;)
      oder wenn er den spieler nicht mher seiht geht er kurz zum lketzten standpunkt des spielers wo er ihn gesehen hat und guckt nochmal nach und erst nach 3 sek umschauen geht die zufallschgesteurte bewegung weiter

    • Er sollte ein Sichtfeld haben, dann sich sinnvollerweise ab und zu umdrehen, oder allgemein drehen um zu schauen.
      Wenn du an na Mauer vorbei rennst, sollte er bei verlorenem Sichtkontakt zur letzten Position laufen wo er dich gesehen hat, oder evtl. einen alternativen Pfad suchen, um den weg abzuschneiden. Vielleicht beides und eines davon auswählen.
      Wenn er dich garnicht sieht, sollte er sich zumindest drehen ab und zu um zu schauen, was los ist, vielleicht patroulieren.
      Ich weiss nicht, ob er jetzt ein Gegner in nem Spiel mit Story sein soll, oder ein gleichwertiger Bot.
      Bei 2. Würd ich halt schauen, was ich mache wenn ich sowas spiele.
      Sinnvoll ist es halt, die Sicht für alles zu vernebeln was man nicht sehen kann, sonst ists zu leicht und Verstecke bringen nix.
      So far, Schattenphoenix~
      _____________________________________________________________________________
      "Who needs a stairway to heaven...
      If there is an elevator to hell... ?
      "
      - Vergessen
      "Auch ein perfektes Chaos ist etwas vollkommenes."
      - Jean Genet
    • So ich habs mir heute nich mal angeschaut
      Auch da muss ich dich leider enttäuschen, die Sprites stammen nicht von mir, sondern aus dem Internet
      das ist mir eigentlich egal. Ich hab mich da nicht so kleinlig wie so manch andere. Das internet ist für alle und wenn man was findent was man gebracuhen kann kann man das ruihig nehemen.

      Aber egal. Das error ist immer noch bei mir


      Ich hatte auch mal versucht einereine KI zu machen und ich bin das von einer anderen seit an gegangen. Und zwar hab ich die MEthode aus Counterstrik bzw Counterstrike 2d.
      Ich habe das über Weg punter gemacht.

      Eventuel kannsz du das ja auch machen. Das der Computer immer für einen Aktione eine Information benötig. Setzt du an wichtigen Schlüssel positionen eine weg-marke hin ich nnne das jetzt mal
      obj_waypoint

      So und fall der spieler nicht mehr sicht barist, kann er per zufall enscheiden, ober er weiter hin der Spielr x/y Pos folgt. oder ober er zum ncäst gelegenen Weg_punkt geht.

      GML-Quellcode

      1. instance_nearest(x,y,obj_waypoint)
      2. genauer gesagt.
      3. ziel x=instance_nearest(x,y,obj_waypoint).x
      4. ziel y=instance_nearest(x,y,obj_waypoint).y

      ja und somit denke ich hat es einen etwas realistischen und Strategieschen beigeschmak der KI.

      Mann kann sich ja das soviel austoben mit der KI. im prinzip kannst du 1000 mögliche varianten machen wie sie reagieren soll. aber die wichtigsten funktionen reichen. Aber falls du es nicht für dein spiel brauchst wäre es richtig cool wenn du ne Engine draaus machst. mit Optionen die man sich anschaun kann, so änlich wie die bekanten partikel engines auf yoyogames.
      Meine Signatur hat kein Visum für das GM Forum erhalten.
    • Wenn du mit Wegpunkten arbeiten willst, würde ich ein Grid oder 2D Array empfehlen in dem steht ob dieser Punkt zulässig ist.

      z.B. so (nur zur veranschaulichung):

      waypoint[0,0]=1;
      waypoint[0,1]=1;
      waypoint[1,0]=0;
      waypoint[1,1]=0;

      Die oberen beiden kann man betreten, die unteren beiden nicht.

      Wenn du dazu passend die Koordinaten anpasst z.B. so:
      waypoint[x/16-1,y/16-1]

      dann kannst du jenachdem wie performant oder genau es sein soll, dein Grid anpassen.

      Natürlich muss sich jemand die mühe machen, bei einem Level dieses Grid zu schreiben, aber das sollte man sich vereinfachen können.
      Du könntest z.B. 2 objekte machen, ein rotes und ein grünes Quadrat und die im Room-Editor platzieren, um Felder als begehbar oder nicht zu markieren.

      Oder du gibst jedem Objekt einen Wert und am anfang des Levels schreibt sich das Grid selber.

      create Event der Objekte:
      begehbar= 0 für nich begehbar, 1 für begehbar

      Room-Create

      with(all)
      {
      grid[x/16-1,y/16-1]=begehbar;
      }
      und dann fragst du in der KI ab, ob der Wert des Ziels gesetzt ist oder auf 0 steht. Wenn nicht, geht er da hin =S


      Klingt verwirrend, weil ich nur Mist laber, aber es sollte umsetzbar sein.
      So far, Schattenphoenix~
      _____________________________________________________________________________
      "Who needs a stairway to heaven...
      If there is an elevator to hell... ?
      "
      - Vergessen
      "Auch ein perfektes Chaos ist etwas vollkommenes."
      - Jean Genet
    • Bei mir kann der Spieler net schießen^^ werde im edit die meldung schicken!
      Dieser Beitrag wurde bereits 192439845 mal editiert, zuletzt von »Schattenpuma« (6. Mai 2012, 00:00)

      Adventures of Smiley ; Van Eckig's Rückkehr. (Dieses nette Banner ist von "Tice" gemacht :3 Dankeschön!)

      Ihr wollt mir helfen? Kritik abgeben? Klickt auf das Banner!
    • Hainisoft schrieb:

      Ich finde der Gegner sollte erst den Weg berchnen und dann gehen.
      Warum? Was ist der Vorteil an deiner Methode und der Nachteil an meiner?
      Btw. müsste der Gegner den Weg ja jeden Step neu berechnen, schließlich ist die Bewegung des Spielers ja nicht vordefiniert.
    • Also ich habe das Problem mit KI schon so oft gelesen und bis jetzt noch keine Vernünftige Lösung gesehen.
      Das mit dem Weg berechnen ist glaub ich, noch nie probiert worden. (Sry, falls ich mich irre)
      Ich hab auch nicht gesagt das die Methode besser ist. ;)

      Vielleicht könnte man machen das der Gegner immer den Weg im Umkreis von 500 Pixeln oder so berchnet und dann in Richtung Spieler geht. Dann kann er gleich sehen: Da ist ein ein Weg oder Da gehts nicht lang.
      Das ist wahrscheinlich verdammt schwer zu programmieren. Aber wenn das richtig klappen würde, denk ich wär das ne ziehmlich gute Lösung. :)