Design-Pattern o.ä. für Netzwerkkomponente?



  • Hallo,

    ich plane ein recht einfaches, netzwerkbasiertes Strategiespiel. Ich habe es nicht als klassisch-rundenbasierend geplant, allerdings wäre es wohl auch zuviel, von einem Echtzeitstrategiespiel zu sprechen; rundenbasierend bei sehr kurzer Rundenzeit würde es wohl am ehesten treffen. Ich weiß, das ist eine ziemlich vaage Beschreibung, aber ich weiß grade nicht, welche Informationen noch relevant sein könnten. Angenommen ich lege dem ganzen Spiel ein MVC-Konzept zugrunde. Hier ergeben sich für mich zwei Fragen zum Model, die ich selber nicht recht zu beantworten weiß:

    1. Ist es sinnvoll für das Model der Serveranwendung dieselben Klassen zu verwenden wie für das Model jedes Clients? Wenn nicht, in welcher Beziehung stehen die beiden Models zu einander?

    2. Wie wickelt man ambesten die Synchronisation der beiden Models ab? Möglicherweise erübrigt sich diese Frage nach Beantwortung von Frage 1.

    Wäre sehr dankbar für aufklärende Antworten und Denkanstöße,
    vielen Dank im Voraus!



  • Was ich mir so gedacht hätte.

    Deine Spielwelt kann im Speicher vom Server und vom Client erstmal gleich sein. In die Spielwelt sendest du dann "Events" rein. Im Fall vom Server sind dass halt die Events vom Client und im Fall vom Client die Events von den anderen Clients und vom Server. Dann hast du noch eine Funktion, um die Spielwelt zu updaten, also in der Zeit voranzuschreiten. Das wäre das ganze so im Groben.

    Fazit: Ich würde das so machen, dass die Datenstruktur Spielwelt auf dem Server und Client gleich ist, nur halt vom Client und vom Server verschieden manipuliert wird.



  • zu Frage 1: vermutlich wird zumindest der Grossteil des Codes zwischen Server und Client gleich sein. Das komplett getrennt zu programmieren halte ich - solange keine wirklich guten Gründe dafür sprechen - für Wahnsinn.

    zu Frage 2: das kommt wohl auch darauf an wer Replication-Master ist. Bei Rundenbasierten Strategiespielen ist eigentlich immer der Server Replication-Master für sämtliche spielrelevanten Elemente (also eigentlich alles bis auf Dinge die bloss Eye-Candy sind). Wenn der Server für alles Replication-Master ist ist die Sache eigentlich recht einfach: du schickst Updates vom Server an alle Clients wenn sich was geändert hat.

    Wenn geringstmögliche Latenz kein Kriterium ist dann verwendest du dafür TCP, und die Sache wird relativ einfach (weil du dich nicht um verlorengegangene Packets kümmern musst).

    Wenn aus irgendeinem Grund der Server NICHT für alle spielrelevanten Objekte Replication-Master sein soll/darf/kann, dann wird es komplizierter.


Anmelden zum Antworten