前言:
今天我们讲的扫雷游戏,在此过程中,我们会经常提两个字,纵横
接下来,正片开始
在开始讲解扫雷游戏之前,我们先来思考一个问题:我们之前的代码是不是都是写在一个源文件里面?那么这次我将换个方式讲解一下扫雷游戏,此后我也会尝试一下以多文件的方式写猜数字游戏。
首先还是之前我们在猜数字游戏里使用过的程序
void menu()
{
printf("******************************\n");
printf("********* 1.开始游戏 *********\n");
printf("********* 0.退出游戏 *********\n");
printf("******************************\n");
}
void game()
{
char mine[ROWS][COLS] = { 0 };//(初始化)答案盘的纵横
char show[ROWS][COLS] = { '*'};//(初始化)题目盘的纵横
补充:1.上面两个数组中中括号内的参数需要在game.h这个头文件中用#define去定义纵横数量
2.在主函数所在的文件中写上#include“game.h”,否则,程序依然会报错喔
什么?你不知道为什么这个头文件要用引号而不是<>?,没事,那我开个小灶,给你讲一下吧。
首先我们要知道stdio.h并不是我们自己创造的,换句话说,它是前辈们总结出来的一个头文件,我们只是站在前辈们的肩膀上做程序而已,所以以表尊重,我们统一使用<>,而game.h是我们自己临时创造出来的,所以用“”。
Initboard(mine, ROWS, COLS,'0');//初始化答案盘
Initboard(show, ROWS, COLS,'*');//初始化题目盘,棋盘有纵横,初始化时,函数的参数有数组名、行、列以及初始化的符号
SetMine(mine, ROWS, COLS);//在答案页在埋雷
display(mine, ROWS, COLS );//打印答案盘
display(show, ROWS, COLS );//打印题目盘
//SetMine(mine,ROWS,COLS);
FindMine(mine, show, ROWS, COLS);//排雷时,计算机需要将题目盘与答案盘进行对照
}
void test()
{
int input = 0;
srand((unsigned int)time(NULL));
do {
menu();
printf("请选择>:\n");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("游戏退出\n");
default:
printf("输入错误,请重新输入\n");
}
} while (input);
}
int main()
{
test();
return 0;
}
这次的代码看上去会与上一次猜数字的有所不同,但实践上是一样的,只是这次的代码进行了多次函数调用
补充:void broad这个函数中少了个形参——char put,用于存放先前的‘0’和‘*'
注意:使用了荧光笔涂色的是需要大家注意的
也许有小伙伴会问,为什么是ROWS ROW+2,其实这样设计可以防止在排查第九行雷出现错误,那么同理列也是一样的道理
那么game.h呢差不多就是写一些头文件,以及传输从test.c的文件中的一些函数,如果不太理解的朋友可以把它理解为中转站
那么接下来,我们就要用鬼谷纵横术来写最后的代码了
小提醒:我们虽然在game.c这个文件中输入了很多头文件,但是这是个全新的文件,因此要将之前的文件名做成头文件的形式放进该文件
注意:set对应的形参也就是上面我补充的put形参
之所以是%2d并且空格,是为了方便对齐
如图
因为当我们输入坐标后,坐标周围一圈需要被展示,所以如图
然后是循环和判断
那么我们来总结一下思路: 首先和上次的猜数字游戏一样的模板不变,那么我们要从本次代码中要学会的内容:
1.
#define ROW 9
#define COL 9
#pragma
#define ROWS ROW+2
#define COLS COL+2
#define EASY_COUNT 10
以上的则是要记住的,可能一时半会不理解,等我们的道行更深的时候就会了解
2.制作游戏是时要学会多文件思想,有助于我们在编写程序的时候思路清晰
3.自己设置的头文件要用“”而不是<>
4.理解扫雷游戏的制作思路:初始化棋盘、打印棋盘、埋雷、排雷以及每一步骤中容易出错的部分。
那么今天已是正月初九了,各位大学生也快开学了,祝大家在新的一年里心想事成