KI für Strategiespiele

Beste Angriffsroute für Einheiten berechnen

Wenn der Computer zum Angriff gerüstet ist, sollte er eine gute Angriffsroutine erhalten, welche man z.B. so berechnen könnte.

Man erstellt eine Highmap des Gebietes. Jetzt markiert man mit Schwarz alle Stellen, auf denen sich mindestenz ein Einheitentyp des Kampfverbandes nicht bewegen kann und alle anderen Stellen mit Weiß. Es wird jetzt für jede gegnerischen Einheit

int simutime = 0;
while(gegner.verteidigung > 0){
for(int i = 1; i <= anzdeineeinheiten; i++){
if(deineeinheit[i-1].simulastattack <= simutime - deineeinheit[i-1].attackspeed && deineeinheit[i-1].verteidigung >= 0){
gegner.verteidigung -= deineeinheit[i-1].attackpower[gegner.typ];
deineeinheit[i-1].simulastattack = simutime;
};
};
if(gegner.simulastattack <= simutime - gegner.attackspeed){
deineeinheit[sucheschwächsteeinheit(&deineeinheit, gegner.typ)] -= gegner.attackpower[deineeinheit[sucheschwächsteeinheit(&deineeinheit, gegner.typ)].typ];
gegner.simulastattack = simutime;
};
simutime += irgendeinwert;
};
int verlust = 0;
for(int i = 1; i <= anzdeineeinheiten; i++){
if (deineeinheit[i-1].verteidigung <= 0)
verlust++;
};

diese Berechnung durchgeführt, in der Reihenfolge der Einheiten(deren Schußradius die Route berührt) in einer der möglichen Routen, die der A* Algorythmus, unter Einbezug des errechneten Schwarz/Weiß-Bildes, für unsere Highmap errechnet hat.

Wir suchen jetzt die Route mit den wenigsten Verlusten heraus und prüfen ob die Anzahl der Verluste geringer ist als die Anzahl der Einheiten. Ist dies der fall muss der Computer weiter aufrüsten.

Wenn während des Angriffs deutlich mehr Verluste eintreten als vorausberechnet, wird die Berechnung erneut durchgeführt, wenn man es dennoch schafft, wird der Angriff fortgesetzt, wäre die Verlustrate jedoch so hoch wie die Anzahl der Einheiten wird der Angriff "abgebrochen", und die einheiten ziehen sich auf einer nach dieser Weise berechneten Route zurück.


Inhalt