今天我主要讲的是关于扫雷小游戏的内容,我将代码分为三个文件来写game.h放头文件和函数声明,game.c放函数的定义,test.c放主函数。想要写出扫雷小游戏需要学会二维数组数组的内容。想要全部的代码可以点gitee---扫雷小程序获取。
1.菜单函数
void menu() { printf("********************\n"); printf("**** 1.play ****\n"); printf("**** 0.exit ****\n"); printf("********************\n"); }
这就是简单的打印,这里不做具体解释。
2.初始化数组
void inboard(char arr[ROWS][COLS], int row, int col, char sets) { int i, j; for (i = 0; i <= row; i++) { for (j = 0; j <= col; j++) arr[i][j] = sets; } }
由于扫雷需要用到两个二维数组,一个是为了让用户看到的,一个是为了埋雷的,我们想让用户看到的是*,由于两个数组初始化的过程相似,故我们想到可以使用同一个函数,但是埋雷我们用到的会是1 ,0两个数字,而*却是字符类型,故我们可以用字符类型的‘1’,‘0’代替,由于这是两个数组,初始化的内容不同,但都是字符类型,所以我们可以传入参数sets来代替。
3.打印棋盘
void pboard(char arr[ROWS][COLS], int row, int col) { int i, j; 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 ", arr[i][j]); } printf("\n"); } }
这个函数主要用于打印用户看到的棋盘也就是打印******,我们先在第一行打印0 ,1,2,3,4...... 展示行数,最左边打印1,2,3,4.....展示列数,这也方便用户使用时给点坐标,此函数还可以帮助我们确定代码设计的是否争取,只需要改变一下传入的数组内容们就可以看到。
4.埋雷
void flagboard(char arr[ROWS][COLS], int rol, int col) { int x, y; int count = 0; do { x = rand() % 9 +1; y = rand() % 9 + 1; if (arr[x][y] == '0') { count++; arr[x][y] = '1'; } } while (count < flag); }
这里需要用到我们的随机数rand()的头文件时time.h,而随机数还需要我们在主函数中设立一个种子srand((unsigned int )time(NULL)),这个种子的头文件stdlinb.h,在埋雷的时候我们需要注意需要埋在没有雷的地方,因此需要我们进行一个判断,只有成功埋上雷才进行计数,直到埋够雷。
5.扫雷
void findboard(char arr[ROWS][COLS], char brr[ROWS][COLS], int row, int col) { int x, y; int counts = ROW*COL-flag; do { printf("请输入你选择的坐标:"); scanf("%d%d", &x, &y); if ((x >= 1 && x <= 9) && (y >= 1 && y <= 9)) { if (arr[x][y] != '1'&&brr[x][y]=='*') { brr[x][y] = arr[x - 1][y] + arr[x - 1][y - 1] + arr[x - 1][y + 1] + arr[x][y - 1] + arr[x][y + 1] + arr[x + 1][y - 1] + arr[x + 1][y] + arr[x + 1][y + 1] - 7* '0'; pboard(brr, ROW, COL); counts--; } else { printf("这是雷,游戏结束\n"); break; } } else { printf("输入格式错误,请重新输入\n"); } } while (counts); if(counts==0) printf("恭喜你,扫雷完成\n"); }
扫雷时候需要用户自己输入坐标,当不是雷的时候会在全是*的数组上进行返回值返回附近有几颗雷,其中包含游戏结束,输入格式的正确性。
到这里我们的扫雷小游戏就已经结束了,向往各位可以学到一些东西,最后希望大家可以一键三连。