Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi KI Problematik: Gegnern ausweichen (https://www.delphipraxis.net/66933-ki-problematik-gegnern-ausweichen.html)

Antigo 6. Apr 2006 16:18


KI Problematik: Gegnern ausweichen
 
Hi,
Ich habe ein größeres Problem. derzeit programmiere ich an einem 2D Fussball Spiel und bin nun mit den grundlagen durch. Jetzt geht es daran die KI für die computer gesteuerten Spieler zu schreiben. Hier bin ich jetzt soweit, das der KI gesteuerte Gegner guckt wo der ball ist, daraus ein winkel, und aus dem winkel wiederrum eine richtung errechnet in die er gehen muss um den Ball zu kriegen. Soweit noch kein so großer problem.
Jetzt muss der KI Spieler aber gucken ob in der Richtung, in die er gehen will nicht schon ein anderer Spieler ist.
Bei der normalen Kollision, bei der nur überprüft wird ob ein anderer Spieler direkt vor einem ist, oder man an einer wand steht ist es relativ einfach. Ich berechne die Koordinaten an denen der Spieler wäre, wenn er vorwärts ginge, und gucke ob er dann auf einem anderen Spieler "drauf" wäre. Ist dies der fall darf man halt nicht gehen, sonst darf man es.
Hier ist es jetzt aber schwieriger, weil ich nach vorne schauen muss. Könnte der Spieler nur nach rechts und links, oben und unten gehen, wärs auch einfach, aber der spieler kann halt in jede Richtung gehen (bzw. in 60 verschiedene, irgendwo muss ja eine Grenze sein).
Hier mal ein Bild: die graue Zone ist die die frei sein muss, damit der spieler gehen kann. Ist jemand in dieser zone drin, oder grenzt an diese an, soll die ki solange die richtung verändern bis die graue Zone frei ist und sich dann dem Ball wieder annähern.
http://img20.imageshack.us/img20/6623/bild1sh.jpg

Hat vielleicht jemand eine Idee wie ich das überprüfen könnte. Ich hatte schon ein paar ideen aber irgendwie wär das zu aufwenig. Zum Beispiel hatte ich mir gedacht ich mache endlich viele kleine Schritte mit dem Spieler und gucke ob ich kollidieren würde. wenn das nicht passiert ist der weg frei, wenn doch wird die richtung geändert und wieder überprüft. Dafür müsste ich aber jedesmal den Spieler mit allen anderen Spielern verrgleichen und das in mehreren positionen. Das wär einfach zu viel.

Wär super wenn mir jemand helfen könnte.

danke im vorraus :)

Ratte 6. Apr 2006 17:16

Re: KI Problematik: Gegnern ausweichen
 
Schau mal hier. vielleicht findest du da was passendes.
mfg,
Ratte

Antigo 6. Apr 2006 17:46

Re: KI Problematik: Gegnern ausweichen
 
danke für den link, kannte ich noch nicht und scheint sehr gut zu sein. Leider nützt mir das (glaube ich) nicht viel, da die seite ja methoden aufzeigt wie ich bestimmte sachen berechnen kann, ich aber wissen will wie ich das problem überhaupt lösen soll.

was natürlich perfekt wäre, wär eine formel, mit der ich prüfen kann ob ein bestimmter punkt innerhalb eines rechtecks liegt. Prinzipiell ja kein Problem, aber in meinem fall liegt das rechteck ja schief im raum. Ich hab ganz ehrlich gesagt keine ahnung wie das geht, obwohl ich nicht grad der dümmste in mathematischen sachen bin. Vielleicht seh ich auch nur den wald vor lauter bäumen nicht.


vielleicht hat ja sonst noch jemand eine idee ?!

edit:
Ich habs jetzt einfach mal so geschrieben. Die Figur "geht" 10 Schritte imaginär vorwärts und überprüft jedesmal ob es eine Kollision gibt. Ist dies der Fall dreht sie nach rechts und der ganze spass geht von vorne los. Funktioniert zwar, ist aber meiner meinung nach viel zu uneffektiv udn wird später wenn alle Figuren (bis jetzt ist es nur eine) so gesteuert werden bestimmt zu langsam.

Antigo 8. Apr 2006 09:30

Re: KI Problematik: Gegnern ausweichen
 
schade das mir niemand helfen konnte/wollte. Ich hab es jetzt meiner Meinung nach besser gelöst, optimal ist es aber sicherlich immer noch nicht. Ich spanne jetzt mit 2 vektoren eine Ebene auf die orthogonal zur richtung des spielers steht und quasi so aussieht wie in dem bild in meinem ersten post. Dann beschreibe ich die mittelpunkte der anderen Spieler mithilfe dieser beiden vektoren und gucke ob die parameter die dafür nötig sind größer als eins ode rkleiner als null sind. So spare ich mir schonmal um die 100 schleifendurchläufe.
Die Mathematik der 12. Klasse kann man also tatsächlich vernünftig anwenden :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz