Bonjour,

Depuis quelque temps, je me renseigne sur la manière d'implémenter la partie réseau sur un jeu vidéo de type FPS.

Mise en situation

Le jeu sera composé d'un serveur et de plusieurs clients. Chaque joueur joue à l'aide de son client. La mise en relation des joueurs se fait par le serveur.

Le rôle du serveur

C'est lui qui joue les personnages, qui les fait avancer, reculer tirer... Il envois un message UDP daté à chacun des clients environ une fois toutes les 16 ms.

Les clients

Ce sont des visualiseurs de la scène. A partir des messages UDP reçues, il dessine la scène avec un léger retard et interpolation linéaire. Si un message de temps en temps est raté, l'interpolation fera le travaille et maintiendra une certaine fluidité. Il y aura donc un compromis à faire entre "temps réel" et fluidité.

Avancer, tirer...

Les clients ne font pas les déplacements de leur personnage directement. Ils envoient l'ordre de déplacer leur personnage au serveur et c'est lui qui s'en charge. Les clients verront leur personnage bouger légèrement plus tard.

Mes questions

Pour commencer, je voulais savoir si ce que je dis tiens la route. Ensuite, j'aimerais avoir un ordre d'idée du temps maximal aller-retour avant qu'un jeu de type FPS commence à ne plus être jouable.

J'aimerai aussi savoir s'il y a une solution rapide/simple/efficace qui permet d'éviter la perte d'un paquet du client vers le serveur. Si par exemple, le serveur ne reçois pas le message [arrêter d'avancer] ou [tirer] envoyé par le client, c'est assez gênant. J'aimerais garantir la réception du message mais pas nécessairement l'ordre des message. Si j'utilise TCP, l'arriver du message [tirer] risquerait d'attendre le message [arrêter d'avancer] alors que l'ordre n'est pas important mais plutôt la rapidité. Je cherche donc une solution du côté de UDP.

J'avais pensé à émettre le message 5 fois mais en cas de congestion, je risque de ne pas arranger les choses. Et la rémission répété jusqu'à acquittement me paraît lourde.

J'aimerais simplement avoir votre avis ou des retours d'expérience.

Merci.