Para criar um jogo como um RTS em rede, já vi várias respostas sugerir tornar o jogo completamente determinístico; então você só precisa transferir as ações dos usuários e atrasar o que é exibido um pouco para "bloquear" a entrada de todos antes que o próximo quadro seja renderizado. Então, coisas como posições, saúde, etc. da unidade não precisam ser constantemente atualizadas na rede, porque a simulação de cada jogador será exatamente a mesma. Eu também ouvi a mesma coisa sugerida para fazer replays.
No entanto, como os cálculos de ponto flutuante não são determinísticos entre as máquinas, ou mesmo entre diferentes compilações do mesmo programa na mesma máquina, isso é realmente possível? Como podemos evitar que esse fato cause pequenas diferenças entre jogadores (ou replays) que se propagam ao longo do jogo ?
Ouvi algumas pessoas sugerindo evitar números de ponto flutuante e usar int
para representar o quociente de uma fração, mas isso não me parece prático - e se eu precisar, por exemplo, assumir o cosseno de um ângulo? Preciso seriamente reescrever uma biblioteca de matemática inteira?
Observe que eu estou interessado principalmente em C #, que, até onde eu sei, tem exatamente os mesmos problemas que o C ++ a esse respeito.