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

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

Re: [Maitretarot-devel-fr] les encheres ne marche toujours pas


From: Yves Mettier
Subject: Re: [Maitretarot-devel-fr] les encheres ne marche toujours pas
Date: Mon, 13 May 2002 00:35:43 +0200

On 12 May 2002 21:27:51 +0200
philippe brochard <address@hidden> wrote:

> 
> 
> 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 */

OK. C'est le protocole qui est mal ecrit. Et je me souviens l'avoir
ecrit comme ca. Mea culpa.

Au lieu de:
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).

il faut lire:
S->C(1*gint) : Si le gint est non nul, on passe à la suite. S'il
               est nul, on n'envoie pas l'enchere, ce qui revient a
revenir a l'etape suivante.

Bref, il n'y a pas de boucle while. Tu lis 4 fois les 4+1 gint, et la
seule fois ou c'est a ton tour de faire l'enchere, tu balances 1 gint.
Si c'est bon, je prefere te laisser revoir le protocole pour le rendre
plus clair, vu que moi, j'ai merde!

>     
> > > 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, y'a pas de while. A toi de me dire si mon 2eme essai d'explication
(le premier, c'etait le protocole.txt) est convaincant.

> 
> > > 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

C'est celui-la.
Pourtant, je n'en ai pas, et ca marche.
$ autoconf --version
Autoconf version 2.13
$ automake --version
automake (GNU automake) 1.4-p5
$ libtool --version
ltmain.sh (GNU libtool) 1.4.2 (1.922.2.53 2001/09/11 03:18:52)

Et toi, t'as quoi, des fois que le probleme vienne de la?
Et sinon, c'est en faisant ./configure que ca deconne, ou c'est en
faisant autre chose?

> 
> 
> 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)'

essaie de refaire autoconf puis automake, et si necessaire aclocal et/ou
libtoolize et/ou autoheade.
Puis ./configure

> 
> je me suis arreté la, j'attend que tu mette tout ça dans maitretarot
> et libmaitretarot.
> 

Hop, ca va pas tarder.

> 
> > 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.

OK.
J'y jetterai un coup d'oeil, et je verrai dans quelle mesure je mets ca
dans libmaitretarot.
Note qu'il faut tout de meme que tu aies fini au moins un client pour
qu'on puisse tester ca avant de le mettre dans libmaitretarot.

Yves
-- 
- Homepage - http://ymettier.free.fr                   -
- GPG key  - http://ymettier.free.fr/gpg.txt           -
- MyAM     - http://www.freesoftware.fsf.org/myam      -
- GTKtalog - http://www.freesoftware.fsf.org/gtktalog  -




reply via email to

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