KI/BOT für einen Todownshooter

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

  • KI/BOT für einen Todownshooter

    So...Da bin ich wieder. Ich habe nun das Problem, das ich bis jetzt in meinem Spiel "Mafia Runner 2: Topdown" (wie der Name schon sagt, ein Topdown-Shooter) die Feinde immer an bestimmte Stellen gesetzt hab. Wenn man dann in eine Bestimmte Entfernung kommt, bemerkt der Feind einen, zieht seine Knarre, stratzt auf einen zu. Soweit so gut.
    Aber nun wollte ich es so machen, das es auch Karten (oder eine MOD auskopplung was weiß ich) gibt, in dem man ähnlich wie in Counter-Strike über große Karten rennt, und die Feinde dort so rumlatschen. Aber nicht so, das sie immer nur einen weg ablaufen, sondern, das sie rumrennen, und wenn sie einen sehen, dann auf einen Feuern, oder einen verfolgen. So wie bei Counter-Strike.
    So wie ich das mit den Paths verstanden habe, läuft der Feind dann aber immer nur einen festglegten Pfad, oder? Aus den bisherigen Threads die ich mit der Suchenfunktion gefunden habe war das nicht so klar ersichtlich. Also, wenn einer mal eine gute Idee hat, wie man sowas umsetzen könnte, das es auch nicht nach einem erkennbaren Muster abläuft,der möge sich mal melden. Übrigens: Wer jetzt nicht genau weiß wie ich das in welchem Zusammenhang meine, der kann ja vielleicht mal hier unter downloads nachsehen, da liegt das game als EXE. Mafia Runner 2: Topdown gm-d.de/board/styles/gmaker/smilies/biggrin.gif
    großes Grinsen
    Es macht mich starr vor Furcht und Staunen! (Hamlet, 1. Aufzug, 1.Szene)
  • Eine ziemlich einfache Möglichkeit wäre, Wegpunkte in alle Ecken zu setzen, sodass der der NPC dann dort zufällig seine Richtung wechselt. Wenn der Spieler sich dann innerhalb einer bestimmten Distanz befindet, schiesst dein Bot. Ich foffe, das war einigermassen verständlich.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • theortisch habe ich es verstanden.leider weiß ich praktisch nicht richtig wie ichs umsetzen soll. Könntest du mir das nochmal erklären, wie ich das genau machen soll?

    Soll der NPC dann in einer tour durch die ecken latschen, und zufällig die richtung wechseln? irfgendwie verstehe ich das prinziep nicht richtig!
    Es macht mich starr vor Furcht und Staunen! (Hamlet, 1. Aufzug, 1.Szene)
  • ich glaub er meitn es so das du ein bestimtmes Object auf der Map verteilst... die Bots lässt du nun zufällig auf einen der Punkte zu laufen... sobald der Bot den Punkt erreicht hat wird ein anderer Punkt zufällig bestimmt, wo er als nächstes hinläuft etc.
    Und wenn er auf dieser Wandertour einen gegner "sieht" hört er auf zu den Punkten zu laufen und verfolgt stattdessen den Spieler... sobald der Bot den Spieler aus den Augen verloren hat kannste ihn wieder auf nen Punkt zu laufen lassen!
    Soviel zur theorie... dies umzusetzten dürfte auch nicht zu schwer sein
  • Kann mir einer dafür vielleicht mal ein Code beispiel nennen? Ich hab damit noch nicht so gearbeitet. Neue Möglichkeit also die sich da auftut, schon mal danke im vorraus das ir euch darüber gedanken gemacht habt.gm-d.de/board/styles/gmaker/smilies/biggrin.gif
    großes Grinsen
    Es macht mich starr vor Furcht und Staunen! (Hamlet, 1. Aufzug, 1.Szene)
  • schau di die hilfe an, dort gibt es ein kapitel für mp (motionplaning = pathfinding = wegfindung).

    GML-Quellcode

    1. //create
    2. way = path_add();
    3. map = mp_grid_create(0,0,room_width/16,room_height/16,16,16);
    4. mp_grid_add_instances(map,obj_hinderniss,false);
    5. xgoal = 0;
    6. ygoal = 0;
    7. //alarm[0]
    8. mp_grid_path(map,way,x,y,xgoal,ygoal,true);
    9. path_start(way,speed,0,0);
    10. //step
    11. if ( distance_to_point(xgoal,ygoal) < 4 ) {
    12. var i;
    13. i = floor( random( 4 ) );
    14. switch ( i ) {
    15. case 0 : xgoal = wegpunk0.x;
    16. ygoal = wegpunk0.y;
    17. break;
    18. case 1 : xgoal = wegpunk1.x;
    19. ygoal = wegpunk1.y;
    20. break;
    21. case 2 : xgoal = wegpunk2.x;
    22. ygoal = wegpunk2.y;
    23. break;
    24. case 3 : xgoal = wegpunk3.x;
    25. ygoal = wegpunk3.y;
    26. break;
    27. //ect...
    28. }
    29. alarm[0] = 1;
    30. }
    31. if ( distance_to_point(player.x,player.y) < 64 ) {
    32. xgoal = player.x;
    33. ygoal = player.y;
    34. alarm[0] = 1;
    35. //weitere aktionen
    36. }
    Alles anzeigen
    oh man, jett habe ich es doch fast alles geschrieben ...
    :) Nobody is perfect (-:

    "Dummköpfe sind Denkerköpfen weit überlegen. Zahlenmäßig." Ernst Ferstl
  • hat er das net kommentiert?!!!
    jedenfalls:

    create:

    GML-Quellcode

    1. way = path_add();
    2. map = mp_grid_create(0,0,room_width/16,room_height/16,16,16);
    3. mp_grid_add_instances(map,obj_hinderniss,false);
    4. xgoal = 0;
    5. ygoal = 0;


    alarm[0] event:

    GML-Quellcode

    1. mp_grid_path(map,way,x,y,xgoal,ygoal,true);
    2. path_start(way,speed,0,0);



    step:

    GML-Quellcode

    1. if ( distance_to_point(xgoal,ygoal) < 4 ) {
    2. var i;
    3. i = floor( random( 4 ) );
    4. switch ( i ) {
    5. case 0 : xgoal = wegpunk0.x;
    6. ygoal = wegpunk0.y;
    7. break;
    8. case 1 : xgoal = wegpunk1.x;
    9. ygoal = wegpunk1.y;
    10. break;
    11. case 2 : xgoal = wegpunk2.x;
    12. ygoal = wegpunk2.y;
    13. break;
    14. case 3 : xgoal = wegpunk3.x;
    15. ygoal = wegpunk3.y;
    16. break;
    17. //ect...
    18. }
    19. alarm[0] = 1;
    20. }
    21. if ( distance_to_point(player.x,player.y) < 64 ) {
    22. xgoal = player.x;
    23. ygoal = player.y;
    24. alarm[0] = 1;
    25. //weitere aktionen
    26. }
    Alles anzeigen

    MfG Tricktickler
    Dieser Beitrag wurde 1993 mal editiert, zum letzten Mal von tricktickler: Morgen, 25:60

    Frag doch OnkelGoogle
  • Die Variable davor muss den Index eines Objekt oder einer Instanz beinhalten. So kann man eine Variable eines bestimmten Objekt oder einer bestimmten Instanz. Gäbe es ein Objekt wegpunk3 gibt es auch die Variable wegpunk3 (diese beinhaltet den Index von wegpunk3). Es kann auch eine Id sein.

    Objekt/Instanz.Variable