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.Vous n'êtes pas autorisé à joindre un fichier à cette page.