扫雷游戏实现来了

扫雷游戏实现来了 扫雷游戏的设计和分析使用软件visual studio20221、实现在控制台实现扫雷游戏2、游戏开始界面可以用简易菜单制作实现玩游戏和退出游戏3、扫雷的棋盘格是9×9的格子4、布置十个雷5、排查雷1、如果排查的坐标是雷显示你被炸死了2、如果排查的作坐标不是雷显示周围雷的个数3、当雷全部排查完毕显示恭喜你排雷成功游戏界面设计思路当我们存放雷的信息和排查雷的信息定义成一个数组的话很容易起冲突所以这里定义两个数组来存放信息这样就不会冲突了。把雷的个数存放在9×9的棋盘格里。一个用来存放雷的信息一个用来统计排查雷的信息。这里我用字符0表示不是雷用字符1表示雷。因为在使用数字的话会造成冲突例如用1来表示雷那么在统计雷周围的个数时就会发成冲突。所以这里用字符1来代替雷。如下图为了防止数组溢出造成越界访问在实际棋盘的时候设置成11×11扩发一圈如下图这样就不会出现上述问题。在排查到不是雷的时候统计周围的8个坐标相加计算出周围有多少个雷。游戏开始界面游戏实现代码中小编也添加了很多注释哦~#define _CRT_SECURE_NO_WARNINGS 1 #define count_t 10 #define ROW 9 #define COL 9 #define ROWS ROW2 #define COLS COL2 //库函数头文件调用 #include stdio.h #include stdlib.h #include time.h //初始化棋盘 void Initborad(char arr[ROWS][COLS], int row, int col, char set); //打印棋盘 void printboard(char arr[ROWS][COLS], int row, int col); //布置雷在mine数组里面 void placemine(char arr[ROWS][COLS], int row, int col); //排查雷 void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col); void Initborad(char arr[ROWS][COLS], int row, int col, char set) { int i 0; //输出行 for (i 0; i row; i) { int j 0; //输出列 for (j 0; j col; j) { arr[i][j] set; } } } void printboard(char arr[ROWS][COLS], int row, int col) { int i 0; printf(************扫雷***********\n); //输出行 //在9×9的棋盘格上显示行的坐标 for (i 0; i row; i) { printf(%d , i); } printf(\n); for (i 1; i row; i) { printf(%d , i);//显示9×9棋盘格的列的坐标 int j 0; //输出列 for (j 1; j col; j) { printf(%c , arr[i][j]); } printf(\n); } printf(************扫雷***********\n); } void placemine(char arr[ROWS][COLS], int row, int col) { int count count_t; while (count) { //定义整型变量x为行y为列 //布置雷的坐标必须在1到9行1到9列 int x rand() % row 1; int y rand() % col 1; //判断要布置雷的坐标是不是没有布置过字符0为不是雷字符1表示是雷当坐标不是雷的时候才可以布置雷 if (arr[x][y] 0) { arr[x][y] 1; count--; } } } static int countmine(char mine[ROWS][COLS], int x, int y) { //计算输入x和y坐标周围坐标的雷的个数以xy坐标表示中心点周围8个坐标 return (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); } void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) { int x 0; int y 0; //用来判断什么时候循环结束 int win 0; //判断win小于row乘col的值减去雷的个数也就是说当win小于81-雷的个数时证明还没排查完 while (win row * col -count_t) { printf(请输入要排查雷的坐标); scanf(%d %d, x, y); //判断x和y的坐标是否合法合规在游戏给的坐标范围内 if (x 1 x row y 1 y col) { //如果输入的坐标内是雷则被炸死游戏结束 if (mine[x][y] 1) { printf(很遗憾你被炸死了\n); //把雷的个数放在show中显示 printboard(mine, ROW, COL); break; } //如果输入的坐标不是雷统计周围雷的个数 else { //统计周围雷的个数 int count countmine(mine, x, y); //ASCLL码表中数字0加上字符0得到的是字符0 show[x][y] count 0; //把周围的mine数组的雷显示在show数组里面 printboard(show, ROW, COL); win; } } else { printf(坐标非法请重新输入\n); } } //判断win等于row乘col的值减去雷的个数也就是说当win等于81-雷的个数时证明拍雷成功结束 if (win row * col - count_t) { printf(恭喜你排雷成功\n); printboard(mine, ROW, COL); } } void play_mine() { //定义两个字符类型的二维数组一个用来存放雷的信息一个用来统计排查雷的信息 char mine[ROWS][COLS]; char show[ROWS][COLS]; //初始化棋盘 //mine数组里存放字符0 //show数组里存放字符* Initborad(mine, ROWS, COLS, 0); Initborad(show, ROWS, COLS, *); //打印棋盘 printboard(show, ROW, COL); //布置雷在mine数组里面 placemine(mine, ROW, COL); //printboard(mine, ROW, COL); //排查雷 findmine(mine, show, ROW, COL); } //打印简易游戏菜单 void play() { printf(********** 扫雷 *********\n); printf(******************************\n); printf(********** 1.play *********\n); printf(********** 0.exit *********\n); printf(******************************\n); } int main() { int input 0; //生成随机数 srand((unsigned int)time(NULL)); do { play(); printf(请选择开始游戏的按键); scanf(%d, input); switch (input) { case 1: play_mine(); break; case 0: printf(退出游戏\n); break; default: printf(输入错误请重新输入\n); } } while (input); return 0; }