一堆头文件

#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("坐标非法,请重新输入->");

 }

}


}