[Top][All Lists]
[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 =-=-
- [Maitretarot-devel-fr] nouveau protocole,
philippe brochard <=