Demineur / Minesweeper Le programme comprend une partie C et une partie Assembleur The program has a C-language part and an ASM part. Touches/Keys S : pas une mine / not a mine M : une mine / a mine Flèches/Arrows : pour se déplacer / to move C: #define dimx 6 #define dimy 6 #define tx 190 #define ty 30 #define pct 5 int _s1=1150, _s2=12145, _s3=28000,_p1=0,_p2=0,_p3=0 ; void main() {int rc=0; int debut(); clrscr(); printf("Donnez un chiffre entre 0 et 9 pour initialiser le tirage des griles:"); do {rc=getch();} while (rc <48 || rc>57); _s1=_s1*(1+rc)/100; printf("%d", rc); debut(1);} int debut(coups); int coups; {int lx,ly; /* nb de cases */ int cases[dimx][dimy];/*cases */ int *p_c; double rand();/* Nbre aleat */ void grille();/* Imp grille */ void genere();/* Gener mines*/ void calcul();/* Calcul nb */ void rect(); /* Rectangle */ void delrect();/*efface rect*/ void jeu(); void select(); void deselect(); void perdu(); /* explosion */ void decouvre(); /* pas mine */ void box(); void etendre (); int verif(); void adjacente(); /* initialisations */ clrscr(); p_c=&cases[0][0]; /* largeur -hauteur */ lx=(tx/dimx); ly=(ty/dimy); /* dessine grille */ grille(lx,ly); /* genere mines */ genere(p_c); /* densite des mines */ calcul(cases); /* Le jeu */ jeu(cases,lx,ly,coups); return 1; } /* impression de la grille */ void grille(lx,ly); int lx, ly; {int x,y ; for (x=0;x0){ if (y>0) {if (cases[x-1][y-1]==9) {nb+=1;}} if (cases[x-1][y]==9) {nb+=1;} if (y0) { if (cases[x][y-1]==9) {nb+=1;} if (x1.0) r-=1.0 ; return r; } /* le jeu */ void jeu(cases,lx,ly,coups); int cases[dimx][dimy],lx,ly,coups; {int nb=0,key=0,px,py,x,y; px=dimx/2; py=dimy/2; select(px,py,lx,ly); while (nb<1000) {if (verif(cases)==0){ clrscr();printf("Bravo !\nVous avez gagne en %d coups!\nPressez ENTREE pour rejouer.",coups);key=getch();debut(1);} key=getch(); deselect(px,py,lx,ly); if (key==29 && px>0){px=px-1;} if (key==28 && px0){py=py-1;} if (key==31 && py=0 && py>=0 && px=90) {cases[px][py]=cases[px][py]-90;} if (cases[px][py]>=80) {cases[px][py]=cases[px][py]-80;} if (cases[px][py]==1) {line (x-1,y,x+1,y);} if (cases[px][py]==2) {line (x-3,y,x-1,y);line (x+1,y,x+3,y);} if (cases[px][py]==3) {line (x-5,y,x-3,y); line (x-1,y,x+1,y);line (x+3,y,x+5,y);} if (cases[px][py]>=4 && cases[px][py]<8) {line (x-7,y,x-5,y);line (x-3,y,x-1,y); line (x+1,y,x+3,y);line (x+5,y,x+7,y);} if (cases[px][py]<9) {cases[px][py]=cases[px][py]+80;} } int verif(cases); int cases[dimx][dimy]; {int nb=0,x,y; for (x=0;x=89 && cases[x][y]<=98){nb+=1;} }return nb;} void box(x,y,z,t,d); int x,y,z,t,d; {pokeb(0,0x2003,x); pokeb(0,0x2004,y); pokeb(0,0x2005,z); pokeb(0,0x2006,t); pokeb(0,0x2007,d); pokeb(0,0x2008,20); call (8192,0); } Assembleur : ORG 2000H JMP START XD DB 0 YD DB 0 XF DB 0 YF DB 0 D DB 0 E DB 0 START: MOV BL,XD MOV BH,YD MOV CL,XF MOV CH,YF MOV DL,D MOV AH,E INT 41H IRET