Befindet sich Ihr Projekt in der Planungsphase, empfiehlt es sich, das Projekt von Anfang an für die Vernetzung zu konzipieren. Wenn Sie den Netzwerkcode zu einem späten Zeitpunkt des Projekts einbinden, wird dies höchstwahrscheinlich entweder zu massiven Umgestaltungen oder zu erheblichen Hackerangriffen führen, was zu kaum wartbarem und fehlerbehaftetem Code führt.
Am saubersten ist es, das gesamte Spiel so zu implementieren, als wäre es ein reines Netzwerkspiel. Implementieren Sie also Code für einen dedizierten Server und implementieren Sie diesen Code nur als Servercode. Implementieren Sie den Spiel-Client-Code auf ähnliche Weise. Server und Client können im selben Prozess ausgeführt werden und müssen nicht einmal einen echten Netzwerk-Socket verwenden. Sie sollten jedoch separate Entitäten sein und der gesamte Code sollte so gestaltet sein, dass er auf diese Weise funktioniert. Wenn der Spieler springt, ändern Sie den Sprungvektor des Spielers nicht direkt, sondern senden Sie ein Paket mit gedrückter Sprungtaste an den Server und lassen Sie den Server damit umgehen.
Dies bedeutet, dass selbst in einem Einzelspielerspiel ein unsichtbarer Server im Hintergrund ausgeführt wird. Eine Multiplayer-Version desselben Spiels muss nur eine Verbindung zu einem Remote-Server herstellen, anstatt der lokalen und der Voila-Multiplayer-Version. Die Vorteile davon sind:
Kein separater Code für Single und Multiplayer Der Netzwerkcode wird während des gesamten Projekts getestet und weiterentwickelt
Projekte, die dieses Schema verwenden, sind fast alle Spiele, die eine der Quake-Engines, Civilization 4, Neverwinter Nights und vieles mehr verwenden.
Für die Verbindung von Client und Server im selben Prozess ohne Latenz können lokale Sockets verwendet werden. Diese werden von Zoidcom bereitgestellt und leiten Pakete direkt von einem ZCom_Control an einen anderen weiter, ohne einen Socket auf Betriebssystemebene zu durchlaufen.