Estou desenvolvendo um jogo de estratégia em tempo real para um curso de ciência da computação que estou fazendo. Um dos aspectos mais difíceis parece ser a sincronização e rede cliente-servidor. Eu li esse tópico (incluindo 1500 arqueiros ), mas decidi adotar uma abordagem cliente-servidor em oposição a outros modelos (na LAN, por exemplo).
Este jogo de estratégia em tempo real vem com alguns problemas. Felizmente, todas as ações que o jogador executa são determinísticas. No entanto, existem eventos que acontecem em intervalos agendados. Por exemplo, o jogo é composto de peças, e quando um jogador pega uma peça, o 'nível de energia', um valor nessa peça, deve crescer um a cada segundo após ser colhido. Esta é uma explicação muito rápida que deve justificar meu caso de uso.
No momento, estou fazendo thin clients, que apenas enviam pacotes ao servidor e aguardam uma resposta. No entanto, existem vários problemas.
Quando os jogos entre os jogadores se tornam final, geralmente há mais de 50 eventos por segundo (devido aos eventos agendados, explicados anteriormente, acumulando-se), e os erros de sincronização começam a aparecer. Meu maior problema é que mesmo um pequeno desvio de estado entre os clientes pode significar decisões diferentes que os clientes tomam, que se transformam em jogos totalmente separados. Outro problema (que não é tão importante no momento) é que há latência e é preciso esperar alguns milissegundos, mesmo segundos depois que eles se movem para ver o resultado.
Estou imaginando quais estratégias e algoritmos eu poderia usar para tornar isso mais fácil, rápido e agradável para o usuário final. Isso é especialmente interessante, dada a grande quantidade de eventos por segundo, juntamente com vários jogadores por jogo.
TL; DR fazendo um RTS com> 50 eventos por segundo, como sincronizo clientes?