扫雷游戏思路及代码分享
今天和大家分享一下扫雷游戏,这个与上次分享的三子棋游戏差不多。
一、首先建立工程,然后添加三个文件,一个头文件(game.h),两个源文件(game.c和test.c),game.c主要用于一些函数实现,test.c主要是用于大致的框架,game.h用于一些函数声明和一些头文件的包含。
二、游戏实现
(一)先打印出一个菜单出来,就如同下面一样
然后我们根据输入的数字来决定后续的进行,如果你输入1则开始游戏部分,输入0则退出游戏,如果输成其他数字则打印出“选择错误,请重新输入”的一句话。大家如果看了我上次写的三子棋的博客应该就可以知道接下来我们还是要利用switch()语句,以及一个menu()来打印出上面的菜单出来。由此,代码如下:
menu()部分代码
void menu()
{
printf("*********************\n");
printf("******* 1.play ******\n");
printf("******* 0.exit ******\n");
printf("*********************\n");
}
主函数的部分代码:
int main()
{
int input = 0;
//srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,请重新输入!\n");
break;
}
} while (input);
}
(二)接下来就game()内部的实现了
- 创建棋盘数组,这次我们需要创建两个数组,一个数组用来存放布置好雷的信息(mine[ROWS][COLS]),另一个数组用来存放排查出的雷的信息(show[ROWS][COLS])。(在这里插几句话,为了保证数组不越界,在数组范围上我们对它进行了变化,虽然我们只打印9*9的,但是在排雷过程中,要求对该坐标下周围的八个位置的进行排查,所以在创建数组时进行了变化)
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
现在我们需要确定是创建字符数组还是整形数组,为了让打印出下面的棋盘,我们创建字符数组
2.创建完字符数组后,要想打印出这个棋盘,我们还有一些步骤需要进行,先对两个数组进行初始化,对mine数组所有的元素初始化为‘0’,对show数组所有的元素初始化为‘*’,因为我们对这两个数组的初始化的值不同且为了避免不必要的代码重复,我们跟上次三子棋初始化的函数有所不同,将初始化的值作为一个变量set放入函数中,这样就减少了代码重复。先对函数进行声明
代码如下:
//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols,char set);
接下来就是初始化函数代码的实现,代码如下:
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{
int i = 0;
int j = 0;
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
{
board[i][j] = set;
}
}
}
而这两个数组的初始化函数的使用如下:
InitBoard(mine , ROWS , COLS , ‘0’ );
InitBoard(show , ROWS , COLS , ‘*’ );
3.初始化后,我们进行一下打印棋盘看看
依旧是打印函数声明:
//打印棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col);
为了棋盘之间的分隔,随便在上下打印一行分割线
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
int i = 0;
int j = 0;
printf("---------扫雷游戏----------\n");
for (i = 0; i <= col; i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 1; i