Hallo,
Ich habe mal eine rein theoretische Frage zu der Struktur/Aufbau einer Server-Client-Anwendung. Besser gesagt zu einem Server-Client-Spiel. Also zum Beipsiel man möchte ein Netzwerkspiel programmieren, in den sich mehrere Spieler einloggen können. Da wirft sich mir folgende Frage auf! Wie sieht die Strucktur eines solchen Server-Client-Spiels aus. Ich erwarte hier keine Codebeispiele oder ähnliches. Möchte dir Frage nur rein theoretisch klären.
Also nach meiner Meinung nach ergeben sich doch zwei Varianten, wie man seine Netzwerkübertragung strukturieren könnte. Ich werde hier mal meine beide Varianten darlegen, wie ich mir das vorstelle. Ihr könnt mir ja dann sagen ob ich mir das so richtig vorstelle oder ob ich in genau die falsche Richtung denke. Und wie man es besser machen könnte. Also effektiver für das Netzwerkt, das am wenigsten Daten übermittelt werden. Ich nicht sinnlos Daten hin und her geschoben werden, die gar nicht nötig sind.
Variante A:
Jeder Client erhält am Anfang des Spiel seine Daten und übermittelt seine Spielerdaten(Name, x- & y-Koordinate usw.) an den Server. Der Server dient nur als Datenverteiler und schickt alle Daten, die er von jedem einzelnen Clienten empfangen hat, an jeden Clienten wieder zurück, das somit jeder Client die Daten von jedem Spieler hat und somit die Spielsituation darstellen kann. Also sprich der Client ist für Sache wie Kollision usw verantwortlich. Die Rechenarbeit wird somit auf jeden Clienten verteilt, aber auch immerwieder doppelt durchgeführt, da ja jeder Client nach Kollision testen muss.
Variante B:
Der Server besitzt alle Spielerinformation, wie Name und Koordinaten. Der Client übermittelt nur seine Tätigkeit, also sprich Springen, nach links laufen, nach rechts laufen usw. Der Server verarbeitet die Information mit Hilfe der Information vom Client und setzt die Koordinaten nach rechts oder links und testet auf Kollision usw... Nach dem Test, schickt er nur die Koordinaten zurück, die abhängig davon sind ob der Spieler kollidiert ist oder nicht. Ist er kollidiert, verändern sich die Koordinaten zum Beispiel anders, als wie der Spieler es beabsichtigt hatte.
Ich hoffe ihr habt meine grundlegende Frage und meine beiden Varianten verstanden! Ich möchte jetzt wissen, welche der beiden Varianten die besten ist und welche generell in Netzwerkspielen verwendet werden. Oder gibt es noch andere Varianten, die ich hier nicht genannt hatte. Sind diese anderen Varianten vielleicht besser geeignet.
mfg raven
Ich habe mal eine rein theoretische Frage zu der Struktur/Aufbau einer Server-Client-Anwendung. Besser gesagt zu einem Server-Client-Spiel. Also zum Beipsiel man möchte ein Netzwerkspiel programmieren, in den sich mehrere Spieler einloggen können. Da wirft sich mir folgende Frage auf! Wie sieht die Strucktur eines solchen Server-Client-Spiels aus. Ich erwarte hier keine Codebeispiele oder ähnliches. Möchte dir Frage nur rein theoretisch klären.
Also nach meiner Meinung nach ergeben sich doch zwei Varianten, wie man seine Netzwerkübertragung strukturieren könnte. Ich werde hier mal meine beide Varianten darlegen, wie ich mir das vorstelle. Ihr könnt mir ja dann sagen ob ich mir das so richtig vorstelle oder ob ich in genau die falsche Richtung denke. Und wie man es besser machen könnte. Also effektiver für das Netzwerkt, das am wenigsten Daten übermittelt werden. Ich nicht sinnlos Daten hin und her geschoben werden, die gar nicht nötig sind.
Variante A:
Jeder Client erhält am Anfang des Spiel seine Daten und übermittelt seine Spielerdaten(Name, x- & y-Koordinate usw.) an den Server. Der Server dient nur als Datenverteiler und schickt alle Daten, die er von jedem einzelnen Clienten empfangen hat, an jeden Clienten wieder zurück, das somit jeder Client die Daten von jedem Spieler hat und somit die Spielsituation darstellen kann. Also sprich der Client ist für Sache wie Kollision usw verantwortlich. Die Rechenarbeit wird somit auf jeden Clienten verteilt, aber auch immerwieder doppelt durchgeführt, da ja jeder Client nach Kollision testen muss.
Variante B:
Der Server besitzt alle Spielerinformation, wie Name und Koordinaten. Der Client übermittelt nur seine Tätigkeit, also sprich Springen, nach links laufen, nach rechts laufen usw. Der Server verarbeitet die Information mit Hilfe der Information vom Client und setzt die Koordinaten nach rechts oder links und testet auf Kollision usw... Nach dem Test, schickt er nur die Koordinaten zurück, die abhängig davon sind ob der Spieler kollidiert ist oder nicht. Ist er kollidiert, verändern sich die Koordinaten zum Beispiel anders, als wie der Spieler es beabsichtigt hatte.
Ich hoffe ihr habt meine grundlegende Frage und meine beiden Varianten verstanden! Ich möchte jetzt wissen, welche der beiden Varianten die besten ist und welche generell in Netzwerkspielen verwendet werden. Oder gibt es noch andere Varianten, die ich hier nicht genannt hatte. Sind diese anderen Varianten vielleicht besser geeignet.
mfg raven