In view of the greedy snake program I wrote last time, some people may not see that it is two files after writing the header file and the source file separately , Write all the code in the same file this time . Here's the code . This program did not go online to find some good-looking material , All the designs are made in Chinese EasyX Graphics library function drawing . If you have better looking material, you can modify it on this program . I left notes where I could put pictures .
==================================================================================================
#include <stdio.h>
 #include <time.h>
 #include <stdlib.h>
 #include <graphics.h>
 #define ROW 9// Number of rows 
 #define COL 9// Number of columns 
 #define NUM 10// Thunder number 
 #define SIZE 50// Picture size 
int count=0;// Define a global variable to record the number of open cells , If this value is equal to ROW*COL-NUM, It means all the mines have been found , Every time 0-8 Hour meter plus 1
int map[ROW][COL];
 //IMAGE img[12];// Save pictures , No suitable material has been found. This method is not used for the time being . use EasyX Draw mines and numbers .
// Initialize game 
 void init_game()
 {
     int i=0;// For circulation 
     int j=0;// For circulation 
     int n=0,m=0;// Used to traverse a nine palace lattice 
     int r=0;// that 's ok 
     int c=0;// column 
     
    // Initialize map 
     for(i=0;i<ROW;i++)
     {
         for(j=0;j<COL;j++)
         {
             map[i][j]=0;
         }
     }
    // Mine burying 
     for(i=0;i<NUM;)
     {
         // To avoid repetition , Please check if there is any thunder in this position 
         r=rand()%ROW;
         c=rand()%COL;
         if(map[r][c]==0)
         {
             map[r][c]=-1;
             i++;
         }
     }
     // Determine the values of other elements , Traverse all not for -1 Value of 
     for(i=0;i<ROW;i++)
     {
         for(j=0;j<COL;j++)
         {
             if(map[i][j]!=-1)// Not for -1 Value of , Ergodic nine palace lattice 
             {
                 for(n=(i-1<0?0:i-1);n<=(i+1>ROW-1?ROW-1:i+1);n++)
                 {
                     for(m=(j-1<0?0:j-1);m<=(j+1>COL-1?COL-1:j+1);m++)
                     {
                         if(map[n][m]==-1)
                         {
                             map[i][j]++;
                         }
                     }
                 }
             }
         }
     }
    // Encrypt so that you don't find out at the beginning of the game that those are numbers and mines , Decrypt when mouse clicks 
     for(i=0;i<ROW;i++)
     {
         for(j=0;j<COL;j++)
         {
             map[i][j]+=20;// Encrypted digital range 19--28
         }
     }
     // Load the material 
     //loadimage(&img[0],L"res/0.jpg",SIZE,SIZE);
     setbkcolor(WHITE);// Set window background color 
     cleardevice();// Refresh Window  
 }
// Draw numbers 
 void draw_num(int r,int c)
 {
     count++;// Dot open lattice counting plus 1
     char a=map[r][c]+48;
     setfillcolor(RGB(0,0,255));
     settextcolor(RGB(255,0,0));
     settextstyle(30,0,L" Chinese Amber ");
     solidrectangle(r*SIZE+1,c*SIZE+1,(r+1)*SIZE-1,(c+1)*SIZE-1);
     outtextxy(r*SIZE+17,c*SIZE+10,a);
 }
// Draw zero 
 void draw_zero(int r,int c)
 {
     count++;
     setfillcolor(RGB(0,0,255));
     settextstyle(30,0,L" Chinese Amber ");
     solidrectangle(r*SIZE+1,c*SIZE+1,(r+1)*SIZE-1,(c+1)*SIZE-1);
 }
 // Mine painting 
 void draw_dilei(int r,int c)
 {
     setfillcolor(RGB(255,0,0));
     solidcircle(r*SIZE+SIZE/2,c*SIZE+SIZE/2,SIZE/3);
     outtextxy((r+1)*SIZE,(c+1)*SIZE,L" Step on the thunder , The game failed !");
}
 // Draw a triangle 
 void draw_three(int r,int c)
 {
     setfillcolor(RGB(255,0,0));
     POINT pts[] = { {r*SIZE+SIZE/2, c*SIZE+SIZE/4}, {r*SIZE+SIZE/4, 
c*SIZE+SIZE/4*3}, {r*SIZE+SIZE/4*3, c*SIZE+SIZE/4*3} };
     solidpolygon(pts, 3);
 }
 // Delete triangle 
 void delete_three(int r,int c)
 {
     POINT pts[] = { {r*SIZE+SIZE/2, c*SIZE+SIZE/4}, {r*SIZE+SIZE/4, 
c*SIZE+SIZE/4*3}, {r*SIZE+SIZE/4*3, c*SIZE+SIZE/4*3} };
     setfillcolor(RGB(0,255,0));
     solidpolygon(pts, 3);
     setfillcolor(RGB(255,0,0));
 }
// Draw a map 
 void draw_map()
 {
     int i=0;// For circulation 
     int j=0;// For circulation 
     
     for(i=0;i<ROW;i++)
     {
         for(j=0;j<COL;j++)
         {    
             if(map[i][j]>=19 && map[i][j]<=28)// Encrypted numbers 
             {
                 setfillcolor(RGB(0,255,0));
                 solidrectangle(i*SIZE+1,j*SIZE+1,(i+1)*SIZE-1,(j+1)*SIZE-1);
             }
         }        
     }
 }
// Turn on the numbers 0 Grid around , because 0 There may be numbers around 0, So we use recursive functions 
 void open_zero(int i,int j)
 {
     int n=0,m=0;// Used to traverse a nine palace lattice 
    map[i][j]-=20;
     draw_zero(i,j);
    for(n=(i-1<0?0:i-1);n<=(i+1>ROW-1?ROW-1:i+1);n++)
     {
         for(m=(j-1<0?0:j-1);m<=(j+1>COL-1?COL-1:j+1);m++)
         {
             if(map[n][m]>=21 && map[n][m]<=28)// Encrypted numbers 1-8
             {
                 map[n][m]-=20;
                 draw_num(n,m);
             }
             else if(map[n][m]==20)
             {
                 open_zero(n,m);
             }
        }
     }
}
 // play a game 
 int play_game()
 {
     MOUSEMSG msg={0};
     msg=GetMouseMsg();// Get mouse message 
     switch(msg.uMsg)
     {
     case WM_LBUTTONDOWN:// Left key 
         {
             int r,c;// Selected subscript 
             r=msg.x/SIZE;
             c=msg.y/SIZE;
             if(map[r][c]>=21 && map[r][c]<=28)// number 1-8 Corresponding password 
             {
                 map[r][c]-=20;// decrypt 
                 draw_num(r,c);
                 return 0;
             }
             else if(map[r][c]==20)// number 0 Corresponding password 
             {
                
 open_zero(r,c);// number 0 It's special , Because if the number is 0 It means that there is no ray in all the little squares around Taitai , You can use the function to 0 All nearby grids are open 
                 return 0;
             }
             else if(map[r][c]==19)// Mine code 
             {
                 draw_dilei(r,c);
                 return -1;
             }
         }
     case WM_RBUTTONDOWN:// Right click 
         {
             int r,c;// Selected subscript 
             r=msg.x/SIZE;
             c=msg.y/SIZE;
             if(map[r][c]>=19 && map[r][c]<=28)
             {
                 map[r][c]+=20;// Secondary encryption 
                 draw_three(r,c);
             }
             else if(map[r][c]>=39 && map[r][c]<=48)
             {
                 map[r][c]-=20;// Solving quadratic encryption 
                 delete_three(r,c);
             }
        }
     default:return 0;
     }
     return 0;
 }
int main()
 {
     srand((unsigned int)time(NULL));// Random number seed 
    initgraph(ROW*SIZE,COL*SIZE);// Initialize a window 
    init_game();// Initialize game 
     draw_map();// Draw a map 
    while(1)// Cycle play 
     {
         if(play_game()==-1)// If you step on thunder, it's over 
             break;
         if(count==ROW*COL-NUM)// All mines cleared. It's over 
         {
             outtextxy(0,0,L" Congratulations on clearing all mines !");
             break;
         }
     }
    system("pause");// Program pause 
     return 0;
 }
==================================================================================
 If you don't understand, please leave a message below the comment .
Technology