Pièce jointe « Master_Mind.c »

Téléchargement

   1 #include "ez-draw.h"
   2 #include<math.h>
   3 
   4 #define NBC 6  //Nombre de couleurs
   5 #define NBP 5  // Nombre de positions
   6 #define NMAX 7776 // Nombre de nbp_uplets possibles (NBC^NBP)
   7 #define NBR (NBP+1)*(NBP+2)/2-1 // Nombre de réponses possibles
   8 #define NBCOUPS 10 // Nombres maximum de tentatives 
   9 
  10 #define TAILLE_CASE 36
  11 #define HAUT_TITRE 40
  12 #define HAUT_LEGENDE 100
  13 
  14 
  15 // prod contient les produits -i*log(i/NMAX) pour i variant de 0 à NMAX
  16 double prod[NMAX+1];
  17 
  18 Window win_menu,     win1,win1_aide,win1_final,     win2, win2_final, win2_aide;
  19 int cand[NMAX][NBP]; // cand contient les nbp-uplets candidats 
  20 int pile[NMAX][NBP]; // pile sert à construire cand à chaque étape
  21 
  22 
  23 int spcand; // spcand sommet du tableau cand
  24 int  sp; // sp sommet du tableau pile
  25 
  26 int partition[NBR];//contient le nombre d'éléments de chaque sous-ensemble d'une partition
  27 int q[NBP];  //question posée
  28 
  29 
  30 int grille [NBCOUPS][2*NBP];
  31 
  32 int sol[NBP]; // la solution que l'on doit retrouver
  33 
  34 int compt; // compt compteur de question
  35 int n;//n variable "lue", indique le nombre de pions biens placés de la question posée
  36 int b;//b variable "lue", indique le nombre de pions mals placés de la question posée
  37 
  38 int nx,by; //nombre de biens placés et de mals placés calculés par la procédure compare
  39          // pour générer les combinaison candidates
  40 
  41 int j_clic; // Compteur du nombre de Clics sert à "cocher" la bonne case
  42 
  43 int d,t[NBP]; //variables utilisées par la procédure creer_cand
  44 
  45 void creer_cand(int j)//génère tous les nbp-uplets possibles et les range dans le tableau cand.
  46 {
  47   int i;
  48   if (j==NBP) //on a un nouveau nbp-uplet, on le range dans la ligne d du tableau cand
  49      {
  50        for(i=0;i<NBP;i++) cand[d][i]=t[i];
  51        d++;
  52      }
  53   else
  54     for(i=0;i<NBC;i++)
  55     {
  56       t[j]=i;
  57       creer_cand(j+1);
  58     }
  59 }
  60 void init()
  61 {
  62    int i,j,k;
  63    int aux[NBP];
  64    // Pré calcul de tous les -pi*log(pi)
  65    prod[0]=0;
  66    for(i=1;i<=NMAX;i++) prod[i]=-((double)i/NMAX)*log((double)i/NMAX);
  67    
  68    // on initialise la grille avec des -5
  69    for(i=0;i<NBCOUPS;i++)
  70      for(j=0;j<2*NBP;j++)
  71        grille[i][j]=-5;
  72    
  73    // création de tous les n_uplets
  74    d=0;
  75    creer_cand(0);
  76     
  77    // permutation aléatoire du tableau "cand" pour avoir des déroulements de partie différents
  78     for (i=NMAX-1;i>0;i--)
  79     { 
  80       k=rand()%(i+1);
  81       // échange des lignes i et k du tableau cand
  82       for(j=0;j<NBP;j++)
  83       {
  84         aux[j]=cand[i][j];
  85         cand[i][j]=cand[k][j];
  86         cand[k][j]=aux[j];
  87       }
  88      }
  89     spcand=NMAX-1;
  90     compt=0; // c est le compteur de questions
  91     
  92     j_clic=0;
  93     n=0;
  94     b=0;
  95 }
  96 
  97 int mini(int a,int b)
  98 {
  99   if(a<b) 
 100      return a;
 101   else
 102      return b;
 103 }
 104 
 105 
 106 // cette procédure compare les quaduplets q1 et q2 afin de déterminer nx et by
 107 void compare(int q1[],int q2[])
 108 {
 109   int i,j,c1,c2,s;
 110   // Calcul de x, nombre de biens placés
 111   nx=0;
 112   for (i=0;i<NBP;i++)
 113      if(q1[i]==q2[i]) nx++; 
 114   // Calcul de y, nombre de mals placés  
 115   s=0; 
 116   for (j=0;j<NBC;j++)
 117     {
 118       c1=0;
 119       c2=0;
 120       for (i=0;i<NBP;i++)
 121       {
 122          if (j==q1[i]) c1++;
 123          if (j==q2[i]) c2++;
 124       }
 125       s=s+mini(c1,c2);
 126     }
 127   by=s-nx;
 128 }
 129 
 130 double entropie() // calcule l'entropie de la question q
 131 {
 132   double s;
 133   int i;
 134   s=0;
 135   for(i=0;i<NBR;i++)
 136       s=s+prod[partition[i]];
 137   return s;
 138 }
 139 
 140 // cette procédure compte combien d'éléments il y a dans chacun des NBR sous-ensembles 
 141 // de la partition des n-uplets candidats qui se trouvent dans le tableau cand            
 142 void nbe_partition(int q[])
 143 {
 144   int i,ind;
 145   // initialisation à 0
 146   for(i=0;i<NBR;i++) 
 147       partition[i]=0;
 148   // 
 149   for(i=0;i<=spcand;i++)
 150   {
 151      compare(q,cand[i]); 
 152      ind=nx*(NBP+1)-nx*(nx-1)/2+by;
 153      partition[ind]++;
 154    }
 155 }
 156 // construction des nbp_uplets candidats.
 157 // on compare tous les nbp-uplets encore candidats à la question q posée, et
 158 // on ne retient que ceux qui fournissent la même réponse (x,y) que la réponse
 159 // lue (n,b) en les empilant au fur et à mesure dans la pile.
 160 void construire_candidats( )
 161 {
 162   int i,j;
 163   sp=-1;
 164   for(i=0;i<=spcand;i++)
 165   {
 166     compare(q,cand[i]);
 167     if((nx==n)&&(by==b))
 168     {
 169       sp++;
 170       for(j=0;j<NBP;j++)
 171          pile[sp][j]=cand[i][j];
 172     }
 173   }
 174   // on recopie dans le tableau cand tous les nbp-uplets qui ont été empilés.
 175   for(i=0;i<=sp;i++)
 176     for(j=0;j<NBP;j++) 
 177         cand[i][j]=pile[i][j];
 178   spcand=sp;
 179 }
 180 
 181 //génération aléatoire de la première question qui doit comporter nbp couleurs différentes
 182 void question1()
 183 {
 184   int t[NBC],i,aux,k;
 185   for(i=0;i<NBC;i++)// On remplit le tablau t avec les nbc couleurs
 186      t[i]=i;
 187   for(i=NBC-1;i>1;i--)// On génère une permutation aléatoire des couleurs
 188      {
 189        k=rand()%(i+1);
 190        aux=t[i];
 191        t[i]=t[k];
 192        t[k]=aux;
 193      }
 194   // on recopie dans la question q les nbp premières composantes du tableau t
 195   for(i=0;i<NBP;i++)
 196      q[i]=t[i];
 197 }
 198 
 199 // détermination des questions suivantes en recherchant 
 200 // la question qui possède la plus grande entropie
 201 void question_suivante()
 202 {
 203    int i,n0;
 204    double h,h0;
 205    h0=0;  
 206    for(i=0;i<=spcand;i++)
 207    {
 208      nbe_partition(cand[i]);
 209      h=entropie();
 210      if (h>h0)
 211         {
 212            h0=h;
 213            n0=i;
 214         }
 215    }
 216    
 217    for(i=0;i<NBP;i++)
 218       q[i]=cand[n0][i];
 219 }
 220 
 221 void set_couleur (int c)
 222 {
 223      switch(c)
 224      {
 225               case -2:ez_set_color(ez_black);break;
 226               case -1:ez_set_color(ez_grey);break;
 227               case 0 :ez_set_color(ez_red);break;
 228               case 1 :ez_set_color(ez_green);break;
 229               case 2 :ez_set_color(ez_blue);break;
 230               case 3 :ez_set_color(ez_yellow);break;
 231               case 4 :ez_set_color(ez_cyan);break;
 232               case 5 :ez_set_color(ez_magenta);break;
 233      }
 234 }
 235 
 236 //                   PARTIE I (on doit deviner la combinaison cachée par l'ordinateur) 
 237 
 238 void win1_aide_event(Ez_event *ev)
 239 {
 240      switch(ev->type)
 241      {
 242       case Expose:ez_set_color(ez_red);
 243                   ez_draw_text(ev->win,EZ_TL,20,20,
 244                   " Pour faire une proposition, vous devez cliquer pour chaque choix de couleur dans la palette \n"
 245                   " \n\n"
 246                   " A tout moment vous pouvez annuler votre proposition en cliquant dans la  case Annuler"
 247                   "\n\n"
 248                   " Pour valider votre proposition, cliquer dans la case Valider\n"
 249                   " \n \n"
 250                   " L'ordinateur affiche autant de disques noirs qu'il y a de couleurs biens placés "
 251                   " et autant de disques gris qu'il y a de couleurs mals placées"
 252                   "\n\n"
 253                   " Appuyer sur n'importe quelle touche pour fermer cette fenêtre");
 254                   break;
 255       case KeyPress:
 256       case ButtonPress:
 257       case WindowClose:
 258            ez_window_destroy(ev->win);
 259            
 260       
 261      }
 262 }
 263 
 264 
 265 void win1_final_event(Ez_event *ev)
 266 {
 267      int c;
 268      c=TAILLE_CASE;
 269      switch(ev->type)
 270      {
 271          case Expose: ez_set_nfont(3);
 272                       ez_set_color(ez_red);
 273                       if (compt==NBCOUPS-1)
 274                             ez_draw_text(ev->win,EZ_TL,50,150,"Perdu! trop de tentatives");
 275                       else
 276                             ez_draw_text(ev->win,EZ_TL,50,150,"vous avez trouvé en %d coups ",compt+1);   
 277                       break;
 278          case ButtonPress:
 279          case KeyPress:
 280          case WindowClose:
 281               ez_window_destroy(win1_final);
 282      }
 283 }
 284 
 285 void dessine_jeu1(Window win)
 286 {
 287    int a,b,c,d,i,j;
 288    a=HAUT_TITRE;
 289    b=TAILLE_CASE/2;
 290    c=TAILLE_CASE;
 291    d=HAUT_LEGENDE;
 292    
 293    
 294    /* Affiche le titre */
 295    ez_set_color(ez_magenta);
 296    ez_set_nfont(3);
 297    ez_draw_text(win,EZ_MC,c*8,a-25,"MASTER-MIND");
 298    ez_draw_text(win,EZ_MC,c*5,a+c/3,"Propositions");
 299    ez_draw_text(win,EZ_MC,c*10.5,a+c/3,"Réponses");
 300    /* Dessine la grille */
 301    ez_set_color(ez_blue);
 302    // Tracé des lignes horizontale
 303    for (i=0;i<=NBCOUPS;i++) 
 304        ez_draw_line(win,c*NBP/2,a+c+i*c,c*NBP/2+NBP*c,a+c+i*c);
 305    //Tracé des lignes verticales
 306    for(i=0;i<=NBP;i++)
 307         ez_draw_line(win,c*NBP/2+i*c,a+c,c*NBP/2+i*c,a+(NBCOUPS+1)*c);
 308     // Affichage les numéros, les questions et les cases réponses
 309    for(i=0;i<NBCOUPS;i++)
 310    {
 311        ez_set_color(ez_blue);
 312        ez_draw_text(win,EZ_BL,c*NBP/2-c,a+c+(i+1)*c-c/4,"%d",i+1);
 313        for(j=0;j<2*NBP;j++)
 314        {
 315         
 316         if (j>=NBP)
 317             {
 318                   ez_set_color(ez_blue);
 319                   ez_draw_circle(win,c*(NBP-2)+j*c+5,a+c+i*c+5,c*(NBP-2)+(j+1)*c-5,a+c+(i+1)*c-5);  
 320             }              
 321           if (grille[i][j]!=-5)
 322             {
 323               
 324                   set_couleur(grille[i][j]);
 325                   if (j<NBP)
 326                      ez_fill_circle(win,c*NBP/2+j*c+5,a+c+i*c+5,c*NBP/2+(j+1)*c-5,a+c+(i+1)*c-5);
 327                   else
 328                      ez_fill_circle(win,c*(NBP-2)+j*c+5,a+c+i*c+5,c*(NBP-2)+(j+1)*c-5,a+c+(i+1)*c-5);
 329             }
 330         }
 331    }
 332    // Affichage partie réponse
 333    ez_set_nfont(1);
 334    ez_draw_text(win,EZ_TL,c*NBP/2+2*c,a+c+11*c, "Palette");
 335    ez_set_nfont(1);
 336    for(j=0;j<NBC;j++)
 337     {
 338       set_couleur(j);
 339       ez_fill_rectangle(win,c*(NBP/2)+j*c+5,a+13*c+5,c*(NBP/2)+(j+1)*c-5,a+14*c-5); 
 340     } 
 341   
 342    ez_draw_text(win,EZ_TL,c*NBP/2+8*c,a+c+11*c, "Valider votre réponse");
 343    ez_draw_text(win,EZ_TL,c*NBP/2+13*c,a+c+11*c, "Annuler votre réponse");
 344    
 345    ez_set_color(ez_blue);
 346    ez_draw_rectangle(win,c+NBP/2+11*c,a+c+12*c,c+NBP/2+12*c,a+c+13*c);
 347    ez_draw_rectangle(win,c+NBP/2+16*c,a+c+12*c,c+NBP/2+17*c,a+c+13*c);
 348    
 349    // indication pour avoir de l'aide
 350    ez_set_color(ez_red);
 351    ez_draw_text(win,EZ_TL,20,15*TAILLE_CASE+HAUT_TITRE+HAUT_LEGENDE-20, "Taper sur la touche h pour avoir de l'aide");
 352 }
 353 
 354 void clic1_case(int x,int y)
 355 {     
 356    int a,c,j;
 357      c=TAILLE_CASE;
 358      a=HAUT_TITRE;  
 359      for(j=0;j<NBC;j++)
 360        if (x>=c*(NBP/2)+j*c+5 && x<=c*(NBP/2)+(j+1)*c-5 && y>=a+13*c+5 && y<=a+15*c-5)
 361           {
 362               grille[compt][j_clic]=j; 
 363               j_clic++;  
 364               if (j_clic==NBP) j_clic--;//on reste sur le dernier choix;le nombre de positions ne peut être dépassé  
 365           }
 366      
 367      if (x>=c+NBP/2+16*c && x<=c+NBP/2+17*c && y>=a+c+12*c && y<=a+c+13*c)//On efface le dernière réponse
 368         {
 369            j_clic=0;
 370            b=0;
 371            n=0;
 372            for(j=0;j<NBP;j++)
 373            grille[compt][j]=-5; // on efface             
 374         }
 375      if (x>=c+NBP/2+11*c && x<=c+NBP/2+12*c && y>=a+c+12*c && y<=a+c+13*c)// On valide
 376      {  if(j_clic== NBP-1)// On ne peut valider qu'après avoir choisie NBP couleurs
 377           {
 378              for (j=0;j<NBP;j++)
 379                  q[j]=grille[compt][j];                 
 380              compare(sol,q);  //Calcule  x et y (nb de bien placés et nb de mals placés)
 381              // On répond
 382              for (j=0;j<nx;j++)
 383                   grille[compt][NBP+j]=-2; // noir 
 384              for (j=0;j<by;j++)
 385                   grille[compt][NBP+nx+j]=-1; // gris                
 386              if(nx==NBP || compt==NBCOUPS-1) // On a trouvé ou l'on a perdu
 387                  win1_final=ez_window_create(500,500, "Fin de la partie",win1_final_event);  
 388              else
 389                {             
 390                   compt++;
 391                   j_clic=0;
 392                }
 393          }
 394          else
 395             { 
 396                 j_clic=0;
 397                 for(j=0;j<NBP;j++)
 398                        grille[compt][j]=-5; //on efface la réponse incomplète que l'on saisie
 399             }  
 400      }   
 401 }
 402 
 403 
 404 void win1_event(Ez_event *ev)
 405 {
 406      switch(ev->type)
 407      {
 408          case Expose: 
 409                       dessine_jeu1(ev->win);
 410                       break;
 411          case ButtonPress: 
 412                       clic1_case(ev->mx,ev->my);
 413                       ez_send_expose(ev->win);
 414                       break;     
 415          case KeyPress: if (XK_h) 
 416                            win1_aide=ez_window_create(700,200,"Aide",win1_aide_event);
 417                         break;   
 418          case WindowClose:
 419                           ez_window_destroy(ev->win);
 420                           ez_quit();
 421                           break;
 422      }   
 423      
 424 }
 425 
 426 //                PARTIE II (C'est à l'ordinateur de deviner la combinaison que l'on a choisie)
 427 
 428 
 429 void win2_aide_event(Ez_event *ev)
 430 {
 431      switch(ev->type)
 432      {
 433       case Expose:ez_set_color(ez_red);
 434                   ez_draw_text(ev->win,EZ_TL,20,20,
 435                   " Cliquer autant de fois dans la case noire pour indiquer le nombre de couleurs biens placées\n"
 436                   " Cliquer autant de fois dans la case grise pour indiquer le nombre de couleurs mals placées\n"
 437                   " Cliquer dans la case Valider pour donner votre réponse\n"
 438                   " Cliquer dans la case Annuler pour effacer votre dernière réponse  \n" 
 439                   " \n \n"
 440                   " Appuyer sur n'importe quelle touche pour fermer cette fenêtre");
 441                   break;
 442       case KeyPress:
 443       case ButtonPress:
 444       case WindowClose:
 445            ez_window_destroy(ev->win);
 446            
 447       
 448      }
 449 }
 450 
 451 
 452 void win2_final_event(Ez_event *ev)
 453 {
 454      int j,c;
 455      c=TAILLE_CASE;
 456      switch(ev->type)
 457      {
 458          case Expose: ez_set_nfont(3);
 459                       ez_set_color(ez_red);
 460                       if (n==NBP)
 461                           ez_draw_text(ev->win,EZ_TL,50,150,"J'ai trouvé en %d coups ",compt);
 462                       else if (compt==NBCOUPS-1)
 463                                ez_draw_text(ev->win,EZ_TL,50,150,"Perdu! trop de tentatives");
 464                            else
 465                                if (spcand<0)
 466                                    ez_draw_text(ev->win,EZ_TL,50,150," Vous avez mal répondu ! ");
 467                                else
 468                                {
 469                                   ez_draw_text(ev->win,EZ_TL,50,150,"J'ai trouvé en %d coups ",compt+1);
 470                                   ez_draw_text(ev->win,EZ_TL,50,180,"Voici la solution :");
 471                                   for(j=0;j<NBP;j++)
 472                                   {
 473                                       set_couleur(cand[0][j]);
 474                                       ez_fill_circle(ev->win,70+j*c+5,220+5,70+(j+1)*c-5,220+c-5);
 475                                   }
 476                                }
 477                       break;
 478          case ButtonPress:
 479          case KeyPress:
 480          case WindowClose:
 481               ez_window_destroy(win2_final);
 482      }
 483 }
 484 
 485 void dessine_jeu2(Window win)
 486 {
 487    int a,b,c,d,i,j;
 488    a=HAUT_TITRE;
 489    b=TAILLE_CASE/2;
 490    c=TAILLE_CASE;
 491    d=HAUT_LEGENDE;
 492    
 493    
 494    /* Affiche le titre */
 495    ez_set_color(ez_magenta);
 496    ez_set_nfont(3);
 497    ez_draw_text(win,EZ_MC,c*8,a-25,"MASTER-MIND");
 498    ez_draw_text(win,EZ_MC,c*5,a+c/3,"Propositions");
 499    ez_draw_text(win,EZ_MC,c*10.5,a+c/3,"Réponses");
 500    
 501    /* Dessine la grille */
 502    ez_set_color(ez_blue);
 503    // Tracé des lignes horizontale
 504    for (i=0;i<=NBCOUPS;i++) 
 505        ez_draw_line(win,c*NBP/2,a+c+i*c,c*NBP/2+NBP*c,a+c+i*c);
 506    //Tracé des lignes verticales
 507    for(i=0;i<=NBP;i++)
 508         ez_draw_line(win,c*NBP/2+i*c,a+c,c*NBP/2+i*c,a+(NBCOUPS+1)*c);
 509     // Affichage les numéros, les questions et les cases réponses
 510    for(i=0;i<NBCOUPS;i++)
 511    {
 512        ez_set_color(ez_blue);
 513        ez_draw_text(win,EZ_BL,c*NBP/2-c,a+c+(i+1)*c-c/4,"%d",i+1);
 514        for(j=0;j<2*NBP;j++)
 515        {
 516         
 517         if (j>=NBP)
 518             {
 519                   ez_set_color(ez_blue);
 520                   ez_draw_circle(win,c*(NBP-2)+j*c+5,a+c+i*c+5,c*(NBP-2)+(j+1)*c-5,a+c+(i+1)*c-5);  
 521             }              
 522           if (grille[i][j]!=-5)
 523             {
 524               
 525                   set_couleur(grille[i][j]);
 526                   if (j<NBP)
 527                      ez_fill_circle(win,c*NBP/2+j*c+5,a+c+i*c+5,c*NBP/2+(j+1)*c-5,a+c+(i+1)*c-5);
 528                   else
 529                      ez_fill_circle(win,c*(NBP-2)+j*c+5,a+c+i*c+5,c*(NBP-2)+(j+1)*c-5,a+c+(i+1)*c-5);
 530             }
 531         }
 532    }
 533    // Affichage partie réponse
 534    ez_set_nfont(2);
 535    ez_draw_text(win,EZ_TL,c*NBP/2+2*c,a+c+11*c, "Cliquer ci-dessous pour répondre");
 536    ez_set_nfont(1);
 537    ez_draw_text(win,EZ_TL,c*NBP/2+c,a+c+12*c, "Bien placé");
 538    ez_draw_text(win,EZ_TL,c*NBP/2+5*c,a+c+12*c, "Mal placé");
 539    ez_draw_text(win,EZ_TL,c*NBP/2+8*c,a+c+12*c, "Valider votre réponse");
 540    ez_draw_text(win,EZ_TL,c*NBP/2+13*c,a+c+12*c, "Annuler votre réponse");
 541    ez_set_color(ez_black);
 542    ez_fill_rectangle(win,c+NBP/2+3*c,a+c+13*c,c+NBP/2+4*c,a+c+14*c);
 543    ez_set_color(ez_grey);
 544    ez_fill_rectangle(win,c+NBP/2+7*c,a+c+13*c,c+NBP/2+8*c,a+c+14*c);
 545    ez_set_color(ez_blue);
 546    ez_draw_rectangle(win,c+NBP/2+11*c,a+c+13*c,c+NBP/2+12*c,a+c+14*c);
 547    ez_draw_rectangle(win,c+NBP/2+16*c,a+c+13*c,c+NBP/2+17*c,a+c+14*c);
 548    // indication pour avoir de l'aide
 549    ez_set_color(ez_red);
 550    ez_draw_text(win,EZ_TL,20,15*TAILLE_CASE+HAUT_TITRE+HAUT_LEGENDE-20, "Taper sur la touche h pour avoir de l'aide");
 551 }
 552 
 553 
 554 void clic2_case(int x,int y)
 555 {     
 556      int a,c,j;
 557      c=TAILLE_CASE;
 558      a=HAUT_TITRE;  
 559      if (x>=c+NBP/2+3*c && x<=c+NBP/2+4*c && y>=a+c+13*c && y<=a+c+14*c)
 560         {
 561             j_clic++;
 562             if (j_clic>NBP) j_clic--;//on ne doit pas dépasser le nombre de positions, on reste sur place
 563             grille[compt-1][NBP+j_clic-1]=-2; // noir
 564             n++;     
 565         }
 566      if (x>=c+NBP/2+7*c && x<=c+NBP/2+8*c && y>=a+c+13*c && y<=a+c+14*c)
 567         {
 568            j_clic++;
 569            if (j_clic>NBP) j_clic--;//On ne doit pas dépasser le nombre de positions, on reste sur place
 570            grille[compt-1][NBP+j_clic-1]=-1; // gris 
 571            b++;            
 572         }
 573      if (x>=c+NBP/2+16*c && x<=c+NBP/2+17*c && y>=a+c+13*c && y<=a+c+14*c)//On efface le dernière réponse
 574         {
 575            j_clic=0;
 576            b=0;
 577            n=0;
 578            for(j=0;j<NBP;j++)
 579            grille[compt-1][NBP+j]=-5; // vide             
 580         }
 581      if (x>=c+NBP/2+11*c && x<=c+NBP/2+12*c && y>=a+c+13*c && y<=a+c+14*c)//on valide
 582      {
 583         if(n==NBP) // On a trouvé
 584              win2_final=ez_window_create(500,500, "Fin de la partie",win2_final_event);  
 585         else
 586             {           
 587              construire_candidats(); 
 588              if(spcand<=0 || compt==NBCOUPS)// Soit on a trouvé (spcand =0), soit on a mal répondu, soit on a perdu
 589                   win2_final=ez_window_create(500,500, "Fin de la partie",win2_final_event);   
 590              else
 591                {
 592                   question_suivante();
 593                   compt++;
 594                   j_clic=0;
 595                   n=0;
 596                   b=0;
 597                   for(j=0;j<NBP;j++) 
 598                   grille[compt-1][j]=q[j]; // indication de la couleur
 599                }
 600              }
 601      }
 602 }
 603 
 604 void win2_event(Ez_event *ev)
 605 {
 606      switch(ev->type)
 607      {
 608          case Expose: 
 609                       dessine_jeu2(ev->win);
 610                       break;
 611          case ButtonPress: 
 612                       clic2_case(ev->mx,ev->my);
 613                       ez_send_expose(ev->win);
 614                       break;     
 615          case KeyPress: if (XK_h) 
 616                            win2_aide=ez_window_create(600,200,"Aide",win2_aide_event);
 617                         break;   
 618          case WindowClose:
 619                           ez_window_destroy(ev->win);
 620                           ez_quit();
 621                           break;
 622      }   
 623      
 624 }
 625 
 626 
 627 
 628 void clic_case_menu(int x,int y)
 629 {     
 630      int j;            
 631      if (x>=325 && x<=375 && y>=50 && y<=100)// On choisit de faire jouer l'ordinateur
 632      {
 633         init();
 634         compt++;
 635         question1();
 636         // Prise en compte de la question
 637         for(j=0;j<NBP;j++) 
 638          {
 639             grille[compt-1][j]=q[j]; // indication de la couleur
 640            
 641          }
 642         ez_window_destroy(win_menu); 
 643         win2=ez_window_create(TAILLE_CASE*(NBP*4+1),15*TAILLE_CASE+HAUT_TITRE+HAUT_LEGENDE," Master-Mind ",win2_event);  
 644      }
 645      if (x>=325 && x<=375 && y>=125 && y<=175)// On choisit de jouer contre l'ordinateur
 646      {
 647         init();
 648         for(j=0;j<NBP;j++)    // On génère aléatoirement la solution à chercher
 649            sol[j]=rand()%NBC;
 650         ez_window_destroy(win_menu); 
 651         win1=ez_window_create(TAILLE_CASE*(NBP*4+1),15*TAILLE_CASE+HAUT_TITRE+HAUT_LEGENDE," Master-Mind ",win1_event);  
 652      }
 653 }
 654 
 655 //                               Fenêtre de menu
 656 
 657 void win_menu_event(Ez_event *ev)
 658 {
 659      switch(ev->type)
 660      {
 661          case Expose: ez_draw_text(ev->win,EZ_TL,30,75,"Pour faire jouer l'ordinateur, cliquer ici  =>");
 662                       ez_set_color(ez_magenta);
 663                       ez_fill_rectangle(win_menu,325,50,375,100);
 664                       ez_set_color(ez_red);
 665                       ez_draw_text(ev->win,EZ_TL,30,150,"Pour jouer contre l'ordinateur, cliquer ici  =>");
 666                       ez_set_color(ez_green);
 667                       ez_fill_rectangle(win_menu,325,125,375,175);
 668                       break;
 669          case ButtonPress: 
 670                       clic_case_menu(ev->mx,ev->my);
 671                       ez_send_expose(ev->win);
 672                       break;     
 673          case KeyPress:   
 674          case WindowClose:
 675                           ez_window_destroy(ev->win);
 676                           ez_quit();
 677                           break;
 678      }   
 679      
 680 }
 681 
 682 
 683 int main()
 684 {
 685   if (ez_init()<0) exit (1);
 686   srand(time(0));
 687   win_menu=ez_window_create(600,300," Master-Mind ",win_menu_event);
 688   ez_auto_quit(0);
 689   ez_main_loop();
 690   system ("pause");
 691   return 0;
 692 }

Fichiers joints

Pour vous référer aux pièces jointes d'une page, utilisez attachment:filename, comme indiqué ci-dessous dans la liste de fichiers. N'utilisez pas l'URL du lien [get], car elle peut changer et donc être facilement cassée.
 All files | Selected Files: delete move to page copy to page

Vous n'êtes pas autorisé à joindre un fichier à cette page.