KI für RTS-Game

    • Konzeptfrage

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

    • KI für RTS-Game

      Hallo. ;)

      Nachdem ich mich nun ein wenig länger mit GML beschäftigt hab, plane ich in der nächsten Zeit die Umsetzungen eines mehr oder weniger RTS-Games (Real-Time-Strategy -> Echzeit-Strategie). Erstmal: Ich möchte hier nichts hören von wegen: 'Das schaffst du nicht'. Hier geht es nicht um die technische Umsetzung, sondern rein um das KI-Konzept.

      Was in diesem Thema besprochen werden soll, bzw. worum es hier geht, ist die Arbeitsweise einer KI für ein solches RTS-Game. Ich gehe hierbei von einem RTS-Game aus, welches auf Gebäude bauen, Einheiten bauen basiert. Und jetzt mal nicht von der Kampagne, sondern von einem Kampf - in eienr Kampagne wird man immer ein wenig anders programmieren. ;D

      Folgendes Prinzip: Das Spiel basiert so, dass man mit einer Baueinheit startet. Diese kann zu Beginn auch zum Kampf benutzt werden, später ist sie dafür zu schwach. Die sichtweite eines Spieler wird durch seine Einheiten & Gebäude bestimmt, d.h. jedes Gebäude etc. hat eine gewisse optische Reichweite. Daraus sieht man das Spielfeld. Dazu kommen noch Radar einheiten - allerdings kann man durch Radar nicht sehen sondern nur orten, also werden Einheiten als Symbol angezeigt - wenn man die Einheiten gesehen hat, sind diese schond definiert, das heißt man sieht die einheit nicht, weiß aber das es ein Panzer des Typ X ist, die anderen unbekannten Einheiten weden im Radar eben als unbekannte Einheit dargestellt.

      Wie gehen jetzt mal von einer Extremen KI aus, d.h. eine die in diesem Fall so wenig wie möglich bzw. keine Fehler macht, 'Dummheit' ist hier jetzt nicht wichtig. Trotzdem muss sie die technischen Vorrausetzungen beachten.

      Das Spiel beginnt also -> Spieler 1 im Norden, die KI im Süden. Die KI beginnt sofort Ressourcen zu prodzieren, d.h. sie baut erstmal ein paar Gebäude des Types..z.B. Energie. Heißt sie baut 2 Energiegeneratoren. Dann benötigt sie noch die Ressource Masse. Diese kann allerdings nur auf bestimmten Punkten gebaut werden. Heißt, sie baut danach automatisch zwei Massegeneratoren auf zwei Punkten ind er Nähe der basis. Sobald das passiert ist, beginnt sie mit dem Fabrikbau. Man könnte dazu noch sagen, d.h. man evlt. Näheboni einbaut, d.h. wenn sie direkt neben Energiegens ist, muss sie beim Bau von Einheiten weniger Energie zahlen, da könnte man eine Strukutur vorgeben, die der KI sagt, dass die zwei Energiegens direkt neben der Fabrikgebaut werden sollen.
      So. Sie baut dementsprechend, nur wie verhält sie sich z.B. bei Reaktionen bzw. Aktionen des Spielers? :)

      Darum soll es hier gehen. ;)
    • Die Frage der KI (besser CPU - ComputerPlayedUnit) stellt sich immer wieder. Ich habe auch lange überlegt wie sich eine CPU in einem RTS verhalten sollte. Die Antwort ist manchmal jedoch recht einfach: z.B. in meinem RTS habe ich die CPU so konzipiert, das sie das Spiel etwa wie der Spieler bedienet. Sie nutzt dabei die selben Funktionen und Menus. Zusätzlich sind einige "was wäre wenn"-Funktionen angehängt. Wen z.b. keine Arbeiter mehr vorhanden sind (durch Angriffe oder ähnliches) und die maximale Anzahl an Einheiten erreicht ist, zerstört der Computer einige kampfeinheiten um wieder Arbeiter bauen zu können. Oder wenn weniger als 3 Planeten eingenommen wurden, ist die CPU in einer Art "Expansionsmodus" und verwendet die meisten ressourcen um weitere Planeten einzunehmen.
      Um explizit auf den Spieler zu reagieren sind wenige Funktionen eingebaut. Wenn der Spieler z.b. Angreift, verlegt die CPU ca. 25% der Kampfeinheiten in den Bereich in den Angegriffen wurde. Auch dazu nutzt die CPU die Funktionen, die auch dem Spieler zur verfügung stehen. Theoretisch muss die CPU auch nicht auf den Spieler reagiren, denn ein RTS läuft fast immer gleich ab. Somit muss die CPU nur versuchen schnell effektive Basis zu errichten, den Spieler auf der Map zu suchen und mit Einheiten vollspammen.
      Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
      GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
    • Klar. In den meisten Fällen bzw. fast immer funktioniert das auch. Vor allem bei Spielen mit Radar und Optik, da du eh nie die komplette Karte siehst, und im Gegensatz zu 'nem Top-Down-Shooter KI bzw. CPU Fehler nie so extrem auffallen, erst später und da kann man es auch auf die eigenen Taktik zurückführen. :D. Viele kommernzielle Spiele arbeiten so, wie du es oben geschrieben hast, dass aber auch genau das, was mich am Ende stört. Denn du merkst genau die Schwächen der CPU, wenn du gerade ihre Basis versuchst zu überrennen, und du genau siehst, dass die Haupteinheit anstatt sich zu schützen und aus der Reichweite meiner Einheiten zu verschwinden ständig versucht die riesigen Ressourcengeneratoren wieder aufzubauen, obwohl es technisch gesehen völlig unmöglich ist das wieder hinzukriegen, da sie jedes mal wieder zerschossen werden. Ich hin z.B. großer Fan des Stragiegames Supreme Commander. Und gerade da, wo es zum TEil mit 1000 Einheiten aufwärts abgeht, siehst du dass bei der programmierten KI schon sehr extrem, und kannst diese Fehler auch ausnutzen. Ein Grund, wieso in solchen Spielen häufig auch extrene KIs (und hier wirklich KIs, da hier versucht wird 'Intelligenz' zu programmieren xD) genommen werden, die erst viel später nach dem Erscheinen des Spiels von Hobbyprogrammieren geschrieben werden, weil dann die Schwächen der CPU bekannt sind. Und sowas möchte ich so gut es geht vermeiden. Natürlich werde ich kein 3D High-End RTS Game programmieren, genauso wenig wird meine CPU perfekt werden, aber man kann trotzdem versuchen so gut wie möglich an die Perfektion ranzukommen. ;D
    • erstelle erstmal eine cpu die grundsätzlich funktioniert. Danach machst du dich daran, verschiedene Taktiken einzubauen. Am Anfang baust du z.B. eine zufällige Abfrage ein, ob die CPU sich in einer Basis eingraben soll, oder als extremer Ruscher versucht das Spiel zu gewinnen etc..

      Zusätzlich kannst du bestimmte Manöver vorscripten, wie einen Angriff von zwei Seiten oder die Verteidigungsreihen des Player umgehen.

      Desto mehr solche zusätzlichen Komponenten in die Arbeitsweise der CPU einfließen, desto undurchschaubarer und unberechenbarer wird es.
      Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
      GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
    • Hier geht es ja auch erstmal um die KI. Ich weiß, dass eine KI schwieriger zu programmieren, je besser sie ist. Jedenfalls ab 'nem bestimmten Punkt. Es gibt (sieht man an Bots) CPUs, die schießen genauso, dass man direkt trifft. Bei nem Spiel à la CS. ;D ^^ Diese CPUs sind im Grunde einfacher würde ich mal sagen. Bei normalen Waffen wird z.B. genau auf den Kopf gezielt. Strategiespiele sind da natürlich ein ganz anderes Kaliber, vor allem RTS, gerade wegen dem RT -> Echtzeit ist noch komplizierter. Ich weiß dass es schwer wird. Allein schon meine 3D Modelle zu basteln dauert ewig. Ich beschäftige mcih seit ca. 1 1/2 Monaten nur mit Blender, und hab derzeit nur die Modelle + Texturen für die Haupt(bau-)einheit, eine Fabrik und einen kleinen Bot gebaut. Bis ich es schaffe eine halb wegs laufbare 3D-Engine im GM zum Laufen zu kriegen, wird eh noch eine Weile vergehen, und dann bin ich froh wenn das bauen und verwenden von Einheiten mit einem menschlichen Spieler funktioniert. Hier geht es mir erstmal direkt um die CPU, bzw. um das Konzept.

      @ RushOn. Natürlich. Verschiedene Schwierigkeitsgerade werde ich auch versuchen. Dabei könnte man auch z.B. ein paar Sekunden Pause zwischen Bauvorhaben einbauen ( 1 oder 2). Bei RTS wirken sich kleine Sachen schon stark aus. ;D ^^Ich werde auch evt. versuchen dann ne Sturm KI, bzw. ne Bunker KI zu basteln, wir werden sehen was die Zunkunft (und meine GML Fähigkeiten) bring(en)t.
    • Ein weiterer wichtiger Faktor ist die Ausführgeschwindigkeit.
      Dir bringt deine ach so geile KI nichts, wenn deren Berechnungen mehrere sekunden beanspruchen, darauf sollte auch geachtet werden bei der Planung ;)
      Face in the wind, we're riding the storm
      We'll stay our course whatever will come
      ~~ Stay (Running) Wild ~~
    • Defmaster schrieb:

      Ein weiterer wichtiger Faktor ist die Ausführgeschwindigkeit.
      Dir bringt deine ach so geile KI nichts, wenn deren Berechnungen mehrere sekunden beanspruchen, darauf sollte auch geachtet werden bei der Planung ;)


      Das stimmt. ;D Ne CPU die perfekt auf alles reagiert bringt nichts, wenn sie nach 3 Minuten erst ausgerechnet hat, wie sie ihre Basis zu 99% verteidigen kann (mal abgesehen davon, dass sie es DANN eh nicht mehr kann). Ich muss mal schauen wie ich das löse. Da müsste man im Voraus immer ein paar weitere Zurüge berechnen, damit alles flüssig abläuft. ;)
    • Es wäre auch möglich, dem Bot eine Prioritätsliste für seine Aktionen zu geben und er immer das ausführt, was die höchste Priorität hat.
      So gibt es verschiedene Ziele, die aufeinander aufbauen, die erreicht werden sollen in Abhängigkeit von der eigenen Taktik.
      Es bräuchte mehrere Prioritätslisten, etwa eine für Ressourcen, eine für Gebäude, eine für Einheiten, eine für taktische Bewegunen etc und eine für den allgemeinen Schwerpunkt(Verteidigung, Angriff, Aufbau...).

      Beispiel:
      Die Taktik ist Aggressiv eingestellt.
      Die Priorität von offensiven Einheiten steigert sich und die Auswahl der Einheiten geschieht in Abhängigkeit von Taktik und diversen Faktoren aus der Welt(Etwa welche Einheiten der Gegner benutzt).
      Dadurch steigt die Priorität für den Bau von Einheiten-Produktions-Gebäuden.
      Fehlen Ressourcen, steigt die Priorität für Ressourcen an.
      Nun werden entsprechende Gebäude zum Ressourcenabbau benötigt.
      Jetzt kann man die Schlange so weiter machen, abbhängig davon, was noch so alles benötigt wird.

      So liesse sich die Gesamtstrategie gut aufs Mikromanagement abbilden.
      "das war meine letzte flamewar PM an dich ."
    • Stimmt. Wobei man diese Prioritätenliste auch noch für den Angriff selbst verwenden kann. Die Einheiten des Gegners sollten ja nicht nur stur gerade aus laufen und alles angreifen wem sie dabei gegenüber laufen. So könnte man auch eine Prioritätenliste setzten, welche Einheiten es automatisch angreift. Soll genauer bedeuten: Die CPU hat 5x Einheit 'Stark'. Der Spieler hat 7x Einheit 'Schwach' und 3 Einheit 'Sehr stark'. In der Prioritätenliste (abhänig von der ausgewählten KI) steht die Einheit 'Sehr stark' über der Einheit 'Schwach' und wird somit zu erst angegriffen. Das ist vor allem wichtig, sollte man Artillerien benutzen. ;D Danke erst mal für die vielen Hinweise. Ihr könnt gerne noch weitere Ideen posten, ich werde mich jetzt erstmal in Ausarbeitung zurückziehen. ;D