maitretarot-devel-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Maitretarot-devel-fr] nouveau protocole


From: philippe brochard
Subject: [Maitretarot-devel-fr] nouveau protocole
Date: 16 Dec 2002 19:00:30 +0100
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2

Bonjour a tous,

suite a une discution avec Yves sur IRC, nous avons decider
de changer de protocole pour faire en sorte que la partie
gestion de l'ordre du jeu soit initiee par le serveur et
non pas dans le client (ou la lib client) comme c'est le
cas actuelement.

Pour cela, voila la liste des fonctions dont ont besoin
les clients :

Vocabulaire :)
  get : le client a besoin d'une information du serveur
  set : le client donne une valeur au serveur.    


Identification :
--------------

  * {Nick, } set_identity_client (void)

  Cette fonction est appele au debut pour realiser(?) la connexion et 
  informer le serveur sur le client qui vient de ce connecter.
  Les parametres de version ne sont pas primordial pour le client
  mais il peuvent etre utiles.


  * {void} get_resume_client (place, nombre_joueur, nick_client1,
      nick_client2, nick_client3, ..., score1, score2, score3, ...)

  Cette fonction permet d'informer le client sur les autres joueurs.
  la bornes nick_client3 depend du nombre de joueur, elle peut aller
  jusqu'a nick_client5 dans le cas d'un jeu a 5 joueurs ou
  nombre_joueur = 5.
  Les score1 a 3 (4 et 5) sont les scores totaux des precedentes parties.


Debut du jeu :
------------

  * void get_hand_cards (c1, c2, c3, c4, ..., c18)
  
  Le client recoit les cartes qu'il a en mains (c1, c2...).
  Le parametre c18 peut varier de c15 a c24 suivant un jeu a 5 joueurs
   ou 3 joueurs.


Encheres :
--------

  * {enchere} set_bid (e1, e2, e3, ...)

  Cette fonction est appelee si le client doit faire une
  enchere.
  Le serveur lui fourni les encheres des autres joueurs
  (e1,e2,e3,e4,e5 enchere des clients 1 2 3 4 5 suivant le
  nombre de joueurs) 


  * void other_bid (place, e1, e2, e3 , ...)

  Cette fonction est appelee quand un autre joueur est en
  train de faire sont enchere. Le serveur fourni la place du
  joueur qui est en train de faire sont enchere, ainsi que les
  encheres deja faites. 


Chien :
-----

  * {c1, c2, ..., c6} set_chien (pc1,pc2,...,pc6)

  Cette fonction est appellee si le client doit faire un chien
  (petite ou garde).
  Le serveur fourni les cartes du chien original (pc1...pc6).
  Le client renvoit les cartes du chien qu'il a fait (c1...c6).
  Les parametres c6 et pc6 peuvent etres c6,pc6 pour un jeu a 3
  ou 4 et c3,pc3 pour un jeu a 5 joueurs.
  Tant que le chien n'est pas valide, le serveur demande au client
  de faire un chien.


  * void chien_valide (c1, c2, ..., c6)

  Cette fonction est appellee si le chien fait par le client (avec
  set_chien) est valide. Elle permet au client de savoir que le serveur
  a accepte son chien.


  * void other_set_chien (place, c1, c2, ..., c6)

  Cette fonction est appellee quand un autre joueur est en train
  de faire son chien. Le serveur fourni la place du joueur qui est
  en train de faire son chien et le chien original.
  Meme reflexion que precedement sur le parametre c6 suivant le nombre
  de joueur. (Ceci toujours dans le cas d'une petite ou d'une garde).


  * void no_chien (void)

  Cette fonction est appellee si les clients n'ont pas a faire de chiens
  (garde sans, garde contre).


Jeu des cartes :
--------------

  * {card} set_card (lc1, lc2, lc3, ...)

  Cette fonction est appellee chaque fois que le client doit jouer une
   carte.
  Le serveur fourni les cartes du tour precedent en parametre (lc3 varie
  en fonction du nombre de joueur), le client renvoit la carte qu'il veut
  joueur.
  Tant que la carte n'est pas valide, le serveur demande au client
  de rejouer une carte.

  
  * void card_valide (card)

  Cette fonction est appellee si la carte card jouee par le client 
  (avec set_card) est valide.
  Elle permet au client de savoir que la carte card a ete acceptee
  par le serveur.


  * void other_set_card (place)

  Cette fonction est appellee quand un autre joueur est en train de
  choisir une carte a jouer. Le serveur fourni la place du joueur
  qui est en train de joueur.


  * void end_of_turn (c1, c2, c3, ..., lc1, lc2, lc3, ...)

  Cette fonction est appellee a la fin d'un tour. le serveur fourni
  les cartes jouees dans le tour (c1...) ainsi que les cartes du tour
  precedent (lc1...).
  Les bornes c3 et lc3 dependent du nombre de joueur.


  * {announce} set_announce (a1, a2, a3, ...)

  Cette fonction est appellee lorsque le serveur a besoin de connaitre
  les annonces des clients (juste apres le 1er tour, il me semble).
  Il fournit les annonces des autres joueurs et le client renvoie son
  annonce (s'il veut en faire une).


Fin de partie :
-------------

  * {replay} end_of_game (contract, win, score, oudlers, 
                          sc1, sc2, sc3, ..., chien1, chien2,
                          chien3, ...)

  Cette fonction est appellee en fin de partie si le jeu c'est
  deroule normalement ou que tout le monde a passe.

  Le serveur fourni :
    contract : le contrat du preneur
    win : TRUE si le preneur a gagne, FALSE autrement
    score : le score du preneur pour la partie
    oudlers : le nombre d'oudlers du preneur
    sc1, sc2, sc3 ... : les scores totaux de tous les joueurs
     (score de la partie ajoute aux scores precedents, pour chaque
     joueur). sc3 peut varier en fonction du nombre de joueurs.
    chien1, chien2, chien3, ... : les cartes dans le chien.
    chien3 peut varier en fonction du nombre de joueurs.

  Si tout le monde a passe, contract vaut BID_PASSE et les cartes du
  chien sont affectees, les autres valeurs sont non definies.

  Le client renvoi replay qui vaut TRUE si le client veut rejouer ou
  FALSE dans le cas contraire.


Cas particulier :
---------------

  * void normal_close (void)

  Cette fonction est appellee si la connexion a ete fermee normalement
  (en fin de partie quand quelqu'un a dis qu'il voulait quitter le jeu)


  * void lost_connexion (void)

  Cette fonction est appellee dans le cas ou il y a eu une deconnexion.
  Elle permet d'informer les clients que le jeu ne se deroule plus
  normalement.



Voila, pour l'instant ces fonctions sont faites dans libmt_client.
Et donc avec le protocole actuel c'est la libmt_client qui demande au
client de faire telle ou telle action (donc la libmt_client implemente
le meme protocole que le serveur).

Avec le nouveau protocole, ce serai bien de faire en sorte que ce soit le
serveur qui demande au client de faire telle ou telle action.
La libmt_client n'etant la que pour etablir la connection, gerer le
reseau et informer le client de ce que le serveur lui demande.
Dans ce cas, seul le serveur serai au courant du deroulement du jeu, les
clients ne faisant que repondre a ce que le serveur leur demande
(ie: il n'y aurai plus qu'une seule implementation du protocole : celle
du serveur).


Philippe



PS : j'espere que c'est comprehensible :)


-- 
(    )
 ~oo~         Philippe Brochard    <address@hidden>
  .. Gnu!                           http://hocwp.free.fr
  / =\   \=
 -   -    -   -=-= http://www.fsf.org/home.fr.html =-=-



reply via email to

[Prev in Thread] Current Thread [Next in Thread]