Fußball computer KI

  • Fußball computer KI

    Hallihallo liebe comunity,


    ich arbeite schon seit geraumer zeit an einem Fußballspiel und es ist mir auch wunderbar gelungen einen 2-spieler-modus zu machen nur dann.....wurde ich leider etwas größenwahnsinnig (für meine verhälltnisse^^) und will jetz eine computer KI erstellen das der computergegner folgt brav dem ball das is ja auch nicht so schwierig.... aber ich schaffs nicht ihm gravitation zu geben und auch nicht das er immer versucht den ball ins tor zu schießen schauts euch einfach mal an dann werdet ihr merken was ich mein



    mfg johannski


    Edit: sorry wegen der nicht vorhanden grafik ich hab sie rausgenommen damit das ganze nicht 3 mb groß ist
    Dateien
    • fußball5.rar

      (363,21 kB, 125 mal heruntergeladen, zuletzt: )

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

  • RE: Fußball computer KI

    aber dann würde er ja nur am boden rennen.....kann ich das auch ändern......
    und wegen tor schießen was is wenn er auf der falschen seite des balls steht dann schießt er ja n eigentor....


    oh und aja es hatte noch ein paar bugs weil ichs geändert hab...jetz die version die noch am ehesten funzt ^^

    mfg johannski
    Dateien
    • fußball5.rar

      (363,21 kB, 124 mal heruntergeladen, zuletzt: )

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

  • mach anstatt move_towards_point das hier:

    GML-Quellcode

    1. dir=point_direction(x,y,ball.x,ball.y)
    2. x+=lengthdir_x(*speed*,dir)
    3. y+=lengthdir_y(*speed*,dir)

    und wenn du nicht willst das er den ball in sein eigenes tor schießt, dann frag ab ob x kleiner als x des balls ist und lass ihn dann drüber springen
  • das mim ball drüberspringen leuchtet mir ein nur das gml zeug versteh ich nicht und ich wollts statt
    meinem move to ding einsetzen habs aber anscheinend nicht richtig angepasst.... ich habs so gemacht:
    dir=point_direction(x,y,object1.x,object1.y)
    x+=lengthdir_x(*speed*,direction)
    y+=lengthdir_y(*speed*,direction)

    und dann kommt das:

    img249.imageshack.us/my.php?image=fehlerfp0.png


    mfg johannski
  • ok das hat geklappt aber jetz zuckelt er komsich durch die gegend....
    leider is das mim ball dahinterstellen auch schwerer als ich dachte ich habs mir so vorgestellt:
    computer

    if object1.x larger than computer.x
    object1.x+5

    nur das problem is das gleiche wie am anfang da das dann irgendwie alle physikalische kräfte ausschaltet( das )

    hier noch die datei damit du weißt das ich mim zuckeln mein...



    mfg johannski
    Dateien
    • fußball5.rar

      (363,23 kB, 103 mal heruntergeladen, zuletzt: )
  • ok sehr gut ich komm schon weiter...... aber wie immer eine frage hab ich noch
    und zwar wie kann ich flächendeckend abfragen ob dort ein objekt is also das nur halt nich auf einen punkt sondern auf eine line bezogen...

    mfg johannski


    Ps: wieso kann man eigentlich nicht mit move to postion arbeiten wieso funzt dann die gravi nicht mehr :(
  • Das geht zwar nicht mit D&D, aber mit GML. Dafür gibt es unter anderem diese Funktionen

    • collision_rectangle(x1,y1,x2,y2,obj,prec,notme) Für Kollisionen des Objektes obj mit dem Rechteck, das durch x1,y1,x2 und y2 definiert wird.
    • collision_line(x1,y1,x2,y2,obj,prec,notme) Für Kollisionen des Objektes obj mit der Linie, die durch x1,y1,x2 und y2 definiert wird.


    Für weitere Informationen ist das entsprechende Kapitel in der Hilfe ganz lehrreich.
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum
  • ohh man ich hätt nie einen neuen beitrag anfangen sollen zuerst mal danke windapple für die coole seite muss ich mir unbedingt mal alles durchlesen boa das wird dauern naja....

    aber bis dahin...muss ich euch leider noch weiter nerven
    ich hab noch nie selbst auch nur irgendwas mit gml gemacht deswegen is es auch schief gegangen....ich zeig euch mal was is fabriziert hab....

    Quellcode

    1. {
    2. if
    3. collision_line(8,50,8,0)
    4. }


    ähm nur leider weiß ich nicht wie ich noch relativ einfügen kann und wieso es so hohe zahlen wie die zahl 50 nicht mag....


    mfg johannski
  • ok sehr gut hab ich verstanden irgendwie logisch nur es kommt die fehlermeldung das zu wenig arguments sind....war wahrscheinlich meine schuld weil ich euch mit meinem "code" so verwirrt hab ein bissl rumgelesen (auf windapples seite danke noch mal) und dort stand das so:
    collision_line(x1,y1,x2,y2,obj,prec,notme)

    nur leider hatte und habe ich keine ahnung was prec oder notme bedeuted



    ich wollt jetz mal weitermachen damit ich nicht noch mehr scheiße posten muss und hab mal selbst versucht den code weiterzumachen ich will wenn die line free of collision is das er dann dort hingeht....ich hab mir das dann so gedacht

    GML-Quellcode

    1. if
    2. (collision_line(x+8,y+50,x+8,y))
    3. {
    4. mp_linear_step(x+8,y,stepsize,checkall)
    5. }


    nur da wird sicher wieder ein fehler sein ich schätz mal das ich für stepsize und checkall was einsetzen muss nur weiß leider nicht was....oder is es auch einfacher das mit gml auszudrücken.....





    mfg johannski .....ich kenn nicht viele leute die so viel geduld haben wie ihr großes lob :)
  • ahhh ok klar hätt mir aber auch einfallen können -.- ....danke
    aber jetz is immer noch das problem:



    mfg johannski

    wenn ihr das genaue problem beschrieben lesenb wollt lest euch bitte den vorherigen beitrag von mir durch der leider fast ganzlich ignoriert wurde :(
  • collision_line(x1,y1,x2,y2,obj,prec,notme)

    Wenn du diese Angabe mit deiner Meldung vergleichst siehst du, das du nur 4 der 7 benötigten Parameter angegeben hast. Daher die Fehlermeldung.
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum
  • prec = präzise.
    Wenn true, dann präzise Kollision der Objekte aktivieren

    notme = nicht ich.
    Wenn true, dann wird nicht das aktuelle Objekt mit einbezogen. D.h. wenn du z.B. mit dem obj_ball überprüfen willst, ob auf einer Linie obj_ball liegt, aber das eigene Objekt drauf ist, es aber nicht mitgezählt werden soll, auf true setzen.

    Wenn ich richtig verstehe, wie du's brauchst, dann ist das hier richtig ("dein_objekt" natürlich noch ersetzen ;) :(

    GML-Quellcode

    1. if (collision_line(x+8,y+50,x+8,y,dein_objekt,true,true))
    kostenlose Android-Spiele:
    hexavirScribble Triple

    Mr. Peperonico auf Facebook