Simple Minesweeper GAME in c

Discussion in 'Game programming' started by jose_peeterson, Jun 18, 2011.

  1. jose_peeterson

    jose_peeterson New Member

    Joined:
    May 19, 2011
    Messages:
    56
    Likes Received:
    1
    Trophy Points:
    0
    Code:
    // this game is free for anyone. if you find this helpful, please, in gratitude help me when   //  i put my posts on go4expert thanks :) enjoy........
    // for more info read the manual of minesweeper in windows, its quite similar.
    // the mines placed in this game are randomly generated.
    // please modify the code anyway you wish and let me know of any bugs.. :)
    // printmatrix() is a function borrowed from elsewhere but it just prints the array. 
    
    #include<stdio.h>  // interger to pointer without cast PROBLEM....
    #include<stdlib.h> // SOLUTION :  whenever using string the data type  
                      // of the array must be char
    
    void welcome();
    void rand_mines(char msweep[12][12]);
    void printmatrix(char msweep[12][12],int r,char user_chart[12][12]);
    int process(char msweep[12][12],int r,int c,char user_chart[12][12]);
    
    int main()
    
    {                    // size of array is 10,array starts from 1 to 11
    
    char msweep[12][12] = {{'0'}};      
    int i,r,c;   
    char user_chart[12][12] = {{'0'}};
    
    // welcome();   
        
     rand_mines(msweep);  
    
    // printmatrix(msweep,12,user_chart);  // note grid from 1 to 11  
      
      printf("Enter your location(ONLY 1 - 11) on the minefield x,y\n");
      scanf("%d%d",&r,&c);
     
                  printmatrix(msweep,12,user_chart);  
     
     i = process(msweep,r,c,user_chart); //returns 1 or 0,1 is notmine 0 = mine
      
         
      while(i == 1)     
       {
         printf("Lucky BRAT, live on for another step\n");      
         printf(" %c Surrounding MINEs\n\n",msweep[r][c]);
         
         printmatrix(msweep,12,user_chart); 
         
         printf("enter next move...(ONLY 1 - 11) ");
         scanf("%d%d",&r,&c);
         i=0; 
         
         i = process(msweep,r,c,user_chart);    
       
       
       }  
    
      if(i==0)
       printf("Game OVER, ta ta. you stepped on a MINE !!\n");
    
    return 0;    
        
    }
    
    void welcome()
    {
    
    char op; // opereation
    
     printf("Welcome to MINESWEEPER in C >>.....\n");
    
     printf("Enter <<\n");
     printf("         i for instructions\n");
     printf("         any other key to enter game\n");
     scanf("%c",&op);
    
     if(op == 'i')
      {
       printf("OH DEAR, what a shock you are unfortunatly in the midst of a "); printf("mine field.\n");    
      printf("Enter the coordinates of the x and y plane between 1 to 11\n");   
       printf("Are you destined to DIE or live ?\n");
       printf("HA ha ha hah, GOOD LUCK\n\n");
      
      }
    else
     return;    
    }
    
    void rand_mines(char msweep[12][12])
    
    {
        
    int r,c,m;
    
     //srand(12);   
     
     for(m=0;m<20;m++) // plant 20 rand mines(m
         
      {
       r = rand() % 13; // this is mine planting     
                        // so can be at the edges aswell
       c = rand() % 13; // so 0 to 13 is APPROPRIATE.
        
       
       msweep[r][c] = '9'; 
      printf("%d %d \n",r,c);
      
      }  
        
    return;
    
    }
    
    void printmatrix(char msweep[][12],int r,char user_chart[12][12])
    {
        
    int i,j;    
     
    printf("   .-.-.-.-.-.-.-.-.-.-.-.\n");
    
     for(i=1;i<r;i++)
      {
       printf("./.");
    
       for(j=1;j<12;j++) //printing 1 to 11    
        {
         printf("%c ",user_chart[i][j]);//to refer to mines use msweep[i][j]    
        } 
       
       printf(".\\.");
       
       printf("\n");   
      
      }
    
    printf(".-.-.-.-.-.-.-.-.-.-.-.-.\n\n");
    
    return;    
    }
    
    int process(char msweep[12][12],int r,int c,char user_chart[12][12])
    {
        
     int i=r,j=c,b=0,k;    
     char C;
    
     if(msweep[r][c] == '9')   
     {  k=0;
       return k;
     }
     else
      {
       if(msweep[i-1][j-1] == '9')    
        b++;  
       if(msweep[i-1][j] == '9')    
        b++;  
       if(msweep[i-1][j+1] == '9')    
        b++;  
       if(msweep[i][j-1] == '9')    
        b++;  
       if(msweep[i][j+1] == '9')    
        b++;  
       if(msweep[i+1][j-1] == '9')    
        b++;  
       if(msweep[i+1][j] == '9')    
        b++;  
       if(msweep[i+1][j+1] == '9')    
        b++;  
      
      C = (char)(((int)'0')+b); // to covert int to char;
    
       msweep[r][c] = C;
       user_chart[r][c] = C;
      
      }
        
     return 1;  
        
    }
     
    Last edited by a moderator: Jun 18, 2011
    shabbir likes this.
  2. jose_peeterson

    jose_peeterson New Member

    Joined:
    May 19, 2011
    Messages:
    56
    Likes Received:
    1
    Trophy Points:
    0
    sorry minor changes needed
    first UNcomment the welcome(); function
    second COmment the " printf("%d %d \n",r,c); " line in the function rand_mines();
    here the mine is taken as char '9' and printing the above would reveal the mine positions.
     
  3. jose_peeterson

    jose_peeterson New Member

    Joined:
    May 19, 2011
    Messages:
    56
    Likes Received:
    1
    Trophy Points:
    0
    hey, and you guys can try loops that will put the axis above the minefield so that its easier to insert teh coordinates. like

    1,2,3,4.....,11
    1
    2
    3
    4
    5
    6.
    .
    .
    .

    11 just an improvement :)
     
  4. jose_peeterson

    jose_peeterson New Member

    Joined:
    May 19, 2011
    Messages:
    56
    Likes Received:
    1
    Trophy Points:
    0
    Code:
    // you can replace the code in the function printmatrix(); wit the following
    // to get the axis.
    
    void printmatrix(char msweep[][12],int r,char user_chart[12][12])
    {
        
    int i,j,k;    
     
     printf(" ");
     
    for(k=1;k<12;k++) 
     printf("%d ",k);
      
      printf("\n");
    
    
     for(i=1;i<r;i++)
      {
       printf("%d",i);
    
       for(j=1;j<12;j++) //printing 1 to 11    
        {
         printf("%c ",user_chart[i][j]);//to refer to mines use msweep[i][j]    
        }   
       
       printf("\n");
      }
    
    return;
    }
     
    Last edited by a moderator: Jun 18, 2011
  5. bmorton

    bmorton New Member

    Joined:
    Jul 2, 2011
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    So I am a student from UAT and just wanted to throw in my 2 cents. I put in my ideas but I was still having a problem with the code adding another blank space when the user number is posted. See what you think!

    Code:
    #include<stdio.h>  // interger to pointer without cast PROBLEM....
    #include<stdlib.h> // SOLUTION :  whenever using string the data type  
    // of the array must be char
    
    void welcome();
    void rand_mines(char msweep[12][12]);
    void printmatrix(char msweep[12][12],int r,char user_chart[12][12]);
    int process(char msweep[12][12],int r,int c,char user_chart[12][12]);
    
    int main()
    
    {
        welcome();
        char msweep[12][12] = {{'0'}};      
        int i,r,c;   
        char user_chart[12][12] = {{'0'}};
        rand_mines(msweep);  
        printf("Where is your first guess?\n");
        printf("Enter your location between 1 - 11.\n");
        printf("Enter x variable\n");
        scanf("%d",&r);
        printf("Enter y variable\n");
        scanf("%d",&c);
        printmatrix(msweep,12,user_chart);  
        i = process(msweep,r,c,user_chart);
        while(i == 1)     
        {
        printf("Lucky BRAT, live on for another step\n");      
        printf(" %c Surrounding MINEs\n\n",msweep[r][c]);
        printmatrix(msweep,12,user_chart);
            printf("Enter your location between 1 - 11.\n");
            printf("Enter x variable\n");
            scanf("%d",&r);
            printf("Enter y variable\n");
            scanf("%d",&c);
        i=0; 
        i = process(msweep,r,c,user_chart);    
        }  
        if(i==0)
        printf("Game OVER, ta ta. you stepped on a MINE !!\n");
        return 0;    
    }
    void welcome()
    {
        char op; // opereation
        printf("Welcome to MINESWEEPER in C.....\n");
        printf("Enter i for instructions or any other key to enter game\n");
        scanf("%c",&op);
        if(op == 'i')
        {
        printf("OH DEAR, what a shock you are unfortunatly in the midst of a "); printf("mine field.\n");    
        printf("Enter the coordinates of the x and y plane between 1 to 11\n");   
        printf("Are you destined to DIE or live ?\n");
        printf("HA ha ha hah, GOOD LUCK\n\n");
        }
        else
        return;    
    }
    void rand_mines(char msweep[12][12])
    {
        int r,c,m;
        for(m=0;m<20;m++) // plant 20 rand mines(m
        {
        r = rand() % 13; // this is mine planting     
        c = rand() % 13; // so 0 to 13 is APPROPRIATE.
        msweep[r][c] = '9'; 
        }  
        return;
    }
    void printmatrix(char msweep[][12],int r,char user_chart[12][12])
    {
        int i,j;    
        printf(" ##########\n");
        for(i=1;i<r;i++)
        {
        printf("#");
        for(j=1;j<12;j++)   
        {
            printf("%c ",user_chart[i][j]);
        }
        printf("#");
        printf("\n");   
        }
        printf(" ###########\n\n");
        return;    
    }
    int process(char msweep[12][12],int r,int c,char user_chart[12][12])
    {
        int i=r,j=c,b=0,k;    
        char C;
        if(msweep[r][c] == '9')   
        {  k=0;
        return k;
        }
        else
        {
        if(msweep[i-1][j-1] == '9')    
            b++;  
        if(msweep[i-1][j] == '9')    
            b++;  
        if(msweep[i-1][j+1] == '9')    
            b++;  
        if(msweep[i][j-1] == '9')    
            b++;  
        if(msweep[i][j+1] == '9')    
            b++;  
        if(msweep[i+1][j-1] == '9')    
            b++;  
        if(msweep[i+1][j] == '9')    
            b++;  
        if(msweep[i+1][j+1] == '9')    
            b++;  
        C = (char)(((int)'0')+b);
        msweep[r][c] = C;
        user_chart[r][c] = C;
        }
        return 1;  
    }
    
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice