贝蒂快扫雷~(C语言)
温馨提示:这篇文章已超过391天没有更新,请注意相关的内容是否还可用!
✨✨ 欢迎大家来到贝蒂大讲堂✨✨
🎈🎈养成好习惯,先赞后看哦~🎈🎈
所属专栏:C语言学习
贝蒂的主页:Betty‘s blog
引言:
扫雷相信大家小时候到玩过吧,那我们通过目前已学的知识,自己实现一个扫雷小游戏呢,答案自然是肯定的。
本章你可能会用到的知识:
1. 数组的使用:小小数组,给贝蒂坐下
2. 随机数的生成:贝蒂的捣蛋小游戏
1. 游戏要求
1. 玩家可以通过菜单选择玩游戏和退出游戏。
2. 默认棋盘为9×9的格子。
3. 默认雷的个数为10。
4可以排查雷
(1) 如果位置不是雷,就显⽰周围有⼏个雷,并且循环展开。
(2)如果位置是雷,就炸死游戏结束
(3)把除10个雷之外的所有⾮雷都找出来,排雷成功,游戏结束
(4)玩家可以对认为是雷的位置进行可能是雷或肯定是雷的标记。
2. 游戏分析
1. 我们要在9×9的棋盘上操作,自然使用数组模拟,并且我们先假设0代表无雷,1代表雷
2. 玩家选择一个格子排查,如果没雷,将显示周围八个格子雷的个数。
-
为了解决可能得数组越界问题,所以尝试在外围增加“一圈”。
-
但是我们不可能把这个棋盘布置的信息给玩家看,所以要创建两个数组,一个数组(mine)负责布置雷的信息,一个数组(show)负责展现给玩家看。
-
如果玩家排查的位置没有雷,我们将显示周围雷的个数,为了不与布置雷的信息冲突,所以将无雷改为‘0’,有雷改为‘1’。
-
玩家棋盘初始全为‘*’,代表未排查。
3. 多文件操作
为了方便代码的管理和保证游戏实现逻辑的清晰性,我们将采用多文件管理的模式。
(1)创建头文件game.h,包含所有头文件(其他源文件只需引用它即可),以及所有游戏功能的展现。
(2)创建源文件game.c,负责所有功能的具体代码实现。
(3)创建源文件main.c,负责展现游戏实现的总体逻辑。
4. 简易菜单的实现
4.1功能
1.玩家可以通过选择1进入游戏,0退出游戏。
2.选错的话提醒玩家,重新选择。
4.2代码实现
为了完成这些目标,我们可以简单的do-while,switch结构实现。
代码如下:
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: system("cls");//清空屏幕,头文件 game(); break; case 0: printf("退出游戏\n"); break; default: printf("选择错误,重新选择\n"); break; } } while (input);//选0结束游戏 return 0; }5. 游戏功能实现
5.1 预定义信息
#define ROW 9//棋盘的行 #define COL 9//棋盘的列 #define ROWS ROW+2//扩展后的行 #define COLS COL+2//扩展后的列 #define MINES 10//雷的个数 #include #include #include
5.2 初始化棋盘
(1)要求
1. mine棋盘初始化为全‘0’。
2. show棋盘初始化为全‘1’。
(2)实现
void InitBoard(char board[ROWS][COLS], int rows ,int cols, char set) { int i = 0; for (i = 0; i贝蒂说:“因为在game.c中实现游戏的具体功能,所以千万不要忘了在game.h中声明哦~”
5.3 打印棋盘
(1)要求
1. 打印出棋盘中的元素。
2. 利用---,|模拟出棋盘框。
3. 显示出每行,每列的序号。
(2)实现
void DisplayBoard(char board[ROWS][COLS], int row, int col) { printf("-----------------扫雷游戏----------------\n"); for (int i = 0; i = 1 && x = 1 && y -





