Registriert: Do Okt 09, 2003 15:28 Beiträge: 14 Wohnort: Bochum
Hallo ihr!
Ich habe nun schon 5-6 Mal angefangen, ein Aufbau-Strategiespiel zu programmieren.
Mein technisches Wissen ist dabei hinreichend, dass ich alle Spielelemente, die man so braucht, implementieren konnte... Aufbau mit Bau-Hierarchien; Ressourcenabbau; RouteFinding; Kampf.
Auch Netzwerkunterstützung würde ich hinbekommen.
Nur an einer Stelle resigniere ich immer vollends.
Und zwar habe ich absolut keine Ahnung wie ich einen intelligenten Computergegner programmieren soll.
Es gibt so viele Teilaspekte einer KI, mit denen ich nichts anzufangen weiss.
- Wie entscheide ich, wo ich meine Basis aufbaue?
- Wie entscheide ich, welche Einheiten ich baue?
- Wie baue ich eine dynamische (terrain/gegner-gerechte) Verteidigung auf?
- Wie entscheide ich, wann ich für einen Angriff gerüstet bin?
- Wie wird der Angriff koordiniert?
Hat jemand vielleicht einen Link, der sich mit diesen und anderen Fragen zu diesem Thema auseinandersetzt?
Ich würde mich darüber sehr freuen. Das ist echt ein absolutes Dunkelthema für mich...
- Wie entscheide ich, wo ich meine Basis aufbaue?
> Es gibts ja wohl einen Startpunkt oder? dem entsprechend würde ich sagen, der soll sich dort aufbauen und in der nähe die neuen Gebäude auch aufziehen.
- Wie entscheide ich, welche Einheiten ich baue?
>Das sollte in einem Random passieren?! Oder Vllt. nehmen wir mal Age of Empire als Beispiel.
>Falls der Computer von einer Burg beschossen wird, baut er Triböcke (bester Angriff gegen die Burg) So muss man mal sehn.
- Wie baue ich eine dynamische (terrain/gegner-gerechte) Verteidigung auf?
>Mh, wäre wohl angebrachte einfach die Beste Verteitigung aufzubauen?!
>Allerdings, hab ich da auch keine so gute Idee gerade ^^
- Wie entscheide ich, wann ich für einen Angriff gerüstet bin?
>Mh, spätestens, wenn die Anzahl der zu bauenden Einheiten voll ist...
>Ich habe es bisher immer so erlebt, das die Gegner (egal in welchem spiel) Immer kleiner Stoß Trupps gebaut haben.
- Wie wird der Angriff koordiniert?
>K.A.
Weiß net ob dir das was bringt aber, naja, nen Versuch wars wert
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Kleiner Tipp : Es heisst Strategie, ohne H.
Escudo hat geschrieben:
- Wie entscheide ich, wo ich meine Basis aufbaue?
Ich würde das Spielfeld für die KI in kleine Quader unterteilen, und jedem Quader eine Bewertung geben wie brauchbar der denn eigentlich ist. Also z.B. ein flacher Quader (gut bebaubar) neben einem Erntefeld (wenns sowas bei dir gibt) bekommt ne hohe Bewertung, während ein Feld das unbebaubar und fern jeder Erntequelle ist eine niedrige Bewertung bekommt. Dann sollte die AI immer meherer Felder zusammenlegen und diese prüfen. Hast du dann ein großes Areal mit einer insgesamt guten Bewertung, ist das auch ein guter Platz zum Bauen.
Escudo hat geschrieben:
- Wie entscheide ich, welche Einheiten ich baue?
Dazu würde ich (siehe C&C-Generals:Zero Hour) für jede AI eine eigenes Persönlichkeitsprofil erstellen. Die eine Persönlichkeit baut lieber Einheitentyp X, die andere Einheitentyp Y. Ausserdem würde ich dann immer schauen das die AI ausgeglichen baut. Also z.B. nicht nur Panzer, sondern auch Infanterie, etc.
Escudo hat geschrieben:
- Wie baue ich eine dynamische (terrain/gegner-gerechte) Verteidigung auf?
Siehe Punkt 1. Du machst erneut eine Unterteilung des Terrains in Quader, aber diesmal bewertest du nach strategischem Nutzen. Eine Annhöhe, durch die es nur einen Weg gibt (also links und rechts Gebirge, in der Mitte kann man durch) bewertet mann dabei sehr hoch. Dann kannst du anhand der Bewertung sehen welche Terrainteile strategisch wichtig sind.
Escudo hat geschrieben:
- Wie entscheide ich, wann ich für einen Angriff gerüstet bin?
Das ist wohl schwierig. Hier musst du überlegen wie das der menschliche Spieler macht : Der greift im Normalfall an, sobald er eine recht große Truppe hat und sobald die Basis sicher ist. Aber auch hier sollten AI-Persönlichkeitsprofile helfen. Die eine Persönlichkeit rusht lieber (also sehr früh kleine und billige Trupps bauen und angreifen), während sich die andere z.B. lieber einmauert.
Escudo hat geschrieben:
- Wie wird der Angriff koordiniert?
So wie ein menschlicher Spieler. Wenn die AI z.B. die Basis des Gegners angreift, dann würde ich jedem Gebäude eine Bewertung verpassen wie gefährlich dies für die Truppe ist, und auch wie wertvoll das Gebäude ist. Zuerst attackiert die AI dann Gebäude die für die Truppe gefährlich sind, und dann die wichtigen. Bei Einheit gegen Einheit ists noch einfacher : Panzerabwehreinheiten greifen Panzer an, Artillerie bleibt hinten und gibt Unterdrückungsfeuer, usw.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Danke @SoS. Da waren jetzt schon einige Ideen dabei die Ich später mal brauchen könnte.
@Escudo: Wenn du dass Pathfinding hingegriegt hast, sollte die Umsetzung von SoS Ideen dir keine Probleme mehr machen. ICh finde, Pathfinding wesentlich tückischer.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
im spiel master of orion 2 kann der computer grob die armeestärke seiner gegner einschätzen und agiert auch demnach, sprich wenn ich in dem game wenig schiffe hab dann bringt er harte politik und erklärt oft auch den krieg wenn ich seine befehle nich befolge also falls du späher oder sowas schaffst dann könnte der computer immer dann angreifen wenn er rechnerisch stärker ist als sein opfer, aber auch hier solltest du dich an die "charaktereigenschaften" der einzelnen KIs halten.
Registriert: Do Okt 09, 2003 15:28 Beiträge: 14 Wohnort: Bochum
Zunächst einmal danke für eure schnellen und hilfreichen Antworten!
Besonders das mit den Quadern fand ich sehr hilfreich. Würdest du die Bewertung der Quader per Algorithmus machen oder in den Mapeditor einbinden? @SoS
Bzgl. der KI fürchte ich mich noch besonders vor Priorisierungsfragen.
Angenommen ich habe 3 Kasernen und 300€. Ein Archer kostet 150€, ein Swordman 100€. Nach welchen Kriterien sollte die KI (abgesehen von dem oben erwähnten Persönlichkeitsprofil) entscheiden, ob sie 3 Swordmen / 1 Archer+1Swordman / 2Archer baut und vor allem: in welchen Kaserenen?
Entschuldigt das viele Fragen -
Es ist nur so, dass ich bzgl. KI echt nicht viele Erfahrungswerte hab.
@Flash:
Pathfinding klappt wunderbar. Es lebe der A*
Registriert: Do Okt 09, 2003 15:28 Beiträge: 14 Wohnort: Bochum
Dann noch was:
In anderen Echtzeitstrategiespielen gibt es immer einen Reflex einer Einheit auf einen Angriff. Sie wehrt sich dann in der Regel. Auch Kampfeinheiten, die in der Nähe stehen werden alarmiert. Sollte dieser Reflex auch ausgeführt werden, wenn die Einheit gerade einen Befehl von mir ausführt (also zu einer Wegmarke läuft und auf dem Weg unter Beschuss gerät bzw. auf ein Gebäude einprügelt, während sie von einer feindlichen Einheit attackiert wird)?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Erstmal vorne weg : Geniesse meine Vorschläge mit Vorsicht! Ich selbst habe noch kein RTS programmiert, aber wenn ich sowas spiele (z.B. das neue C&C), dann mach ich mir immer recht viele Gedanken darüber wie sowas implementiert sein könnte. Also betrachte das alles eher als Denkanstoss denn als konkrete Lösung.
Escudo hat geschrieben:
Zunächst einmal danke für eure schnellen und hilfreichen Antworten! Besonders das mit den Quadern fand ich sehr hilfreich. Würdest du die Bewertung der Quader per Algorithmus machen oder in den Mapeditor einbinden? @SoS
Ich würde im Editor eine Funktion einbauen die automatisch erstmal alle Quader bewertet. Allerdings würde ich dann dem Nutzer die Möglichkeit geben diese Bewertungen nachträglich anpassen zu können. Ansonsten schau dir mal den Karteneditor vom neuen C&C an, dort zieht man nämlich Linien in Basen hinein (reicht von kurz vor der Basis bis direkt hinein) die der KI mitteilen wie sie am besten dort hineinkommt. Eine Linien ist dann Hauptangriffslinie, während die anderen Schleichwege sind und nur dann von der KI genutzt werden wenn diese einen höheren Intelligenzgrad bestitzt.
Escudo hat geschrieben:
Bzgl. der KI fürchte ich mich noch besonders vor Priorisierungsfragen. Angenommen ich habe 3 Kasernen und 300€. Ein Archer kostet 150€, ein Swordman 100€. Nach welchen Kriterien sollte die KI (abgesehen von dem oben erwähnten Persönlichkeitsprofil) entscheiden, ob sie 3 Swordmen / 1 Archer+1Swordman / 2Archer baut und vor allem: in welchen Kaserenen?
Wie gesagt sollte hier das Persönlichkeitsprofil die wichtigste Rolle spielen. Ansonsten wirds schwer, aber wenn du z.B. nen Angriffstrupp von der KI erstellen lassen willst, dann ists ja im Normalfall so dass man ein ausgeglichenes Einheitenaufgebot dort drin hat, also Bodeneinheiten, Lufteinheiten, usw. Und dann machst dus z.B. so das ein Bogenschütze ne Luftwertung von +1 und ne Bodenwertung von -1 bekommt, ein Fussoldat genau das Gegenteil. Und bei der Erstellung der Truppe versucht die KI halt mit gegebenen Mittel einen Trupp zu bauen der im Endeffekt Luftwertung = 0 und Bodenwertung = 0 hat. Also z.B. ganz billig : 1 Archer + 1 Footman -> Luft=0 (+1-1) und BOden=0 (+1-1). Und alle paar Minuten (wenn Geld da ist) wird ein neuer Trupp gebaut, die Größe kannst du dann ja per Random erstellen lassen (wobei auch hier aufs Persönlichkeitsprofil geachtet werden sollte). Die Sache mit der Kaserne ist auch leicht : Wenn er 4 Einheiten bauen soll, du 2 Kasernen hast, dann werden in jeder 2 Einheiten gebaut. Und dann legst du irgendwo zentral in der Basis nen Sammelpunkt für diese Einheiten an.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Bei meinem (durchaus als minderwertig, nichtfunktionierend und billig zu bezeichnenden) Dukes Of War(Rundenstratgie) hat die KI am Anfang jeder Runde immer nen Situationscheck gemacht. Der war nach Prioritäten sortiert, und sobald irgendwas net gestimmt hat, hat er den check abgebrochen und Aufgaben an die Einheiten verteilt.
So suchte die Ki erstmal Gegner die der eigenen Basis gefährlich werden konnten,
dann ob man in schlagdistanz zum Gegner steht,
dann ob alle Ressourcen vorrätig sind,
dann... .
Ähnliches könntest du in folgender Form einbauen:
Wachtürme oder Gebäude aber auch Einheiten (als Klassen) haben einen Sichtradius. Wenn ein Gegner in diesen Sichtradius kommt, wird eine Methode ausgelöst, die Bewertet wo sich der Gegner im Bezug auf die Basis und die Bewetreffende einheit befindet, bzw. Ob er angreift. Die Bewertung wird deiner KI zur verfügung gestellt. Alle Eingehenden Messages kann die KI in einer extra Karte Positioniert einfügen. Dort wo viele Meldungen Auftauchen ist viel los -> schwerpunkt. Die KI muss sich dann nur noch mit einer simplen Taktikkarte rumschlagen, wärend alle Einheiten ständig die Taktikkarte aktualisieren.
(Mehrfacherkennungen musst du abfangen)
So, dass hab ich mir gerade so ausgedacht. Eventuell kannste damit was anfangen. Vorallem die Einheiten als Klassen zu implementieren solltest du machen. Dass könnte dir einiges Erleichtern.
Ach und RTS ist eigentlich ja auch nix anderes als ne ziehmlich schnelle Form von Runden strategie .
Wie rufst du deine KI auf? Machst du dass über nen extra Thread?
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Okt 09, 2003 15:28 Beiträge: 14 Wohnort: Bochum
Danke für eure Anregungen!
Ich glaube, damit bin ich gut genug gerüstet, um mir beizeiten ein komplett aufeinander abgestimmtes KI-Konzept zu überlegen.
Zitat:
Vorallem die Einheiten als Klassen zu implementieren solltest du machen. Dass könnte dir einiges Erleichtern.
Das werd ich selbstverständlich machen Bei allem anderen geht man ja kaputt. Ich weiss das aus Erfahrung. Mein erstes Aufbaustrategiespiel hab ich vor 6 Jahren [mit 12] programmiert. Damals noch in C. Das Spielfeld [mit einer Größe von 32x32] war mit allen seinen komponenten als eindimensionales Array realisiert. Es gab ein Array mit dem Namen Energy, dass die Energie einer EInheit auf einem Feld (so vorhanden angab). Die Kameraposition war nicht als Punkt, sondern als Integer abgespeichert Egal! Immerhin kann ich jetzt von mir sagen, dass ich mit 12 ein eindimensionales Array als Zweidimensionales verwendet hab. Ist doch auch nicht schlecht
Zitat:
Wie rufst du deine KI auf? Machst du dass über nen extra Thread?
WEiss noch nicht. Hab mich bis jetzt nie mit MultiThreading auseinandergesetzt. Ich les mir gleich mal das Tutorial durch.
@SoS: Das mit der Ausgeglichenheit ist ein super Hint!
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
Die KI kann natürlich auch, wenn sie weiss/meint, der gegner hat keine/wenige schnellen einheiten, mehr bogenschützen schicken, oder, wenn sieiss, der gegner hat bogenschützen, vor allem berittene einheiten loschicken/produzieren. Was dann natürlich auch auf die "Persönlichkeit" hinausläuft.
Registriert: Do Okt 09, 2003 15:28 Beiträge: 14 Wohnort: Bochum
Das ist noch ein guter Hint! Danke.
Ich werd mich in den nächsten Tagen mal ans Programmieren machen.
Hab ja jetzt Zeit [gehör zu dieser NachAbi-VorZivi-Schicht]
Danke an alle.
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.