Per creare un gioco come un RTS in rete, ho visto una serie di risposte che suggeriscono di rendere il gioco completamente deterministico; quindi devi solo trasferire le azioni degli utenti l'una con l'altra e ritardare un po 'ciò che viene visualizzato per "bloccare" l'input di tutti prima che il rendering del fotogramma successivo venga eseguito. Quindi cose come le posizioni delle unità, la salute, ecc. Non devono essere costantemente aggiornate sulla rete, perché la simulazione di ogni giocatore sarà esattamente la stessa. Ho anche sentito la stessa cosa suggerita per fare replay.
Tuttavia, poiché i calcoli in virgola mobile non sono deterministici tra macchine o anche tra diverse compilazioni dello stesso programma sulla stessa macchina, è davvero possibile farlo? Come possiamo evitare che questo fatto causi piccole differenze tra i giocatori (o i replay) che si increspano durante il gioco ?
Ho sentito alcune persone suggerire di evitare del tutto i numeri in virgola mobile e di usarli int
per rappresentare il quoziente di una frazione, ma ciò non mi sembra pratico - e se avessi bisogno, per esempio, di prendere il coseno di un angolo? Devo seriamente riscrivere un'intera libreria matematica?
Nota che sono principalmente interessato a C #, che per quanto posso dire, ha esattamente gli stessi problemi di C ++ a questo proposito.