Je développe un jeu de stratégie en temps réel pour un cours d'informatique que je prends. L'un des aspects les plus difficiles semble être la mise en réseau et la synchronisation client-serveur. J'ai lu sur ce sujet (y compris 1500 archers ), mais j'ai décidé d'adopter une approche client-serveur par opposition à d'autres modèles (sur LAN, par exemple).
Ce jeu de stratégie en temps réel pose quelques problèmes. Heureusement, chaque action du joueur est déterministe. Cependant, certains événements se produisent à intervalles planifiés. Par exemple, le jeu est composé de tuiles, et lorsqu'un joueur prend une tuile, le `` niveau d'énergie '', une valeur sur cette tuile, devrait augmenter d'une par seconde après sa prise. Ceci est une explication très rapide qui devrait justifier mon cas d'utilisation.
En ce moment, je fais des clients légers, qui envoient simplement des paquets au serveur et attendent une réponse. Cependant, il y a plusieurs problèmes.
Lorsque les jeux entre joueurs se transforment en fin de partie, il y a souvent plus de 50 événements par seconde (en raison des événements planifiés, expliqués plus tôt, de l'accumulation), et des erreurs de synchronisation commencent alors à apparaître. Mon plus gros problème est que même une petite déviation d'état entre les clients peut signifier différentes décisions que les clients prennent, ce qui fait boule de neige dans des jeux entièrement distincts. Un autre problème (qui n'est pas aussi important en ce moment) est qu'il y a une latence et qu'il faut attendre quelques millisecondes, même quelques secondes après avoir fait son mouvement pour voir le résultat.
Je me demande quelles stratégies et algorithmes je pourrais utiliser pour rendre cela plus facile, plus rapide et plus agréable pour l'utilisateur final. Ceci est particulièrement intéressant compte tenu du nombre élevé d'événements par seconde, ainsi que de plusieurs joueurs par match.
TL; DR réalisant un RTS avec> 50 événements par seconde, comment synchroniser les clients?