Jeu en réseau

De WikiPlee.

L'idée serait d'avoir un ordi qui sert de maître et l'autre qui se comporte en esclave. Le même niveau est exécuté sur chaque ordi. Le maître gère le temps. À chaque itération, avant de faire le progress, il attend que l'esclave lui envoie un signal pour indiquer qu'il est prêt. Puis l'itération est effectuée. Il faut par contre garantir que l'ordre de traitement des objets est le même sur toutes les machines.

[modifier] Démarrage

Un niveau doit être lancé sur le maître, qui indique à l'esclave de charger ce même niveau. Le chargement doit se faire en une seule itération, puis le jeu commence sur les deux machines.

[modifier] Transfert des commandes d'un joueur vers l'autre

Les actions entrées par un joueur doivent être transmises à son équivalent sur l'ordinateur distant. Dans une partie à plus de deux joueurs, il faut que chaque esclave puisse retrouver l'acteur correspondant et lui appliquer l'ordre.

En supposant qu'on ait une classe « client » qui représente un objet du jeu lisant récupérant des commandes sur le réseau. Voici un exemple de communication à 3 joueurs :

  • J1 se connecte au maître, celui-ci lui donne un identifiant de client
  • J2 se connecte au maître, celui-ci lui donne un identifiant de client
  • le maître prévient J1 de l'existence de J2 et inversement
  • J3 se connecte au maître, celui-ci lui donne un identifiant de client
  • le maître prévient J1 et J2 de l'existence de J3 et inversement
  • Début d'une itération
  • J1 effectue une action (sauter, courir, n'importe quelle touche), il dit au maître de diffuser l'action aux autres
  • Le maître envoie un message à J2 et J3 indiquant ce que fait J1
  • Fin de l'itération

On va avoir des problèmes de synchronisation avec ça. Si le progress de J1 est déjà effectué sur la machine de J2 lorsque J1 envoie son message, J1 ne sera pas modifié sur la machine de J2. Il faudrait que la lecture des actions à partir des contrôles soit bloquant lorsqu'il s'agit d'un joueur distant. Mais si le contrôleur attend les entrées de J1 et que ce sont celles de J2 qui arrivent, il ne faut ni rester bloqué, ni perdre les entrées de J2.

De plus, il ne faut pas que les contrôles aient une influence sur le joueur distant. Par exemple, si le joueur 1 appuie sur la touche « saut » associée, sur son ordi, au joueur 2, il ne faut pas que le second joueur traite l'ordre.

[modifier] Règles du jeu

Il faut trouver un moyen de mettre les même game_variables sur chaque client (nombre de joueurs, tir amical, etc.).