Maitretarot Guide - Sun Sep 22 23:11:00 CEST 2002 | ||
---|---|---|
<<< Previous |
Note sur les termes qui vont suivre: Un message est une série de N*sizeof(type) octets envoyés
du serveur vers le client: on note cela S->C(N*type)
du client vers le serveur: on note cela C->S(N*type)
Table 3. Identification du client et du serveur
Data Type | Name/Branch point | Comment |
---|---|---|
C->S(2*gint) | LIBMT_NET_DATA_TYPE_GET_ID / N/A | Le premier gint est l'identifiant du serveur et le second celui de la version. Si L'identifiant du client n'est pas correct, le premier gint contient -1 et le client est déconnecté. |
S->C(2*gint) | LIBMT_NET_DATA_TYPE_SEND_ID / N/A | Le premier gint est l'identifiant du serveur et le second celui de la version. Si L'identifiant du client n'est pas correct, le premier gint contient -1 et le client est déconnecté. |
S->C(1*gint) | LIBMT_NET_DATA_TYPE_SEND_PROTOCOL / N/A | version du protocole. 1 : version 0.1 |
C->S(1*gint) | LIBMT_NET_DATA_TYPE_GET_PROTOCOL / N/A | 1 si le client peut utiliser ce protocole, sinon 0 et déconnection. |
S->C(1*gint) | LIBMT_NET_DATA_TYPE_SEND_PLACE / N/A | La place occupé par le joueur. |
C->S(1*gint) | LIBMT_NET_DATA_TYPE_GET_NICK_LEN / N/A | Longueur du nickname. Si 0 le serveur utilise le nom par défaut suivant la place du client et l'étape suivante (envoie du nickname) est passée. |
C->S(long_nick*gchar) | LIBMT_NET_DATA_TYPE_GET_NICK / N/A | le nickname du joueur. |
Remarque: La séquence suivante peut être envoyée à tout moment sur le canal 1 par le serveur au client pour réinitialiser les noms des joueurs. Elle est cependent envoyée ici, une seule fois, sur le canal 0.
Point de branchement: LIBMT_NET_DATA_BP_NEW_GAME/0
Indique le point de branchement pour une nouvelle partie ou en cas de déconnexion d'un joueur.
Point de branchement: LIBMT_NET_DATA_BP_SEND_BIDS/nombre de passages valides
La séquence suivante est répétée quatre fois:
Table 7. Encheres (séquence)
Data Type | Name/Branch point | Comment |
---|---|---|
S->C(4*gint) | LIBMT_NET_DATA_TYPE_SEND_BIDS / LIBMT_NET_DATA_BP_SEND_BIDS | chaque gint correspond à l'enchère du joueur dans l'ordre des places. Ils sont à -1 si le joueur n'a pas encore parlé. C'est au client de déterminer grace à ces enchères quelle est sa position. |
S->C(1*gint) | LIBMT_NET_DATA_TYPE_ASK_BID_QUESTION / LIBMT_NET_DATA_BP_SEND_BIDS | Si le gint est non nul, le client doit faire une enchère. S'il est est null, on ignore l'étape suivante. |
C->S(1*gint) | LIBMT_NET_DATA_TYPE_GET_BID / LIBMT_NET_DATA_BP_SEND_BIDS | Uniquement si le gint précédent était non nul. Mise du client. Si la valeur est erronée, le serveur considère que le client passe. |
Fin de la sequence
Table 8. Encheres (fin de la séquence)
Data Type | Name/Branch point | Comment |
---|---|---|
S->C(4*gint) | LIBMT_NET_DATA_TYPE_SEND_FINAL_BIDS / LIBMT_NET_DATA_BP_GET_CHIEN | resultat final des enchères. C'est au client de savoir si quelqu'un a pris et qui. Si personne n'a pris, les 4 gint sont à 0, et c'est au client de savoir qu'on va voir le chien puis recommencer la partie. |
S->C(6*gint) | LIBMT_NET_DATA_TYPE_SHOW_CHIEN / LIBMT_NET_DATA_BP_GET_CHIEN | Les 6 cartes du chien si l'enchere n'est ni garde sans chien, ni garde contre. |
Point de branchement: LIBMT_NET_DATA_BP_GET_CHIEN/0
Si la partie continue (si une personne au moins n'a pas passe), et pour le preneur seulement, si l'enchere est petite ou garde :
Table 9. Défausse pour le preneur
Data Type | Name/Branch point | Comment |
---|---|---|
C->S(6*gint) | LIBMT_NET_DATA_TYPE_GET_CHIEN / LIBMT_NET_DATA_BP_GET_CHIEN | Les 6 cartes defaussées dans le jeu du preneur. Le serveur vérifie que ces cartes sont bien présente dans le jeu du preneur. |
S->C(1*gint) | LIBMT_NET_DATA_TYPE_SEND_ACK_FOR_CHIEN / LIBMT_NET_DATA_BP_GET_CHIEN | 1 si la defausse est correcte, 0 sinon. si la défausse n'est pas correcte, on retourne à l'étape précédente. |
Point de branchement: LIBMT_NET_DATA_BP_READY_TO_PLAY/0
Avant le début de la partie, on envoie si nécessaire les annonces au serveur. Chaque annonce est optionnelle. L'annonce LIBMT_NET_DATA_TYPE_READY_TO_PLAY est la seule obligatoire, et elle doit être la dernière à être envoyée.
Point de branchement: LIBMT_NET_DATA_BP_SEND_TURN_CARD/Nombre de passages validés
Pour chaque pli, on effectue quatre fois la séquence suivante:
Donne des cartes du pli courant et du pli précédent (Table 11)
Demande si on doit jouer une carte. (Table 12)
Si oui, on joue une carte (Table 13)
Si non, on ne fait rien
Table 11. Donne des cartes du pli courant et du pli précédent
Data Type | Name/Branch point | Comment |
---|---|---|
S->C(8*gint) | LIBMT_NET_DATA_TYPE_SEND_TURN_CARDS / LIBMT_NET_DATA_BP_SEND_TURN_CARD | Les 4 premiers gint sont les cartes jouées par les joueurs précédents. Les 4 suivants sont les cartes du pli précédent. -1 correspond a un joueur qui n'a pas encore joué. Les cartes sont dans l'ordre des joueurs. REMARQUE: au premier pli, les 4 gint de fin sont à -1. |
Table 12. Doit-on jouer une carte ?
Data Type | Name/Branch point | Comment |
---|---|---|
S->C(1*gint) | LIBMT_NET_DATA_TYPE_SEND_TURN_CARDS_QUESTION / LIBMT_NET_DATA_BP_SEND_TURN_CARD | Si le gint est non nul, cela signifie que le serveur attend que le client joue une carte |
Table 13. Jeu d'une carte si le précédent gint était non nul.
Data Type | Name/Branch point | Comment |
---|---|---|
C->S(1*gint) | LIBMT_NET_DATA_TYPE_GET_TURN_CARD / LIBMT_NET_DATA_BP_SEND_TURN_CARD | la carte jouée si le précédent gint était non nul. |
S->C(1*gint) | LIBMT_NET_DATA_TYPE_SEND_ACK_FOR_CARD / LIBMT_NET_DATA_BP_SEND_TURN_CARD | 1 si la carte est correcte, 0 sinon. si la carte n'est pas correcte, on retourne à l'étape précédente. |
Remarque: si la partie n'a pas eu lieu parce que tout le monde a passé, ou pour toute autre raison (le petit sec par exemple), on reprend le protocole à partir d'ici.
Table 15. Fin de partie
Data Type | Name/Branch point | Comment |
---|---|---|
S->C(8*gint) | LIBMT_NET_DATA_TYPE_SEND_SCORE / LIBMT_NET_DATA_BP_NEW_GAME | Voir ci-dessous |
S->C(6*gint) | LIBMT_NET_DATA_TYPE_SHOW_CHIEN_AT_END / LIBMT_NET_DATA_BP_NEW_GAME | Les 6 cartes du chien. |
C->S(1*gint) | LIBMT_NET_DATA_TYPE_ACK_REPLAY / LIBMT_NET_DATA_BP_NEW_GAME | 0 pour arreter, 1 pour rejouer |
S->C(1*gint) | LIBMT_NET_DATA_TYPE_SEND_REPLAY_ANSWER / LIBMT_NET_DATA_BP_NEW_GAME | Si tous les joueurs ont repondu 1, on envoie 1. Et on rejoue une nouvelle partie. Si un joueur a repondu 0 ou s'est déconnecté, alors on envoie 0. |
Note: voici le détail des 8*gint du score:
1*gint: contrat (LIBMT_BID_* défini dans maitretarot.h)
1*gint: Le preneur a gagné? O/N (O=1, N=0)
1*gint: Score de la partie (nombre de points du preneur)
1*gint: Nombre d'oudlers du preneur
4*gint: Score total (score de la partie ajouté aux scores précédents, pour chaque joueur)
1*gint: LIBMT_BID_PASSE (défini dans maitretarot.h)
1*gint: non défini
1*gint: non défini
1*gint: non défini
4*gint: Score total (scores précédents, pour chaque joueur)
<<< Previous | Home | |
Exécution en mode 4 humain les uns contre les autres |