wiki:EnstaTP4

Version 1 (modified by Vincent Caron, 14 years ago) (diff)

--

TP4: Projet - jeu en réseau, application au jeu en Python

Principe

Le serveur décide de tous les éléments du jeu :

  • la description du plateau de jeu, qu'il diffuse auprès des clients
  • la présence (oui/non) et le nommage des joueurs (chacun un nom unique)
  • les mouvements des joueurs
  • les positions des bombes, et leur instant de pose et d'explosion
  • les joueurs touchés par les bombes
  • les scores
  • la fin de la partie

Protocole proposé

Prologue

C: new_player <player name>
S: level <name> <width> <height>
S: level_row <row description #1>
...
S: level_row <row description #height>

Nous avons là un "handshake" minimal. Le prologue est considéré fini lorsque le client a reçu la descrpition de toutes les lignes attendues. Après le prologue, le serveur et les clients fonctionnent de manière asynchrone, en initiant chacun une commande au moment de leur choix.

Serveur: envoi de position d'un joueur

S: player_pos <player name> <col> <row>

Il n'y a pas d'annonce explicite de l'arrivée des joueurs sur le plateau. Le premier ordre player_pos reçu par un client doit être considéré comme l'annonce d'arrivée d'un joueur. Un client se verra bien entendu annoncer son propre joueur (pour obtenir sa position initiale).

Serveur: envoi d'un mouvement d'un joueur

S: player_move <player name> <dcol> <drow>

Bien que seules la position (cellule) d'un joueur soit prise en compte pour l'interprétation des règles du jeu, la visualisation des mouvements des joueurs (un effet graphique de glissement en attendant de changer définitivement de cellule) est essentiel pour la jouabilité !

Serveur: annonce de la mort d'un joueur

S: player_life <player name> <life>

On peut gérer les "credits" en considérant <life> comme un compteur, la mort du joueur étant représentée par zéro.

Serveur: annonce de pose de bombe

S: bomb_drop <id> <col> <row>

L'identifiant id sera repris par la commande bomb_explode.

Serveur: annonce d'explosion de bombe

S: bomb_explode <id>

Client: envoi d'une intention de mouvement d'un joueur

C: player_try_move <dcol> <drow>

Client: envoi d'une intention de pose de bombe

C: player_try_drop