Mega Code Archive

 
Categories / C / Games Graphic
 

Mine Sweeper Game

#include <stdio.h> #include <conio.h> #include <graphics.h> #include <dos.h> #include <stdlib.h> #include <time.h> #define MROW 8 #define MCOL 8 #define MINES 5 #define BSIZE 15 union REGS i,o; //9 for mines main() { int bm=DETECT,bg=DETECT,maxx,maxy,button,x,y,i,j,checkx,checky,nclick; int arr[8][8],dot[MINES]; int count1,count2; int row,col; time_t t; clrscr(); initgraph(&bm,&bg,"e:\tcc\bgi"); maxx=getmaxx(); maxy=getmaxy(); if(initmouse()==0) { closegraph(); restorecrtmode(); printf("MOUSE NOT FOUND"); exit(1); } while(!kbhit()) { char loop='t'; setcolor(WHITE); setviewport(0,0,getmaxx(),getmaxy(),1); clearviewport(); showmouse(); //It Blanks the Array for(i=0;i<MROW;i++) for(j=0;j<MCOL;j++) arr[i][j]=0; //put mines in random blocks srand((unsigned) time(&t)); for(i=0;i<MINES;i++) { dot[i]=rand()%64; for(j=0;j<i;j++) if(dot[i]==dot[j]) break; if(i!=j) { i--; continue; } else { row=dot[i]/MROW; col=dot[i]%MCOL; arr[row][col]=9; } } //put mines value in other blocks for(row=0;row<MROW;row++) { for(col=0;col<MCOL;col++) { if(arr[row][col]!=9) //No Mine { int i,num=0,temp,ecol,erow,startrow; temp=col==0?col:col-1; ecol=col!=MCOL-1?col+1:col; startrow=row==0?row:row-1; erow=row==MROW-1?row:row+1; for(i=startrow;i<=erow;i++) for(j=temp;j<=ecol;j++) if(arr[i][j]==9) num++; arr[row][col]=num; } } } rectangle(0,0,maxx,maxy); //sets view port to the play area only setviewport(200,190,385,370,1); nclick=0; while(!kbhit()&&loop=='t') { int row=10,col=5; setlinestyle(0,0,3); rectangle(row-5,col-3,row*17,col*33); //Draws outer block setlinestyle(0,0,2); for(i=0;i<MROW;i++) { for(j=0;j<MCOL;j++) { rectangle(row,col,row+BSIZE,col+BSIZE); if(arr[i][j]!=9) { int temp[3]; if(arr[i][j]>=80) outtextxy(row+4,col+4,"F"); else if(arr[i][j]>=50) { itoa((arr[i][j]-50),temp,10); outtextxy(row+BSIZE/2,col+BSIZE/2,temp); } } row+=BSIZE+5; } row=10; col+=BSIZE+5; } if(nclick==MROW*MCOL-MINES) { setviewport(0,0,getmaxx(),getmaxy(),1); outtextxy(200,100,"CONGRATS! YOU WON THE GAME"); getch(); loop='f'; } getpos(&button,&x,&y); //puts F tag in Array if(button&2) { int val,prex=x,prey=y; x=210+(x-210)/20*20; y=195+(y-195)/20*20; val=arr[(y-195)/20][(x-210)/20]; if(val<10 || val>=80) { val=val>=80?val-80:80+val; arr[(y-195)/20][(x-210)/20]=val; while(button&2) getpos(&button,&x,&y); hidemouse(); setpos(30,50); clearviewport(); showmouse(); setpos(prex,prey); } } if(button&1 && x>=210 && x<=365 && y>=195 && y<=350) { char temp[4]; int trow,tcol; //determine current box x=210+(x-210)/20*20; y=195+(y-195)/20*20; trow=(y-195)/20; tcol=(x-210)/20; if(arr[trow][tcol]==9) { int row=10,col=5; setviewport(0,0,getmaxx(),getmaxy(),1); hidemouse(); outtextxy(200,100,"SORRY,YOU LOOSE THE GAME"); setviewport(200,190,385,370,1); //prints X marks in END on screen for(i=0;i<MROW;i++) { for(j=0;j<MCOL;j++) { if(arr[i][j]==9 || arr[i][j]==89) { setfillstyle(1,RED); bar(row,col,row+BSIZE,col+BSIZE); outtextxy(row+5,col+5,"x"); } row+=20; } row=10; col+=20; } showmouse(); setviewport(0,0,getmaxx(),getmaxy(),1); setfillstyle(1,YELLOW); bar(170,400,270,425); bar(330,400,430,425); while(loop=='t') { setcolor(BLUE); outtextxy(180,410,"PLAY AGAIN"); outtextxy(360,410,"QUIT"); getpos(&button,&x,&y); if(!button&1) { if(x>=170 && x<=270 && y>=400 && y<=425) { setfillstyle(1,CYAN); bar(170,400,270,425); setfillstyle(1,YELLOW); bar(330,400,430,425); outtextxy(180,410,"PLAY AGAIN"); outtextxy(360,410,"QUIT"); while(x>=170 && x<=270 && y>=400 && y<=425 && !button&1) getpos(&button,&x,&y); } if(x>=330 && x<=430 && y>=400 && y<=425) { setfillstyle(1,CYAN); bar(330,400,430,425); setfillstyle(1,YELLOW); bar(170,400,270,425); } outtextxy(180,410,"PLAY AGAIN"); outtextxy(360,410,"QUIT"); while(x>=330 && x<=430 && y>=400 && y<=425 && !button&1) getpos(&button,&x,&y); } else { if(x>=170 && x<=270 && y>=400 && y<=425) { setviewport(200,190,385,370,1); loop='f'; hidemouse(); break; } if(x>=330 && x<=430 && y>=400 && y<=425) { restorecrtmode(); closegraph(); exit(0); } } } } else { //NOT ON DANGER AREA if(arr[trow][tcol]<50) { nclick++; arr[trow][tcol]+=50; } } } } if(loop=='t') { restorecrtmode(); closegraph(); exit(0); } } } initmouse() { i.x.ax=0; int86(0x0033,&i,&o); return(o.x.ax); } showmouse() { i.x.ax=1; int86(0x0033,&i,&o); } hidemouse() { i.x.ax=2; int86(0x0033,&i,&o); } restarea(int x1,int x2,int y1,int y2) { i.x.ax=7; i.x.cx=x1; i.x.dx=x2; int86(0x0033,&i,&o); i.x.ax=8; i.x.cx=y1; i.x.dx=y2; int86(0x0033,&i,&o); } setpos(int x,int y) { i.x.ax=4; i.x.cx=x; i.x.dx=y; int86(0x0033,&i,&o); } getpos(int *button,int *x,int *y) { i.x.ax=3; int86(0x0033,&i,&o); *button=o.x.bx; *x=o.x.cx; *y=o.x.dx; }