Monday, April 2, 2012

Mine Sweeper Game

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

No comments:

Post a Comment