Schadensberechnung

Autor: Dahar_Worf

Ich möchte hier zeigen, wie man schon im Voraus berechnen kann, wie ein Kampf zwischen 2 Einheiten ausgeht, also wer gewinnt, wie viel Lebenspunkte der Sieger noch übrig hat und nach welcher Zeit in Spielsekunden der Kampf beendet ist. Es wird in dieser Berechnung kein "hit and run" oder sonstiges Micromanagement berücksichtigt. Zudem wird bei Fernkämpfern angenommen, das sie jeden Schuss treffen.

Als erstes muss man den Kampf in eine von 3 Kategorien einteilen.

Kategorie 1: es kämpfen 2 Nahkämpfer (mir einer Reichweite von 0) gegeneinander

Kategorie 2: es kämpfen ein Nah- und ein Fernkämpfer gegeneinander

Kategorie 3: es kämpfen 2 Fernkämpfer gegeneinander

Berechnungsgedanke:

Ich erstelle aus den Werten eine lineare Funktion. Der Funktionswert y repräsentiert die Zahl der Lebenspunkte, x entspricht der vergangenen Zeit. Von den Lebenspunkten ziehe ich pro Zeiteinheit die Angriffsstärke der anderen Einheit – der Rüstungsklasse der 1. Einheit ab. Aber so kompliziert wie das klingt, ist es gar nicht.

Die Berechnung für die 1. Kategorie (2 Nahkämpfer gegeneinander)

Lebenspunkte 1. Einheit -> HP1, 2. Einheit HP2 (hitpoints)

Angriffsstärke 1. Einheit -> AT1, 2. Einheit AT2 (attack)

Nahkampf-Rüstung 1. Einheit -> AR1, 2. Einheit AR2 (armor)

Frequenz 1. Einheit -> FR1, 2. Einheit FR2 (frequent)

y1 = HP1 – (((AT2 – AR1) * x) / FR2)

y2 = HP2 – (((AT1 – AR2) * x) / FR1)

Erklärung:

Der Schaden, den die 1. Einheit erhält, ist die Angriffsstärke der anderen Einheit minus dem, was die eigene Rüstung auffängt (AT2 – AR1). Dieser Schaden wird mit x, der Zeit, multipliziert. Allerdings müssen wir den anfallenden Schaden noch durch die Frequenz der angreifenden Einheit teilen, um wirklich nur den Aktuellen schaden zu bekommen. Wenn der gesamte Schaden zwischen den Klammern so groß wie die Lebenspunkte ist, stirbt die Einheit (y = 0). Wir müssen also einfach die Nullstelle der Funktion berechnen, dann haben wir den x-Wert (die Zeit), nach der die Einheit stirbt. Das selbe macht man mit der anderen Formel. Jetzt kann man die beiden Zeiten vergleichen. Bei dem kleineren x-Wert stirbt die schwächere Einheit. Allerdings wäre ein Wert von 11.515688623 ziemlich unrealistisch. Ich muß hier noch auf das nächsthöhere Vielfache der Frequenz des Gewinners aufrunden. Hat die stärkere Einheit zum Beispiel eine Frequenz von 2 so muß ich auf 12 aufrunden (die Einheit kann ja schließlich nicht 5 3/2 mal zuschlagen). Setze ich die 12 Sekunden Kampfdauer als x in der anderen Formal ein, so erhalte ich als y die übrigen Lebenspunkte der siegreichen Einheit.

Die Berechnung für die 2. Kategorie (ein Nah- und ein Fernkämpfer gegeneinander)

Lebenspunkte 1. Einheit ® HP1, 2. Einheit HP2 (hitpoints)

Angriffsstärke 1. Einheit ® AT1, 2. Einheit AT2 (attack)

Reichweite 1. Einheit ® RA1, 2. Einheit RA2 (range)

Nahkampf-Rüstung 1. Einheit ® AR1, 2. Einheit AR2 (armor)

Fernkampf-Rüstung 1. Einheit ® PA1, 2. Einheit PA2 (piercing armor)

Frequenz 1. Einheit ® FR1, 2. Einheit FR2 (frequent)

Marschgeschwindigkeit 1. Einheit ® MR1, 2. Einheit MR2 (march rate)

Der Einfachheit halber wird angenommen, daß Einheit 1 die Nah- und Einheit 2 die Fernkampfeinheit ist.

y1 = HP1 – (((AT2 – PA1) * x) / FR2)

y2 = HP2 – (((AT1 – AR2) * x) / FR1) + (((1 / MR1) * RA2) * ((AT1 – AR2) / FR1))

Erklärung:

Die Formel für die erste Einheit kennen wir bereits, es wurde bloß die Nahkampf-Rüstung gegen die Fernkampf-Rüstung ausgetauscht.

Die 2. Formel setzt sich aus 2 Teilformeln zusammen. Lassen wir erst einmal alles, was hinter dem Plus steht außer acht. Dann haben wir die Formel, welche in Abhängigkeit von x (der Zeit) die aktuellen Lebenspunkte der Einheit berechnet. Allerdings muss der Nahkämpfer erst einmal bis zur Fernkampfeinheit kommen, ehe er sie angreifen kann. Das wäre allerdings sehr kompliziert in die Formel hinein zu bringen (zumindest fiel mir nicht ein, wie). Also habe ich mir mit einem kleinen Trick geholfen. Ich lasse den Nahkämpfer schon von Anfang an auf den Fernkämpfer einhauen. Nur gebe ich dem Fernkämpfer als Ausgleich so viele Lebenspunkte, wie der Nahkämpfer dem Fernkämpfer Schaden in der Zeit zufügen würde, die er braucht um ihn zu erreichen. Also fügt unser Nahkämpfer dem Schützen effektiv erst Schaden zu, wenn er diesen auch erreicht. (die letzten 2 Sätze eventuell 3 mal durchlesen ;-))

((1 / MR1) * RA2) entspricht der Zeit, die unser wackerer Nahkämpfer braucht, um die Entfernung bis zum Bogenschützen zurückzulegen. Der Schaden, den er in dieser Zeit anrichten würde ist ((AT1 – AR2) / FR1).

Es kann natürlich auch passieren, daß der Fernkämpfer die Nahkampfeinheit schon zerstört, bevor diese überhaupt den Bogenschützen erreicht hat und losschlagen und stechen kann. Diesen Fall erkennt man, wenn man durch einsetzten des x-Wertes, welcher zur Nullstelle der ersten Funktion (y1) führt, eine größere Lebensenergie als am Anfang erhält. So ist unser Bogenschütze natürlich nicht mutiert, sondern hat immer noch so viele Lebenspunkte wie zu Beginn des Scharmützels.

Die Berechnung für die 3. Kategorie (es kämpfen 2 Fernkämpfer gegeneinander)

Lebenspunkte 1. Einheit ® HP1, 2. Einheit HP2 (hitpoints)

Angriffsstärke 1. Einheit ® AT1, 2. Einheit AT2 (attack)

Reichweite 1. Einheit ® RA1, 2. Einheit RA2 (range)

Fernkampf-Rüstung 1. Einheit ® PA1, 2. Einheit PA2 (piercing armor)

Frequenz 1. Einheit ® FR1, 2. Einheit FR2 (frequent)

Marschgeschwindigkeit 1. Einheit ® MR1, 2. Einheit MR2 (march rate)

Der Einfachheit halber wird angenommen, daß unser 1. Fernkämpfer eine größere oder gleich große Reichweite wie unserer 2. Fernkämpfer hat.

y1 = HP1 – (((AT2 – PA1) * x) / FR2) + ((1 / MR2) * (RA1 – RA2))

y2 = HP2 – (((AT1 – PA2) * x) / FR1)

Erklärung:

Im jeweils ersten Teil ist die Formel die selbe, wie wir sie verwendet haben. Da die 1. Einheit der 2. Schon Schaden zufügt, während diese die 1. Noch gar nicht erreichen kann, bekommt sie in ihrer Formel wieder einen Summanden. Dieser ist ähnlich dem in der 2. Kategorie. Der Einheit wird einfach der Schaden, den die 2. Einheit ihr anrichten würde, addiert. Und zwar in der Zeit, die unsere 2. Einheit braucht, um die Strecke zurückzulegen bis sie auch auf die erste Einheit feuern kann. Es gelten hier natürlich auch wieder die selben Einschränkungen, wie in der 2. Kategorie.

Zum Abschluss noch ein kleines Rechenbeispiel:
Lassen wir einfach mal einen Arbalestenschützen gegen einen Langschwertkämpfer kämpfen.
Der Langschwertkämpfer ist eine Nahkampfeinheit und der Arbalestenschützen eine Fernkampfeinheit. Wir müssen also die Formeln der 2. Kategorie anwenden. Diese lauten:

y1 = HP1 – (((AT2 – PA1) * x) / FR2)

y2 = HP2 – (((AT1 – AR2) * x) / FR1) + (((1 / MR1) * RA2) * ((AT1 – AR2) / FR1))

Die Werte für den Langschwertkämpfer:
HP1 = 55
AT1 = 9
PA1 = 0
FR1 = 2
MR1 = .9

Die Werte für den Arbalestenschützen:
HP2 = 40
AT2 = 6
AR2 = 0
FR2 = 2

Eingesetzt in die jeweiligen Formeln sehen diese so aus:

y1 = 55 – (((6 – 0) * x) / 2)

y2 = 40 – (((9 – 0) * x) / 2) + (((1 / 0.9) * 5) * ((9 – 0) / 2))

Jetzt errechnen wir von beiden Funktionen jeweils die Nullstellen (der x-Wert, bei dem y gleich 0 ist, also die Lebenspunkte 0 sind und die Einheit stirbt). Das müssen wir natürlich nicht unbedingt im Kopf machen, für so etwas gibt es ja schließlich Taschenrechner (oder Computer).

Als Nullstelle für die 1. Funktion erhalte ich x = 18.333333333, und für die 2. Funktion x = 14.444444444. Die 2. Einheit ist also eher Tod. In unserem Beispiel hat der Langschwertkämpfer gewonnen. Jetzt wollen wir natürlich auch noch wissen, wie viel Lebenspunkte er noch übrig hat. Dazu müssen wir uns erst überlegen, das der Arbalestenschütze nach 14.444444444 Zeiteinheiten gestorben ist. Der Langschwertkämpfer haut alle 2 Zeiteinheiten zu (dies gibt seine Frequenz von 2 an). Nach 14 Zeiteinheiten lebt der Arbalestenschütze also noch, erst nach 16 (dem nächst größeren Vielfachen der Frequenz (2)) Zeiteinheiten hat der Arbalestenschütze das zeitliche gesegnet. Setzen wir jetzt diese 16 Zeiteinheiten als x-Wert in die 2. Funktion ein, so erhalten wir 7. Diese 7 entspricht den Lebenspunkten, die unser Langschwertkämpfer nach dem erfolgreichen Kampf mit dem Arbalestenschützen noch übrig hat (siehe Screenshot).

Beispiel.jpg (38412 Byte)

Wenn es dazu irgendwelche Fragen gleich jeder Art gibt, könnt ihr mich gern anmailen. Oder noch besser, ihr postet eure Fragen im Forum, so sind sie für alle zugänglich.