Socket + Synchronisation [Résolu]

cs_emmanuel9 903 Messages postés mercredi 23 février 2005Date d'inscription 16 juin 2010 Dernière intervention - 10 août 2009 à 06:40 - Dernière réponse : cs_emmanuel9 903 Messages postés mercredi 23 février 2005Date d'inscription 16 juin 2010 Dernière intervention
- 11 août 2009 à 15:09
Bonjour à tous,

J'ai une question technique concernant les jeux réalisés en réseaux :

Si l'on imagine un jeux en réseau de ping pong avec deux raquettes et une balle, on a deux ordinateurs représentant chacun un joueur et échangeant des informations via un serveur se trouvant sur internet et qui retransmet les informations aux deux ordinateurs.

Pour le mouvement des raquettes cela ne pose pas de problème :

[i]- le joueur 1 presse le flèche haut

- l'information est envoyé au serveur

- le serveur retransmet l'info au joueur 2/i



Mais concernant le mouvement de la balle comment garantir que les deux ordinateurs verront la même chose ?

Est-ce au serveur de calculer les mouvements de la balle et retransmettre les informations ?

Comment garantir une parfaite synchronisation dans les jeux en réseaux ?

Par avance, merci.
Afficher la suite 

Votre réponse

4 réponses

cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 10 août 2009 à 09:59
+3
Utile
Salut,

Je pense que tout comme l'information de la raquette, l'information de la balle doit être envoyée par le client (sous forme de direction et force), et le serveur ne fait que transmettre l'information au deuxième client qui se chargera de calculer la position de la balle, sinon, si tu as un message à chaque nouvelle position de la balle, tu va consommer énormément de bande passante pour rien !
______________________________________
DarK Sidious
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_DARKSIDIOUS
Kotomine 112 Messages postés lundi 29 juin 2009Date d'inscription 5 novembre 2009 Dernière intervention - 11 août 2009 à 14:01
+3
Utile
Je te conseille également d'envoyer dans ton message la position de la balle le "TEMPS" !
Ce message devra être transmis à chaque changement de direction de la balle, ou périodiquement.


Imaginons qu'un packet se traine dans le réseau pour 500ms (ça peut arriver), voire que 2 packets arrivent dans un sens inverse (Cas fréquent en UDP)
Il faut garantir pour un "moteur physique" qui va faire des intégrations, que le bruit généré par l'aléa du réseau est corrigible.

Je te conseille de faire un packet ballEvent du type

class ballEvent ... {
int noBallEvent;
Point ballP;
int vX;
int vY;
}

le serveur va calculer les changements de vitesse , et la position.
Lorsque la vitesse change, il emmet aux clients le packet ballEvent.

Ce packet permet aux clients de savoir :
* la position actuelle de la balle
* les nouvelles vitesses

Si on perd un packet : pas grave, vu que le nouveau va nous renseigner sur l'état de la balle (Au bout d'un temps déterminé par le lag)

Si un packet arrive dans le mauvais ordre:
tu l'ignore: (on peut le savoir si jamais on recoit un packet aveec noBallEvent plus petit qu'un précédent)

Bonne chance !

; I'm just keeping the hopeless cross to increase the meaninglessness
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Kotomine
cs_emmanuel9 903 Messages postés mercredi 23 février 2005Date d'inscription 16 juin 2010 Dernière intervention - 10 août 2009 à 16:57
0
Utile
Merci pour la réponse.
Commenter la réponse de cs_emmanuel9
cs_emmanuel9 903 Messages postés mercredi 23 février 2005Date d'inscription 16 juin 2010 Dernière intervention - 11 août 2009 à 15:09
0
Utile
Merci beaucoup pour cette réponse si complète
Commenter la réponse de cs_emmanuel9

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.