首先,我们创建了一个头文件和两个源文件,这样更好地观看和分析代码,当然在写代码的过程中也更加条理清晰。
头文件game.h
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 9
#define COL 9
#define ROWS ROW + 2
#define COLS COL + 2
#define EASY 10
void chushihua(char mineboard[ROWS][COLS], int row,int col,int ret);//棋盘的初始化
void dayin(char mineboard[ROWS][COLS], int row, int col);//打印棋盘
void buzhi(char arr[ROWS][COLS], int row, int col);//布置地雷
void paicha(char arr[ROWS][COLS], char arr1[ROWS][COLS], int row, int col);//排查地雷
源文件text.c
这部分的内容主要是包含main函数和功能的轮廓
main函数
主函数只需要引用函数,并不需要进行函数的实现,把实现放在了text函数中
int main()
{
test();
return 0;
}
text函数
首先需要运用do…while语句,先打印菜单让玩家进行“开始游戏”或“结束游戏”的选择,判断条件为真假(0或1)的区分;其次,运用switch语句对玩家不同选择做出反应,即:1 输出开始游戏,0 输出结束游戏,为其他数字输出输入错误,请重新输入。
void test()
{
int input;
do
{
menu();
printf("请输入>");
scanf("%d", &input);
switch (input)
{
case 1:
printf("开始游戏\n"); break;
case 0:
printf("游戏结束\n"); break;
default:
printf("输入错误,请重新输入\n"); break;
}
} while (input);
}
运行截图如下:
game函数
我们只需要将输出开始游戏改为game(),将进入到game函数中。game函数中包含数组的定义和数组的初始化、布置地雷、打印棋盘、排查地雷的引用。
我们把99的格子看做是二维数组,我们将‘“0”看做是没有雷的地方、“1”是有雷的地方。如果排查的地方没有雷,则需要计算这个雷周围有多少雷,如果计算结果为“0”或者“1”,则与原来棋盘用来代表有没有雷的字符产生歧义。所以我们采用两个棋盘,一个用来记录雷,一个用来展示给玩家。
其中令人注意的是,在排查边缘雷的时候,如果我们数组的大小为99,排查时将会越界,所以我们所设定数组的大小为10*10。
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
| 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
void game()
{
//创建数组
char mineboard[ROWS][COLS] = {
0};
char showboard[ROWS][COLS] = {
0};
//初始化
chushihua(mineboard, ROWS, COLS, '0');
chushihua(showboard, ROWS, COLS, '*');
//布置雷
buzhi