Um ein Spiel wie ein RTS-Netzwerk zu machen, habe ich hier eine Reihe von Antworten gesehen, die vorschlagen, das Spiel vollständig deterministisch zu machen. dann müssen Sie nur noch die Aktionen der Benutzer aufeinander übertragen und die Anzeige etwas verzögern, um die Eingaben aller zu "sperren", bevor der nächste Frame gerendert wird. Dann müssen die Positionen, die Gesundheit usw. der Einheiten nicht ständig über das Netzwerk aktualisiert werden, da die Simulation jedes Spielers genau gleich ist. Ich habe auch die gleichen Vorschläge für Wiederholungen gehört.
Ist dies jedoch wirklich möglich , da Gleitkommaberechnungen zwischen Maschinen oder sogar zwischen verschiedenen Kompilierungen desselben Programms auf derselben Maschine nicht deterministisch sind ? Wie verhindern wir, dass diese Tatsache zu kleinen Unterschieden zwischen Spielern (oder Wiederholungen) führt, die sich im Laufe des Spiels ändern ?
Ich habe gehört, einige Leute schlagen vor, Gleitkommazahlen zu vermeiden und int
den Quotienten eines Bruchs darzustellen, aber das klingt für mich nicht praktisch - was ist, wenn ich zum Beispiel den Cosinus eines Winkels nehmen muss? Muss ich wirklich eine ganze Mathematikbibliothek umschreiben?
Beachten Sie, dass ich hauptsächlich an C # interessiert bin, was meines Erachtens genau die gleichen Probleme wie C ++ in dieser Hinsicht hat.