KI
-
Hi,
wie kann ich eine KI programmieren?
Ich wollte ein kleines Spiel Programmieren (ohne Grafik) und für die Feinde brauche ich natürlich eine KI. Falls das zu viel ist müsst ihr mir keine ganze KI erklären, ich denke ein kleiner Anschubser meines Gehirns sollte reichen, denn ich hab iwie keinen blassen schimmer wie das gehen soll.
Mfg Yazoo
-
Schach, Wegfindung, ...??? Was willst du?
-
Du weißt schon, daß deine Frage "ein wenig" ungenau ist, oder?
Allein der Begriff "Künstliche Intelligenz" ist sehr weitgefaßt...
DU mußt dir einfach Gedanken darüber machen, was du von der KI erwartest (bezogen auf dein Spiel).
Wenn du Berechnungen zur Wegsuche benötigst, dann such mal im Internet nach den Begriffen "Dijkstra" (Graphensuche) sowie "A*" (A Star bzw. A-Stern).
-
das spiel soll heißen UBoot Jagt. Du bist ein UBoot und musst mit Torpedos boote abschießen. und die wollen dich abschießen.
-
Schön! Habe ich vor ca. 20 Jahren auch mal auf einem C-64 (oder war's ein C-16?) mit BASIC programmiert.
Aber wo ist jetzt dein konkretes Problem?
-
Yazoo schrieb:
das spiel soll heißen UBoot Jagt. Du bist ein UBoot und musst mit Torpedos boote abschießen. und die wollen dich abschießen.
sowas wie "Schiffe versenken"?
-
ich sag's dir jetzt mal in der theorie: du bist ziemlich ungenau, aber egal:
du musst halt anfangen:
if(gegner-links)
{
shot(links);
}if(player1shoots)
{
driveaway();
}jetzt hast du wenigstens einen minimalen blassen schimmer, wie das "gehen soll".
-
ich gebe zu meine frage ist ungenau, ich wusste nicht wie ich die frage genauer stellen sollte.
Jetzt habe ich eine konkretere frage:
Angenommen ich habe alles vorbereitet das es so aussehen kann, wie XaTrIxX sagte:
XaTrIxX schrieb:
if(gegner-links)
{
shot(links);
}if(player1shoots)
{
driveaway();
}wie mache ich das nun? Packe ich das ganze in ne funktion? Wenn ja wann rufe ich die Funktion auf? Wenn nein, wie mache ich das dann?
PS: Kann sein das es immer noch etwas ungenau ist.
-
Benutz dazu Threads und lass in einer endlosscheife überprüfen welche flags gesetzt sind, und dann machst du die dazu passende aktion
-
Yazoo schrieb:
wie mache ich das nun? Packe ich das ganze in ne funktion? Wenn ja wann rufe ich die Funktion auf? Wenn nein, wie mache ich das dann?
Mit Deinem zur Schau gestellten Kenntnisstand - es tut mir leid - wahrscheinlich garnicht...
viel Glück
greetz, Swordfish
(Jaja, haut mich für das Posting, aber es musste sein...)
-
also threads würde ich dafür eher weniger verwenden...
das muss ja nicht die ganze zeit überprüft werden...
mache z.b. eine funktion processEvent (z.b. als memberfunktion von den ki gesteuereten objekten) oder sowas die alle daten bekommt was wichtig sind für die folgende aktion...
und dann erst wenn der spieler etwas macht z.b. bewegen oder schiessen dann rufe von allen "gegner" die das intressieren könnte die proccesEvent funktion auf und übergib als parameter eben den neuen spieler zustand oder sowas
-
Schau mal nach "State Pattern Design", Beispiel:
http://www.henkessoft.de/Roboter/Nibo.htm (ganz unten, Roboter flüchtet vor Hindernissen, Du kannst zusätzlich darauf schießen, ansonsten gleiches Prinzip.)Link:
http://www.ai-junkie.com/architecture/state_driven/tut_state1.html
http://www.ai-junkie.com/books/toc_pgaibe.htmlFang bloß nicht mit if/else-Spagetti-Code an, wie damals auf dem C64.
-
schiffeversenker schrieb:
Benutz dazu Threads und lass in einer endlosscheife überprüfen welche flags gesetzt sind, und dann machst du die dazu passende aktion
Ich hab mich ma bei wikipedia nach threads umgeschaut und muss sagen ich habe nur die hälfte verstanden.
Fragenzu threads: 1. Ist ein thread einfach gesagt eine rutine die im hintergrund, also gleichzeitig mit dem eigentlichen Programm abläuft?
2. Wie erstellt man einen solchen thread und was muss man beachten?EDIT: Sry habe wohl zu lange getippt und die letzten beiden beiträge nicht gesehen.
-
ja das state pattern is eine schöne sache
damit arbeite ich auch... aber es soll ja um ein kleines spiel gehen... da wäre eine fsm meiner meinung nach mit kanonen auf spatzen geschossen
also zumindest vom tipp aufwand... kommt halt ganz drauf an wie flexibel und erweiterbar und performant und ähnliches das ganze sein soll
mal abgesehn davon hatman dann keine if else im spielobjekt(bzw boot oder so) sondern halt in der fsm bzw deren zuständen...dann is der nicht ganzsoschlimme aber dennoch spagetti code halt wo anders.... das is alles eine design/anforderungs/zeit-frage...komplett ohne if/else kommt man halt doch nicht aus...
-
komplett ohne if/else kommt man halt doch nicht aus...
Ja, diese Gabelung ist wohl eine Grundfunktion des Lebens.
Man sollte aber gerade in Spielen die Abläufe übersichtlich und lesbar gestalten. Daher der Tipp.
-
naja deine gegner wissen zum zeitpunkt X wo du bist, und schiessen eine tropedo ab welche den weg des vektors von gegner in richtung zu dir haben.
Währendessen die torpedos deiner gegner unterwegs sind, kann du dich ja bewegen, d.h. sie treffen dich nur wenn du dich von der ursprungsposition zum zeitpunkt X weg bewegst..so das ist ne ganz einfacher anschupser.. viel KI musst nich tun
-
vielen vielen dank, das hat mir sehr geholfen.
Trozdem würde ich noch gerne wissen was ich hier gefragt habe:
Yazoo schrieb:
schiffeversenker schrieb:
Benutz dazu Threads und lass in einer endlosscheife überprüfen welche flags gesetzt sind, und dann machst du die dazu passende aktion
Ich hab mich ma bei wikipedia nach threads umgeschaut und muss sagen ich habe nur die hälfte verstanden.
Fragenzu threads: 1. Ist ein thread einfach gesagt eine rutine die im hintergrund, also gleichzeitig mit dem eigentlichen Programm abläuft?
2. Wie erstellt man einen solchen thread und was muss man beachten?thx
-
1. Im Grunde ja, allerdings muss man dabei eine *Menge* Dinge beachten.
Insbesondere Variablen die zwischen den beiden Threads geteilt werden sind kompliziert zu beherrschen.2. Entweder du greifst auf Plattform-abhängige Mittel zurück (WinAPI, pthreads) oder du nutzt eine Library wie boost::thread.
-
Windows Game Programming for Dummies von André La Mothe. Ich hab hier zwar nur das (ältere) "Game Programming for Dummies" (gleicher Autor und Verlag) herumliegen, aber das beinhaltet auch ein nettes Kapitel über Spiele-KI und unterschiedliche herangehensweisen (Verhaltensmuster der Gegner, Suche, Pathfinding, blah)
hth
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.