Je veux créer un simple jeu multijoueur client-serveur en temps réel comme projet pour ma classe de réseautage.
J'ai beaucoup lu sur les modèles de réseaux multijoueurs en temps réel et je comprends les relations entre le client et le serveur et les techniques de compensation de décalage.
Ce que je veux faire, c'est quelque chose de similaire au modèle de réseau Quake 3: fondamentalement, le serveur stocke un instantané de tout l'état du jeu; lors de la réception des entrées des clients, le serveur crée un nouvel instantané reflétant les changements. Ensuite, il calcule les différences entre le nouvel instantané et le dernier et les envoie aux clients, afin qu'ils puissent être synchronisés.
Cette approche me semble vraiment solide - si le client et le serveur ont une connexion stable, seule la quantité minimale nécessaire de données sera envoyée pour les synchroniser. Si le client n'est plus synchronisé, un instantané complet peut également être demandé.
Je ne peux cependant pas trouver un bon moyen de mettre en œuvre le système d'instantanés. Je trouve vraiment difficile de m'éloigner de l'architecture de programmation solo et de réfléchir à la façon dont je pourrais stocker l'état du jeu de telle manière que:
- Toutes les données sont séparées de la logique
- Les différences peuvent être calculées entre un instantané des états du jeu
- Les entités de jeu peuvent toujours être facilement manipulées via le code
Comment une classe d' instantanés est -elle implémentée? Comment les entités et leurs données sont-elles stockées? Chaque entité cliente a-t-elle un ID qui correspond à un ID sur le serveur?
Comment les différences d'instantanés sont-elles calculées?
En général: comment un système d'instantanés d'état du jeu serait-il implémenté?