一堆头文件
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASYCOUNT 80
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
void game();
void Initboard(char board[ROWS][COLS] ,int row ,int col ,char set);
void Displayboard(char board[ROWS][COLS] ,int row ,int col);
void Setmine(char board[ROWS][COLS] ,int row ,int col);
void Findmine(char mine[ROWS][COLS] ,char show[ROWS][COLS] ,int row ,int col);
void Openmine(char mine[ROWS][COLS] ,char show[ROWS][COLS] ,int row ,int col ,int x,int y,int win);
//游戏主体
#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
//菜单
void menu()
{
printf("****************************************\n");
printf("*****1.start time     0. exit game******\n");
printf("****************************************\n");
}
//游戏主体
void game()
{
//printf("扫雷游戏,开始!\n");
//1.布置好的雷的信息
char mine[ROWS][COLS] = {0};
//2.排查出的雷的信息
char show[ROWS][COLS] = {0};
//3.初始化数组
Initboard(mine ,ROWS ,COLS ,'0');
Initboard(show ,ROWS ,COLS ,'*');
//4.设定雷
Setmine(mine ,ROW ,COL);
//5.打印
Displayboard(mine ,ROW ,COL);
printf("\n");
Displayboard(show ,ROW ,COL);
//6.寻找雷
Findmine(mine , show ,ROW ,COL);
printf("WIN  ! end game\n");
}
void test()
{
int input=0;
srand((unsigned) time(NULL));
do
{
 menu();
 printf("请选择:->");
 scanf("%d" ,&input);
 switch(input)
 {
 case 0:
 	{
   printf("EXIT GAME!  \n");
   break;
 	}
 case 1:
 	{
   printf("START GAME!  \n");
   game();
   break;
 	}
 default:
 	{
   printf("PLEASE INPUT AGAIN CORRECTLY! \n");
   break;
 	}
 }
}while(input);
}
int main()
{
test();
return 0;
}
//游戏算法函数
#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
void Initboard(char board[ROWS][COLS] ,int row ,int col ,char set)
{
int i = 0;
int j = 0;
for(i = 0 ;i < row ;i++)
{
 for(j = 0 ;j < col ;j++)
 {
 	board[i][j] = set;
 }
}
}
void Displayboard(char board[ROWS][COLS] ,int row ,int col)
{
int i = 0;
int j = 0;
for(i = 0 ;i <= row ;i++)
 {
 	printf("%d " ,i);
 }
printf("\n");
for(i = 1 ;i <= row ;i++)
{
 printf("%d " ,i);
 for(j = 1 ;j <= col ;j++)
 {
 	printf("%c " ,board[i][j]);
 }
 printf("\n");
}
}
void Setmine(char board[ROWS][COLS] ,int row ,int col)
{
int count = EASYCOUNT;
int x = 0;
int y = 0;
while(count)
{
 x = rand() % row + 1;
 y = rand() % col + 1;
 if(board[x][y] == '0')
 {
 	board[x][y] = '1';
 	count--;
 }
}
}
int MINE_COUNT(char mine[ROWS][COLS] ,int x ,int y)
{
int count = 0;
count = mine[x-1][y] +
 mine[x-1][y-1] +
 mine[x][y-1] +
 mine[x+1][y-1] +
 mine[x+1][y] +
 mine[x+1][y+1] +
 mine[x][y+1] +
 mine[x-1][y+1] - 8*'0';
return count;
}
void Openmine(char mine[ROWS][COLS] ,char show[ROWS][COLS] ,int row ,int col ,int x,int y,int win)
{
int m = 0;
m = MINE_COUNT(mine ,x ,y );
if(m == 0)
{
 show[x][y] = '0';
 win++;
 if(x-1>=1 && x-1<=row && y-1>=1 && y-1<=col && show[x-1][y-1] == '*')
 {
 	Openmine(mine ,show ,row ,col ,x-1 ,y-1 ,win);
 }
 if(x>=1 && x<=row && y-1>=1 && y-1<=col && show[x][y-1] == '*')
 {
 	Openmine(mine ,show ,row ,col ,x ,y-1 ,win);
 }
 if(x+1>=1 && x+1<=row && y-1>=1 && y-1<=col && show[x+1][y-1] == '*')
 {
 	Openmine(mine ,show ,row ,col ,x+1 ,y-1 ,win);
 }
 if(x+1>=1 && x+1<=row && y>=1 && y<=col && show[x+1][y] == '*')
 {
 	Openmine(mine ,show ,row ,col ,x+1 ,y ,win);
 }
 if(x+1>=1 && x+1<=row && y+1>=1 && y+1<=col && show[x+1][y+1] == '*')
 {
 	Openmine(mine ,show ,row ,col ,x+1 ,y+1 ,win);
 }
 if(x>=1 && x<=row && y+1>=1 && y+1<=col && show[x][y+1] == '*')
 {
 	Openmine(mine ,show ,row ,col ,x ,y+1 ,win);
 }
 if(x-1>=1 && x-1<=row && y+1>=1 && y+1<=col && show[x-1][y+1] == '*')
 {
 	Openmine(mine ,show ,row ,col ,x-1 ,y+1 ,win);
 }
 if(x-1>=1 && x-1<=row && y>=1 && y<=col && show[x-1][y] == '*')
 {
 	Openmine(mine ,show ,row ,col ,x-1 ,y ,win);
 }
}
else
 show[x][y] = MINE_COUNT(mine ,x ,y ) + '0';
}
void Findmine(char mine[ROWS][COLS] ,char show[ROWS][COLS] ,int row ,int col)
{
int x = 0;
int y = 0;
int win = 0;
//printf("请输入排雷坐标-> ");
while(win < ((row * col) - EASYCOUNT))
{
 printf("请输入排雷坐标-> ");
 scanf("%d%d" ,&x ,&y);
 if(x>=1 && x<=row && y>=1 &&y<=col)
 {
 	if(mine[x][y] == '1')
 	{
   printf("炸死你! \n");
   break;
 	}
 	else
 	{
   show[x][y] = MINE_COUNT(mine ,x ,y) + '0';
   Openmine(mine ,show ,row ,col ,x, y, win);
   //break;
   Displayboard(show ,row ,col);
   win++;
 	}
 }
 else
 {
 	printf("坐标非法,请重新输入->");
 }
}
}










