写一个扫雷代码
第一步先将菜单以及选项给呈现出来使用do....while来实现选项因为只需要执行此选项即可因此设置返回值为void#includestdio.h static void menu() { printf(****************\n); printf(***1.开始游戏***\n); printf(***0.退出游戏***\n); printf(****************\n); } int main() { int input 0; srand((unsigned int)time(NULL)); do { menu(); printf(请选择); int i scanf(%d, input); switch (input) { case 1: game(); //这个game函数实现整个游戏的运作 case 0: printf(退出游戏\n); break; default: printf(输入错误请重新输入\n); break; } } while (input); return 0; }此时实现game这个函数因为只需要它执行不需要返回类型同理设置为voidstatic void game() { char mine[ROWS][COLS] { 0 }; char show[ROWS][COLS] { 0 }; InitBoard(mine, ROWS, COLS, 0); InitBoard(show, ROWS, COLS, *); SetMine(mine, ROW, COL);//埋雷 //DisplayBoard(mine, ROW, COL); DisplayBoard(show, ROW, COL);//打印棋盘 FindMine(mine, show, ROW, COL); }逐条分析这两条是创键棋盘一个用来安置一个用来查看char mine[ROWS][COLS] { 0 }; char show[ROWS][COLS] { 0 };这两条是用来初始化棋盘InitBoard(mine, ROWS, COLS, 0); InitBoard(show, ROWS, COLS, *);这是InitBoard函数的实现第一条是初始化棋盘在此棋盘内埋雷第二条则是隐藏棋盘来猜雷在哪里void InitBoard(char board[ROWS][COLS], int r, int c, char set)//初始化棋盘 { int i 0; for (i 0; i r; i) { int j 0; for (j 0; j c; j) { board[i][j] set; } } }定义棋盘的大小#define ROW 9 #define COL 9当排雷时会不可避免的越界因此可以再加上一圈棋盘来防止越界#define ROWS ROW2 #define COLS COL2设置雷的个数#define EASY_COUNT 10埋雷SetMine(mine, ROW, COL);//埋雷实现如下void SetMine(char mine[ROWS][COLS], int r, int c)//埋雷 { int count EASY_COUNT; while (count) { int x rand() % r 1;//将x的值限定在9之内 int y rand() % c 1;//将y的值限定在9之内 if (mine[x][y] 0)//如果值为0就将其设置为“雷” { mine[x][y] 1;//如果值为1“雷”的个数减去一个 count--; } } }srand((unsigned int)time(NULL));这条主要使rand函数生成的为随机值包含的“time”就是一个一直在改变的值从而可实现随机的效果此函数用来排查雷int GetMineCount(char mine[ROWS][COLS], int x, int y)实现如下int GetMineCount(char mine[ROWS][COLS], int x, int y)//判断每个坐标周围雷的个数 { int i 0; int j 0; int c 0; for (i -1; i 1; i) { for (j -1; j 1; j) { if (mine[x i][y j] 1) c; } } return c; }以下为找雷的代码void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int r, int c)//找雷 { int x 0; int y 0; int win 0; while (winr*c-EASY_COUNT) { int f scanf(%d %d, x, y); if (x 1 x r y 1 y c) { if (mine[x][y] 1) { printf(很遗憾游戏结束\n); DisplayBoard(mine, r, c); break; } else { if (show[x][y] *) { int c GetMineCount(mine, x, y); show[x][y] c 0; DisplayBoard(show, ROW, COL); win; } else { printf(该坐标已经被排查过请重新输入坐标\n); } } } else { printf(输入的坐标非法请重新输入\n); } } if (winr*c-EASY_COUNT) { printf(排雷成功\n); DisplayBoard(mine, ROW, COL); } }完整代码实现如下game.h#includestdio.h #includestdlib.h #includetime.h #define ROW 9 #define COL 9 #define ROWS ROW2 #define COLS COL2 #define EASY_COUNT 10 void InitBoard(char board[ROWS][COLS], int r, int c, char set); void DisplayBoard(char board[ROWS][COLS], int r, int c); void SetMine(char mine[ROWS][COLS], int r, int c); void FindMine(char mine[ROWS][COLSgame.c//函数定义 #define _CRT_SECURE_NO_WARNINGS #includegame.h void InitBoard(char board[ROWS][COLS], int r, int c, char set)//初始化棋盘 { int i 0; for (i 0; i r; i) { int j 0; for (j 0; j c; j) { board[i][j] set; } } } void DisplayBoard(char board[ROWS][COLS], int r, int c)//打印棋盘 { int i 0; printf(----扫雷----\n); for (i 0; i c; i) { printf(%d , i); } printf(\n); for (i 1; i r; i) { int j 0; printf(%d , i); for (j 1; j c; j) { printf(%c , board[i][j]); } printf(\n); } } void SetMine(char mine[ROWS][COLS], int r, int c)//埋雷 { int count EASY_COUNT; while (count) { int x rand() % r 1; int y rand() % c 1; if (mine[x][y] 0) { mine[x][y] 1; count--; } } } static int GetMineCount(char mine[ROWS][COLS], int x, int y)//判断每个坐标周围雷的个数 { int i 0; int j 0; int c 0; for (i -1; i 1; i) { for (j -1; j 1; j) { if (mine[x i][y j] 1) c; } } return c; } void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int r, int c)//找雷 { int x 0; int y 0; int win 0; while (winr*c-EASY_COUNT) { int f scanf(%d %d, x, y); if (x 1 x r y 1 y c) { if (mine[x][y] 1) { printf(很遗憾游戏结束\n); DisplayBoard(mine, r, c); break; } else { if (show[x][y] *) { int c GetMineCount(mine, x, y); show[x][y] c 0; DisplayBoard(show, ROW, COL); win; } else { printf(该坐标已经被排查过请重新输入坐标\n); } } } else { printf(输入的坐标非法请重新输入\n); } } if (winr*c-EASY_COUNT) { printf(排雷成功\n); DisplayBoard(mine, ROW, COL); } }text.h#define _CRT_SECURE_NO_WARNINGS #includestdio.h #includegame.h static void game() { char mine[ROWS][COLS] { 0 }; char show[ROWS][COLS] { 0 }; InitBoard(mine, ROWS, COLS, 0); InitBoard(show, ROWS, COLS, *); SetMine(mine, ROW, COL);//埋雷 //DisplayBoard(mine, ROW, COL); DisplayBoard(show, ROW, COL);//打印棋盘 FindMine(mine, show, ROW, COL); } static void menu() { printf(****************\n); printf(***1.开始游戏***\n); printf(***0.退出游戏***\n); printf(****************\n); } int main() { int input 0; srand((unsigned int)time(NULL)); do { menu(); printf(请选择); int i scanf(%d, input); switch (input) { case 1: game(); case 0: printf(退出游戏\n); break; default: printf(输入错误请重新输入\n); break; } } while (input); return 0; }