Strategiespiel: Einheit sucht Gegner

Übersicht Sonstiges Gamedesign

Neue Antwort erstellen

 

Kruemelator

Betreff: Strategiespiel: Einheit sucht Gegner

BeitragSa, Okt 04, 2014 16:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie wird in einem Strategiespiel vorgegangen um mögliche Ziele für eine Einheit zu bestimmen?
Jede Einheit hat einen Sichtradius und jeder Gegner im Radius ist ein mögliches Ziel. Aus diesen Gegner kann die Einheit dann ihr bestes Ziel auswählen, z.B. das mit wenig Leben oder die Art gegen die sie besonders effektiv ist.
Ich muss also für jede Einheit wissen was sie angreifen soll. Wenn eine Einheit kämpft kann sie solange der Gegner noch lebt, in Reichweite ist usw. auf die Zielauswahl verzichten. Aber sobald kein Gegner da ist der angegriffen werden kann müssen jeden Frame nach neuen Zielen gesucht werden um den nächsten Gegner nicht zu verpassen. Im Extremfall bauen alle Spieler riesige Armeen in ihrer Basis und greifen dabei nicht den Gegner an.
In einem Test habe ich 5000 Einheiten, auf einem 256x256 großen Feld, welche nach Zielen suchen sollen (die Ziele sind die 5000 Einheiten selber). Alles in einem Radius von 8 soll ein mögliches Ziel sein. Brute-Force lohnt sich hier überhaupt nicht. Mit einem Quadtree bin ich bei 80 Millisekunden.

Wie wird dies in Strategiespielen gehandhabt?

Xeres

Moderator

BeitragSa, Okt 04, 2014 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
~VERSCHOBEN~


Die Suche von Gegnern läuft dir nicht schnell genug? Ich würde schon mal nicht jeden Frame suchen - dann kann man die Masse schon mal 4 oder 5 teilen. Davon abgesehen - ist das Szenario ein realistischer für das Spiel?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Kruemelator

BeitragSa, Okt 04, 2014 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Spiel ist in Blitz3D programmiert und updated alle 33ms.
Dinge die schon fertig sind:
- Einheiten auswählen und befehlen/Guibedienung
- Kollision mit Einheiten/Terrain
- Beschleunigen,Bremsen, Wenden und Zurücksetzen um an den Zielort zu kommen
- Geschossflugbahn und Kollision mit Terrain (bisher 4000 Geschosse 1-2ms)
- Netzwerkkram mit Senden/Empfangen/Synchronisation etc.
Bei 5000 Einheiten braucht das alles etwa 10ms.

Das Rendern ist noch nicht optimiert, und Einheiten sind noch nicht modeliert, es wird aber schon folgendes gemacht:
- Terrain
- Einheiten nah der Kamera darstellen(Cube)/ in der Entfernung ausgeblendet(wird noch durch 2D Grafiken ersetzt)
- Einheitenauswahlrahmen
- Geschosse als 2D Grafik
- Gui
Bei 5000 Einheiten braucht das Rendern etwa 7ms je nach Einstellung.

Ich nehme an dass 5000 schon realistisch ist wenn ich eine Lösung für das Gegner-Suche-Problem finde.

In Spielen wie Cossacks oder Stronghold gibt es zum Teil noch mehr Einheiten und dort ist das Problem der "Gegner Suche" gelöst worden (bei Youtube gibt es Videos mit 8000 Bogenschützen aus Stronghold).

Nicht jeden Tick alles zu rechnen habe ich auch schon überlegt. Ich müsste dann aber schon 15-20mal teilen um bei zusammengezogenen Armeen auf etwa 10ms zu kommen.
Außerdem muss dann noch bestimmt werden welche der erreichbaren Einheiten das beste Ziel ist.

Ein paar Ideen habe ich noch:
1. Angegriffene Einheit sucht nicht sondern greift Angreifer an.
2. Nicht jede Einheit suchen zu lassen sondern Einheiten in der Nähe zu einem Trupp bündeln und nur einmal zu suchen. Wie stelle ich diese Trupps schnell zusammen? Es muss in einem größeren Radius gesucht werden.
3. In einer Karte abspeichern wie weit entfernt der nächste Gegner ist. Und nur dann suchen wenn es überhaupt möglich ist einen Gegner zu finden. Das hilft nur in Gebieten wo es keine Gegner gibt, sonst ist es sinnlos.

Wenn jemand noch weiter Idee hat oder weis wie es in anderen Strategiespielen gemacht wird würde ich das gerne erfahren.

Xeres

Moderator

BeitragSa, Okt 04, 2014 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie sieht denn die Datenstruktur nun aus? Stehen die Einheiten nur in einer Liste, oder werden sie vom Terrain nochmal referenziert?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Kruemelator

BeitragSa, Okt 04, 2014 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Einheiten sind als 1D Array vorhanden und werden jeden Tick in ein Feld eingetragen(ca. 1ms), welches der Auflösung der Spielwelt entspricht (256x256). Es können mehrere Einheiten pro Zelle sein (nicht mehr als 5 bei aktueller Einheitengröße).

Silver_Knee

BeitragMo, Okt 06, 2014 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst auch einbauen, dass pro Tick nur max. 500 Einheiten suchen dürfen: Die Einheiten, die suchen wollen, kommen auf eine Liste, von der du pro Tick immer nur 500 abarbeitest. Dann "bemerken" manche Spielfiguren halt einen Gegner einen Tick später. Ich weiß nicht wie kritisch, dass in deinem Spiel ist, aber so kannst du halt die Berechnungen pro Tick verringern.

Für das Gruppieren: Wenn eine Einheit beim Absuchen eine verbündete Einheit innerhalb eines gewissen Radius sieht, wird für die gefundene Einheit keine Suche durchgeführt.

Neue Antwort erstellen


Übersicht Sonstiges Gamedesign

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group