# Online-Spiele syncronisieren.



## Volvagia (29. Okt 2010)

Ich habe mich gerade gefragt, wie man das machen könnte. Wenn ich es schreiben würde, würde ich warscheinlich, sobald sich der Status des Spielers ändert, z. B. STATE_MOVE_LEFT, ich dem Server schicken, und dieser verteilt den Status an aller Spieler in dem aktuellen Raum, der Umgebung oder sonst was.
Aber z. B. in einen einfachen Ballerspiel. 2 Spieler stehen sich gegenüber. Der eine drückt ab, der andere bewegt sich auf die Seite um auszuweichen. Der ausweichende Spieler wird auf seinen Clienten nicht getroffen, da er den Schuss erst nach einigen ms empfängt. Der schießende Spieler trifft dem Spieler, da er die Bewegung des Anderen erst mit Verzögerung empfängt. Und der Server ist irgendwo dazwischen.

Wie könnnte man sowas syncronisieren?


----------



## krazun (29. Okt 2010)

Es gibt da einen ganz netten Artikel von Valve:

Source Multiplayer Networking - Valve Developer Community

Ich würde sagen daran kann man sich durchaus orientieren. Der Netcode von Counterstrike ist nicht grade der schlechteste 

mfg,
krazun


----------



## Landei (29. Okt 2010)

Das ist nicht-trivial, deshalb gibt es fertige Frameworks dafür, z.B. Project Darkstar oder JGN


----------



## Volvagia (29. Okt 2010)

Danke. 
Heißt das, der Client und der Server senden einfach seinen momentanen Status alle paar ms. über UDP? Ich habe bis jetzt keine Erfahrung mit UDP, weil ich eher Event-Basierend handle, und nicht wusste, was man im Fall eines verlohren gegangenen Datenpackets machen soll. Aber in so einen Thread, spielt das wohl keine Rolle.


----------



## Raziell (29. Okt 2010)

Hi,
hab vor garnicht alzu langer Zeit auch 2 Threads zu dem Thema eröffnet.
Vielleicht hilft es dir ja auch:

http://www.java-forum.org/spiele-multimedia-programmierung/98764-verstaendnishilfe-netzwerk-spiel-sockets.html

http://www.java-forum.org/netzwerkprogrammierung/98523-verstaendinsfrage-spieleprogrammierung-datagrammsocket.html

Ich zumindest habe immernoch Probleme mit der Interpolation 
Nicht so leicht das ganze Thema


----------



## OliverKroll (29. Okt 2010)

Du kannst dir Verteiltes System ? Wikipedia anschauen.
Es gibt dazu öffentlich einsehbare Universitäts-Vorlesungen (Verteilte Systeme ).
Kurzfassung: damit sich mehrere Rechner nicht streiten, richtet man auf einem der Rechner einen Koordinator ein. Es soll dann das Spiel möglichst nur noch auf diesem Koordinator stattfinden, die anderen Rechner bekommen nur noch eine Kopie des Spielablaufs zugeschickt. So kann es nicht mehr zu Unstimmigkeiten kommen.
Falls der Koordinator ausfällt oder ganz zu Anfang, wenn es noch keinen Koordinator gibt, einigen sich die Rechner darauf, eine Wahl durchzuführen.


----------

