Ich entwickle ein Echtzeit-Strategiespiel für einen Informatikkurs, den ich besuche. Einer der schwierigeren Aspekte scheint die Client-Server-Vernetzung und -Synchronisation zu sein. Ich habe mich mit diesem Thema beschäftigt (einschließlich 1500 Bogenschützen ), aber ich habe mich entschieden, einen Client-Server-Ansatz zu wählen, der sich von anderen Modellen unterscheidet (zum Beispiel über LAN).
Dieses Echtzeit-Strategiespiel bringt einige Probleme mit sich. Zum Glück ist jede Aktion des Spielers deterministisch. Es gibt jedoch Ereignisse, die in festgelegten Intervallen auftreten. Zum Beispiel besteht das Spiel aus Plättchen, und wenn ein Spieler ein Plättchen nimmt, sollte das 'Energieniveau', ein Wert auf diesem Plättchen, jede Sekunde um eins zunehmen, nachdem es genommen wurde. Dies ist eine sehr schnelle Erklärung, die meinen Anwendungsfall rechtfertigen sollte.
Im Moment mache ich Thin Clients, die nur Pakete an den Server senden und auf eine Antwort warten. Es gibt jedoch mehrere Probleme.
Wenn sich Spiele zwischen Spielern zu einem Endspiel entwickeln, gibt es häufig mehr als 50 Ereignisse pro Sekunde (aufgrund der geplanten Ereignisse, die sich häufen, wie bereits erläutert), und Synchronisierungsfehler treten dann auf. Mein größtes Problem ist, dass selbst eine kleine Abweichung des Status zwischen den Kunden unterschiedliche Entscheidungen der Kunden bedeuten kann, die Schneeball in völlig getrennte Spiele zerlegen. Ein weiteres Problem (das im Moment nicht so wichtig ist) ist die Latenz und man muss einige Millisekunden warten, auch Sekunden nachdem sie ihren Zug gemacht haben, um das Ergebnis zu sehen.
Ich frage mich, welche Strategien und Algorithmen ich verwenden könnte, um dies für den Endbenutzer einfacher, schneller und angenehmer zu machen. Dies ist besonders interessant angesichts der hohen Anzahl von Ereignissen pro Sekunde sowie mehrerer Spieler pro Spiel.
TL; DR beim Erstellen eines RTS mit> 50 Ereignissen pro Sekunde, wie synchronisiere ich Clients?