Welche Bibliothek für Multiplayer-Spiel?

Alle Fragen zur Netzwerkkommunikation
Antworten
Nukualofa
Beiträge: 3
Registriert: So 22. Jan 2017, 12:32

Welche Bibliothek für Multiplayer-Spiel?

Beitrag von Nukualofa »

Hallo,

ich bin dabei, eine Brettspieladaption für 2 bis 5 Spieler zu schreiben. Da ich mich erst mal um den ganzen spielspezifischen Code kümmern wollte, habe ich zunächst für die Benutzerverwaltung, den Verbindungsaufbau und die Kommunikation ein altes Design ausgegraben, mit dem ich noch nie so ganz glücklich war, da es aus sehr vielen Threads besteht. Nun versuche ich, das Ganze mit weniger Threads hinzubekommen und schaue mir in dem Zug die verschiedenen Bibliotheken für Netzwerkprogrammierung an: Indy, synapse, fphttpclient und wie sie alle heißen. Auf den ersten Blick scheint jede dieser Bibliotheken eigentlich für etwas anderes gedacht, deshalb meine Frage: Hat jemand Erfahrung mit Multithread-Client-Server-Anwendungen und kann mir eine dieser Bibliotheken (oder auch gern eine andere) empfehlen? Wenn möglich gerne mit einem Codeschnipsel :-)

Eigentlich brauch ich gar nicht viel: Ein Spieler soll ein Spiel eröffnen, die anderen Spieler sollen nach Eingabe von IP-Adresse und Port beitreten können. Die GUI des eröffnenden Spielers soll trotz des Wartens auf andere Spieler noch auf Benutzereingaben (wie z.B. dem Verstellen der Spielerfarbe bereits eingestiegener Gegner) reagieren können. Wenn die vorher festgelegte Spielerzahl erreicht ist, soll der Eröffner das Spiel starten können, und ab diesem Moment hat immer nur genau ein Spieler die Möglichkeit, etwas zu machen, d.h. es gibt keine Probleme wegen synchronize oder so (dass immer nur einer was machen kann, hab ich notgedrungen so gemacht, da das mit dem synchronize nicht so funktioniert hat, wie ich mir das vorgestellt habe - wenn es da ne bessere Lösung gibt bin ich dafür natürlich offen). Der Client am Zug wählt eine Zugoption aus und schickt diese als Nachricht an den Server, der die Nachricht an alle Clients weiterschickt (inklusive an denjenigen zurück, der den Zug gemacht hat), und das Ankommen dieser Nachricht löst dann bei allen die Durchführung des Zuges und ein Neuzeichnen des Bildschirms aus.

Und noch eine Frage: Damit ich nicht zwei Anwendungen starten muss, den eröffnenden Spieler aber trotzdem wie jeden anderen Spieler behandeln kann, startet der eröffnende Spieler für sich selbst auch einen Thread und tritt als eigener Client dem Spiel bei, seine Anwendung muss also Client und Server parallel verwalten. Macht man das üblicherweise so oder ist das eine dumme Idee?

Ich bin für jegliche Hinweise dankbar, auch dafür, dass ich das Ganze vielleicht völlig falsch angehe und es eine wesentlich einfachere Methode gibt oder natürlich auch für Quellcode von bestehenden und funktionierenden Multiplayer-Anwendungen!

Antworten