Sto sviluppando un gioco di strategia in tempo reale per un corso di informatica che sto seguendo. Uno degli aspetti più difficili sembra essere la rete e la sincronizzazione client-server. Ho letto su questo argomento (inclusi 1500 arcieri ), ma ho deciso di adottare un approccio client-server rispetto ad altri modelli (su LAN, ad esempio).
Questo gioco di strategia in tempo reale presenta alcuni problemi. Per fortuna, ogni azione intrapresa dal giocatore è deterministica. Tuttavia, ci sono eventi che si verificano a intervalli pianificati. Ad esempio, il gioco è composto da tessere e quando un giocatore prende una tessera, il "livello di energia", un valore su quella tessera, dovrebbe aumentare di uno al secondo dopo che è stato preso. Questa è una spiegazione molto rapida che dovrebbe giustificare il mio caso d'uso.
In questo momento sto facendo thin client, che inviano pacchetti al server e attendono una risposta. Tuttavia, ci sono diversi problemi.
Quando i giochi tra i giocatori si trasformano in endgame, ci sono spesso più di 50 eventi al secondo (a causa degli eventi programmati, spiegati in precedenza, accumulando), e quindi iniziano a comparire errori di sincronizzazione. Il mio problema più grande è che anche una piccola deviazione nello stato tra i clienti potrebbe significare decisioni diverse che i clienti prendono, che si trasformano in giochi di neve completamente separati. Un altro problema (che non è così importante in questo momento) è che c'è latenza e bisogna aspettare alcuni millisecondi, anche pochi secondi dopo che si muovono per vedere il risultato.
Mi chiedo quali strategie e algoritmi potrei usare per rendere questo più facile, veloce e divertente per l'utente finale. Ciò è particolarmente interessante data l'elevata quantità di eventi al secondo, insieme a diversi giocatori per partita.
TL; DR realizzando un RTS con> 50 eventi al secondo, come si sincronizzano i client?