Ich programmiere ein strategisches Spiel mit Flash. Das Spiel funktioniert sehr ähnlich wie das berühmte Spiel "Travian".
Mein Problem ist wie folgt: Ich versuche, die Berechnung der Truppen vorzunehmen, die infolge eines Kampfes zwischen zwei Armeen verloren gegangen sind. Die beiden Armeen haben unterschiedliche Arten von Einheiten. Einige von ihnen sind stärker gegen andere Einheiten und schwächer gegen andere Typen.
Wie kann ich diesen Effekt dieser Unterschiede in die Kampfgleichung einbringen?
Es scheint einfach zu sein, wenn sie nur Att- und Def-Punkte haben, aber wenn es um die Typabhängigkeit der Einheiten geht, bin ich verloren.
game-design
architecture
mathematics
Ali Albahrani
quelle
quelle
Antworten:
Zusätzlich zu Amits Vorschlag, sich die Lanchester-Gleichungen anzuschauen, möchte ich hinzufügen, dass dies eine Entscheidung für das Spieldesign ist, keine empirische Tatsache, die wir Ihnen geben können. Wenn Sie den Einheitentyp berücksichtigen möchten, müssen Sie entscheiden, was dies bedeutet. Dies bedeutet, dass Sie eine Gleichung auswählen, die alle Faktoren enthält, die Ihr Gameplay enthalten soll. Wenn Sie wollen, dass Infanterie besser ist als Kavallerie, müssen Sie sich entscheiden, was das bedeuten soll - z. Wie viele Kavallerieeinheiten benötigen Sie, um 100 Infanterieeinheiten gleichzusetzen? Und spielt es eine Rolle, wer wen angreift? Sie scheinen zu implizieren, dass es nicht gut genug ist, Infanterie und Kavallerie unterschiedliche Angriffs- und Verteidigungswerte zuzuweisen - warum ist das so? Was möchten Sie sonst noch darstellen, das nicht nur von diesen Werten erfasst werden kann?
Sie müssen entscheiden, welche Faktoren Sie in Ihrem Spiel modellieren möchten, da sie sich auf die Art und Weise auswirken, wie sich die Spieler dem Spiel nähern. Dies können Größe / Menge der Einheit, Typ der Einheit, Erfahrung der Einheit (z. B. Veteranenstatus), Gelände- und Umwelteinflüsse, etwaige Unterschiede zwischen Angriff und Verteidigung, Modellierung von Schaden und Abnutzung oder Modellierung des Zeitablaufs während des Angriffs sein der Kampf, die Fähigkeit, sich zurückzuziehen oder zu fliehen (möglicherweise einschließlich Moralmodellierung), wie viel Zufälligkeit Sie in der Gleichung wollen, und so weiter.
Wenn Sie das alles wissen, können Sie verschiedene grundlegende mathematische Ansätze wählen. Sie könnten eine Runde für Runde "Chance zu treffen" -System wie viele RPGs haben, z. das d20 kampfsystem. Sie könnten ein gewichtetes Münzwurfsystem mit einer Runde "Angriff gegen Verteidigung" durchführen, wie es das ursprüngliche Civilization-Spiel tut. Sie könnten jede Seite dazu bringen, eine Punktzahl zu generieren, indem Sie einer Zufallszahl Attribute hinzufügen, und jeder, der den höchsten Wert erhält, gewinnt. Und Sie können diesen Systemen erlauben, rund um die Uhr zu arbeiten oder Treffer- oder Moralpunkte oder was auch immer abzurechnen. Jedes System kann funktionieren, aber Sie müssen es so ausbalancieren, wie Sie es möchten. Letztendlich ist die Wahl des Modells des Kampfes ein wichtiger Bestandteil des Spieldesigns und kann nicht nur von anderen Leuten vorgegeben werden.
quelle
Für Solar Realms Elite habe ich mich von Lanchesters Gleichungen für die Modellierung von Kriegsführung inspirieren lassen . Ich hatte in jeder Kampfrunde mehrere Kämpfe gleichzeitig.
Im ersten Kampf griffen alle Soldaten an. In SRE sind Soldaten am besten gegen Soldaten (es ist keine Schere aus Steinpapier, sondern Infanterie, Luftangriff und Weltraum). Ich habe eine Angriffs- und Verteidigungskraft aufgebaut, bei der die Soldaten am besten angegriffen haben:
Im zweiten Kampf griffen alle die Verteidigungsstationen an. In SRE sind Kämpfer (Luft) am besten gegen Verteidigungsstationen (zB Flugabwehr):
Im dritten Kampf griffen alle die schweren Kreuzer an. In SRE sind schwere Kreuzer im Weltraum und eignen sich am besten gegen andere schwere Kreuzer:
(Ich erinnere mich nicht, welche Konstanten ich verwendet habe; dies sind nur Beispiele.) In jeder Kampfrunde verlieren die Angreifer einen Teil der Verteidigungsstärke und die Verteidiger einen Teil der Angriffsstärke. Ich glaube, das entspricht dem Lanchester Square Law (Gleichungen hier ). Ich hatte Zufälligkeit hinzugefügt, aber ich erinnere mich nicht genau, wo. Nach jeder Kampfrunde waren die Armeen kleiner. Ich habe eine Höchstgrenze für die Anzahl der Runden festgelegt. Danach würde sich die Verliererseite zurückziehen.
Es war nicht realistisch, dass die Infanterie auf dem Boden in den Weltraum schoss, aber es funktionierte aus Spielgründen besser, wenn alle Einheiten in der Lage waren, alle anderen Einheiten zu bekämpfen (mit verringerter Effektivität).
quelle
Ich neige dazu zu sagen: "Wenn Sie keine explizite Lösung finden können, suchen Sie eine implizite." Sie können den Kampf intern simulieren, bis eine Armee ausgelöscht ist oder sich zurückzieht (abhängig von den möglichen Ergebnissen Ihres Spiels).
Ich würde so etwas verwenden:
Bei jeder Wiederholung des Kampfes sind alle Einheiten opportunistisch, sodass sie versuchen, den größtmöglichen Schaden zu verursachen. Jede Einheit wählt eine feindliche Einheit aus, die sie in dieser Runde angreifen wird, basierend auf den bekannten Vor- und Nachteilen.
Dann werden alle Unterkämpfe durchgeführt. Ein Beispiel:
Lass die Speerträger gegen Kavallerie, Kavallerie gegen Bogenschützen und Bogenschützen gegen Speerträger wirksam sein.
In einem Kampf zwischen zwei Armeen, die aus beiden Typen dieser Basiseinheiten bestehen, würden alle Speermänner Kavallerie angreifen, alle Kavallerieeinheiten würden Bogenschützen angreifen und alle Bogenschützen würden Speermänner angreifen. Wenn zum Beispiel eine Seite keine Bogenschützen hätte, würde die Kavallerie der anderen Seite den nächstbesten Zieltyp auswählen (wobei es sich um die feindlichen Kavallerieeinheiten handelt).
Jedes Einheiten-Angriffs-Einheiten-Ereignis wird separat ausgeführt, wobei die verlierende Einheit beschädigt oder als zerstört markiert wird.
Nachdem alle Einzelkämpfe beendet wurden, entferne alle Einheiten, die kritisch beschädigt oder zerstört wurden.
Die nächste Iteration beginnt mit dem Einsatz der jetzt reduzierten Armeen.
quelle
Ich teste ein Spiel, bei dem es sich derzeit um eine einfache Version von Solar Realms ( Star Empire Elite ) handelt, und verwende zunächst etwas, das Amits Gleichungen ähnelt (siehe oben). Insbesondere gefiel mir die Idee, drei Phasen im Kampf zu haben, in denen man zwei der drei gewinnen musste. Aber ich wollte auch ein Element der Zufälligkeit in den Kampf einbringen, und dafür wurde ich von einigen Tabletop-Spielen beeinflusst.
Die Verarbeitung ist ein Problem, wenn das Spiel skaliert werden soll. Daher wollte ich die von sum1stolemyname oben vorgeschlagene Methode nicht befolgen. Wenn Ihr Spiel im Gegensatz zu einem Server den Client zum Verarbeiten der Ergebnisse verwendet, scheint dies ein Problem zu sein guter Ansatz.
Ich beschloss, den Kampf in zwei Phasen zu unterteilen (analog zu den drei in Amits Modell): Luft und Boden. Ich berechne die Angriffs- und Verteidigungsstärke und passe die Angriffsstärke um einen Bruchteil an (um dem Verteidiger den Vorteil zu geben). Wenn zu diesem Zeitpunkt die Angriffsstärke und die Verteidigungsstärke gleich sind, hat der Angriff eine 50% ige Siegchance. Von dort aus stelle ich die prozentuale Siegchance nach oben oder unten ein, basierend darauf, wie viel mehr (oder weniger) Stärke der Angreifer im Vergleich zum Verteidiger hat. Hier sind einige vereinfachte Gleichungen für Luft:
Ich gebe an, dass die Chance_des_Siegs niemals größer als 80 oder kleiner als 5 sein darf. Von dort aus erstelle ich eine Zufallszahl aus 100 und übertrage dieses Ergebnis in den Landkampf.
Eine Sache, die ich nicht zu meiner Zufriedenheit gelöst habe, sind die Unfallraten. Aber ich denke, ein guter Weg, dies herauszufinden, wäre, die Chance_des_Siegs mit der generierten Zufallszahl zu vergleichen und einen Bruchteil der angreifenden und verteidigenden Streitkräfte als Opfer zu nehmen.
quelle