[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Maitretarot-devel-fr] les encheres ne marche toujours pas
From: |
philippe brochard |
Subject: |
Re: [Maitretarot-devel-fr] les encheres ne marche toujours pas |
Date: |
12 May 2002 21:27:51 +0200 |
User-agent: |
Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 |
ok, ton code marche (voir plus bas)
mais je reprend le protocole quand même parce que je crois que
j'ai pas tout compris à ce qui est ecrit.
Yves Mettier <address@hidden> writes:
> On 12 May 2002 15:13:25 +0200
> philippe brochard <address@hidden> wrote:
>
> >
> > bon, j'ai vraiment un probleme avec les encheres.
> > voila le code que j'ai fait et la partie du protocole qui va avec :
> >
> >
> > ---------------------------------------------------------------------
> > ------ La sequence suivante est repetee quatre fois:
for (i = 0; i < 4; i++)
{
ok = 0;
while (ok == 0)
{
> > S->C(4*gint) : 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 qu'elle est sa position.
get_bid (les 4 gint)
> > S->C(1*gint) : Si le gint est non nul, on passe à la suite. S'il est
> > nul, on revient à l'étape précédente (attendre les 4*gint).
ok = bid_is_valide (1 gint)
} /* si ok est null on revient à l'etape precedente */
> > C->S(1*gint) : 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.
/* avec le while, ok est forcement à 1 si on arrive ici */
make_bids
send_bids
> > Fin de la sequence
}
> >
> > S->C(4*gint) : 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.
> > ---------------------------------------------------------------------
> >
> >
> > dans mt_ncurses_client/src/main.c
> > ---------------------------------------------------------------------
> > ------
> > for (gi = 0; gi < nb_player; gi++)
> > {
> > ok = 0;
> >
> > while (ok == 0)
> > {
> > player_get_bid (&player);
> >
> > player_client_draw_desktop (&player, "Player ??? make its
> > bid");
> >
> > ok = player_get_bid_is_valide (&player);
> > }
> >
> > if (player_have_to_make_bid (&player) != 0)
> > {
> > player_client_make_bid (&player);
> > player_send_bid (&player);
> > }
> >
> > sprintf (str, "ICI gi=%d", gi);
> > print_message (str);
> > }
> >
> > /* Get final bids */
> > player_get_bid (&player);
> > ---------------------------------------------------------------------
> > ------
> >
> >
> > le code pour chaque fonctions est dans
> >
> > mt_ncurses_client/src/player.c
> > ou mt_ncurses_client/src/player_client.c
> >
> > et nb_player vos 4.
> >
> >
> > Si vous voyez ou je fait une erreur...
>
> Je capte rien a la structure de ton code. J'ai l'impression qu'il y a
> une boucle de trop.
>
> Je te le refais, en esperant pas me tromper.
> for (gi = 0; gi < nb_player; gi++)
> {
> ok = 0;
>
> /* lit les 4+1 gint */
> player_get_bid (&player);
>
> player_client_draw_desktop (&player, "Player ??? make its bid");
>
> /* c'est quoi player_get_bid_is_valide() ?
> * Je commente parce que je crois que ca ne sert pas
> * ok = player_get_bid_is_valide (&player);
> */
>
> /* test si c'est au joueur de faire son enchere
> * ici, il vaut mieux tester en fonction des 4 premiers gint
> * plutot qu'en fonction du gint qui suit
> * parce que le gint qui suit risque de disparaitre
> */
> if (player_have_to_make_bid (&player) != 0)
> {
> /* Calcule l'enchere possible en fonction du jeu des des
> * encheres deja faites des autres joueurs
> */
> player_client_make_bid (&player);
> /* envoie un gint: c'est l'enchere */
> player_send_bid (&player);
> }
>
> sprintf (str, "ICI gi=%d", gi);
> print_message (str);
> }
>
>
>
> >
> > En tout cas, la partie avec
> > sprintf (str, "ICI gi=%d", gi);
> > print_message (str);
> >
> > n'est atteinte qu'une fois et on ne sort jamais de la boucle for,
> > en plus des fois sa segfault :(
>
> J'ai pas teste ce que je t'ai ecrit.
> J'ai l'impression que ton while ne sert a rien.
>
Ben, le while sert juste à repeter l'acqisition des encheres temps
que le gint n'est pas à 1 (comme dis dans le protocole).
> > bon en attendant, je teste la lib de maitretarot.
>
> Alors?
>
J'ai des pb de compilation :
configure.in: 22: required file `./ltconfig' not found
j'ai donc pris le ltconfig de /usr/share/libtool/ltconfig
ensuit un pb avec PKG :
./configure: line 1754: syntax error near unexpected token
`PKG_CHECK_MODULES(GLIB,'
./configure: line 1754: `PKG_CHECK_MODULES(GLIB, glib-2.0 >= 1.3.1)'
je me suis arreté la, j'attend que tu mette tout ça dans maitretarot
et libmaitretarot.
> De mon cote, j'ai quelques trucs a faire sur gtktalog.
> Ensuite, je forke maitretarot dans le CVS pour le compiler contre
> libmaitretarot.
>
> Un petit truc sur les clients et libmaitretarot.
> Est-ce qu'il est envisageable d'avoir les fonctions qui lisent/ecrivent
> au serveur suivant le protocole dans libmaitretarot?
> Le but, c'est bien sur que le code commun a toutes les IA et a toutes
> les GUI ne soit pas duplique mais dans libmaitretarot.
>
oui, c'est faisable, le code commun est dans player.c player.h
toutes ces fonction prennent en argument la structure player_t qu'il
suffit de remplir avant chaque envoie.
exemple avant d'envoyer le chien, il faut remplir player->chien[6]
" une carte a jouer " player->card_play
etc...
pour l'instant, ce code est dupliquer dans le client et dans mt_dolphin_ia.
Philippe
--
,-------------------. ,---------------,----------------------.
| Philippe Brochard | ... | address@hidden | http://hocwp.free.fr |
`------------------(_ (. .) `---------------'----------------------'
-------------------ooO--(_)--Ooo--------------------------------------