Gibt es gute Referenzen / Bücher zum Erstellen eines Turn-Base-Game-Servers? Es ist so etwas wie ein Schachserver, mit dem Schachspieler gepaart und Spielzustände beibehalten werden können. In der Vergangenheit war das IGS (for go, weiqi) beispielsweise eine Socket-basierte Implementierung. Welche aktuellen Technologien stehen zur Verfügung, um daraus zu lernen? Vielen Dank!
game-design
networking
server
Oh ho
quelle
quelle
Antworten:
Ich glaube nicht, dass es ein bestimmtes Buch darüber gibt, da das Thema ein bisschen trivial ist.
Stellen Sie sich einen Mail-Server vor, auf dem Spieler ihre Aktionen per Mail versenden können. Auf dem Server werden alle bisher ausgeführten Aktionen (als E-Mails) ausgeführt, dh Sie haben den Spielstatus. Wenn Sie den Gamestate neu laden möchten, führen Sie einfach alle Aktionen in den Mails chronologisch aus. Das Einzige, was Sie tun müssen, ist sicherzustellen, wer an der Reihe ist ... aber das ist auch einfach (z. B. Turn-Nummern). Keine Notwendigkeit für zeitgemäße Technologien ... eine modifizierte Mailserver- / Client-Lösung reicht aus.
Das Pairing von ppl kann über Elo erfolgen ... aber ich denke, das wusstest du
quelle
Wenn ich es wäre, würde ich es von Grund auf mit Steckdosen bauen. Die zu sendende Datenmenge ist sehr gering, und aufgrund der rundenbasierten Art ist eine geringe Latenz nicht zu bemerken.
Die eigentliche Frage ist meiner Meinung nach, welche zusätzlichen Funktionen Sie benötigen. Sind die Spielsitzungen dauerhaft (kann jemand aussteigen und wieder beitreten, kann das Spiel gespeichert werden usw.)? Wenn Sie eine Speicherung im Civilization-Stil durchführen, möchten Sie die Sicherungsdaten wahrscheinlich an alle Clients senden oder die Speicherung auf Clientseite mit einem vom Server bereitgestellten Schlüssel zur Überprüfung durchführen.
Benötigen Sie eine Art Zwischenbericht, z. B. "Spieler 2 bewegt eine Einheit" oder "Ihr Gegner ist möglicherweise AFK"? In diesem Fall möchten Sie möglicherweise die Socket-Verbindungen geöffnet lassen.
Im Allgemeinen würde ich den Server so dumm und einfach wie möglich halten, es sei denn, es gibt einen zwingenden Grund für eine Abweichung. Lässt weniger zu debuggen. Ich verwende auch gerne Klartext-Protokolle, da ich meine Server mit Telnet ohne einen tatsächlichen Spieleclient testen kann (was bei einem bestimmten Problem möglicherweise vermutet wird), aber dies fördert die Wireshark-Manipulation der Daten (was Sie wahrscheinlich tun werden) auf jeden Fall überprüfen).
Bearbeiten: Wenn das Spiel nur 1-zu-1-Spiele unterstützt, sind Peer-to-Peer-Verbindungen möglicherweise einen Blick wert.
quelle
Es ist wichtig, nicht zu überdenken, was ein Server ist und welche Aufgaben er hat. In diesem Fall haben Sie ein relativ langsames Spiel, sodass die Serverarchitektur nicht unglaublich kompliziert wird (im Vergleich zu einem schnelleren Spiel, bei dem Sie keine Ahnung haben, usw.). Ihr Server sollte einen TCP-Port überwachen (kann auch UDP überspringen, wenn Sie ohnehin keine Geschwindigkeit benötigen), damit verbundene Clients ihm Informationspakete senden können. Es akzeptiert die Pakete, validiert sie basierend auf den Spielregeln und sendet eine Antwort zurück. In Ihrem speziellen Fall sollte Ihr Server wissen, wer gerade an der Reihe ist, und alle Versuche anderer Spieler, Aktionen auszuführen, ablehnen, bis sie an der Reihe sind.
Ich weiß nicht, welche Technologie Sie im Sinn hatten, aber etwas, das mit der Kyronet-Bibliothek in Java einfach zu tun wäre. Senden Sie einfach Ihre Spielaktionen an den zentralen Server (kann auch einer der beiden Spieler sein), verarbeiten Sie sie und senden Sie ein Spielupdate an beide Spieler zurück. Ich bin sicher, dass es für .NET etwas Ähnliches gibt.
quelle