黄冈免费网站推广平台汇总,天坛网站建设,鞍山网站制作价格,推广员网站怎么做目录 一、前言#xff1a;
二、游戏规则#xff1a;
三、游戏前准备
四、游戏实现
1、打印菜单
2、初始化棋盘
3、打印棋盘
4、布置雷
5、排雷
五、完整代码 一、前言#xff1a;
用C语言完成扫雷游戏对于初学者来说#xff0c;难度并不是很大#xff0c;而且通…目录 一、前言
二、游戏规则
三、游戏前准备
四、游戏实现
1、打印菜单
2、初始化棋盘
3、打印棋盘
4、布置雷
5、排雷
五、完整代码 一、前言
用C语言完成扫雷游戏对于初学者来说难度并不是很大而且通过编程这个小游戏会让你对函数调用分支循环连续输入等有很好的掌握该过程并不涉及指针及以后的内容。
二、游戏规则
扫雷游戏规则十分简单比如9*9网格中就是在81个网格中找到其中的10颗雷并不被雷炸死。 三、游戏前准备 我们为了让代码更加简洁将代码分成三个文件中编写如图所示在test.c文件中放主函数
在game.h中放所需的头文件在gam.c中放调用的函数。
四、游戏实现
为了方便下面的讲解我先把主函数和头文件放出来
#includestdio.h
#includetime.h
#define ROW 9
#define COL 9
#define ROWS ROW2
#define COLS COL2
#define mine_count 10
void Initboard(char board[ROWS][COLS], int rows,int cols,char set);
void Printboard(char board[ROWS][COLS], int row, int col);
void Setmine(char board[ROWS][COLS],int row,int col);
void Finemine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col); game.h文件中放入头文件并定义全文所需的宏变量这样方便改动比如本篇讲述的是9*9网格的你只需将定义的9改成其他数据就可以得到一个10*10或其他的网格 #includegame.h
void game()
{char mine[ROWS][COLS];char show[ROWS][COLS];//第一步初始化棋盘Initboard(mine, ROWS, COLS,0);Initboard(show, ROWS, COLS,*);//第二步打印棋盘Printboard(show, ROW, COL);//第三步布置雷Setmine(mine, ROW, COL);//Printboard(mine, ROW, COL);//第四步排雷Finemine(mine, show, ROW, COL);
}
void menu()
{printf(****************\n);printf(**** 1 play ****\n);printf(**** 0 exit ****\n);printf(****************\n);
}
int main()
{int count 0;srand((unsigned int)time(NULL));do{menu();printf(请输入你的选择);scanf(%d, count);switch (count){case 1:game();break;case 0:printf(你已选择退出游戏\n);break;default:printf(这是一个不规范的选择请重新选择\n);break;}} while (count);return 0;
}
通过主函数你应该能看出来我们实现这个游戏的逻辑是先打印出菜单告诉你不同的选择然后通过你的选择来判断是否进入游戏所以游戏大体分成以下几步
1、打印菜单
2、初始化棋盘
3、随机布置十颗雷
5、打印棋盘
4、排雷
下面我们逐步实现这几点
1、打印菜单
void menu()
{printf(****************\n);printf(**** 1 play ****\n);printf(**** 0 exit ****\n);printf(****************\n);
}
运行后可以打印出菜单 2、初始化棋盘
在game()函数中我们定义了两个字符数组
char mine[ROWS][COLS];
char show[ROWS][COLS];
//第一步初始化棋盘
Initboard(mine, ROWS, COLS,0);
Initboard(show, ROWS, COLS,*);
其中第一个数组是雷盘布置雷在上面第二个数组是展示的告诉玩家游戏进行情况我们用0表示无雷可以先把雷盘全部初始化为‘0’展示盘全部初始化为‘*’
具体函数如下
void Initboard(char board[ROWS][COLS], int rows, int cols,char set)
{for (int i 0; i rows; i){for (int j 0; j cols; j){board[i][j] set;}}
}
3、打印棋盘
在主函数中我们就提到了初始化后打印棋盘其实打印棋盘和布置雷两步可以互换先后顺序但是这里打印棋盘还可以用来检测上面初始化是否成功
//第二步打印棋盘Printboard(show, ROW, COL);
代码如下
void Printboard(char board[ROWS][COLS], int row, int col)
{int i 0;int j 0;for (i 0; i row; i)printf(%d , i);printf(\n);for (i 1; i col; i){printf(%d , i);for (j 1; j row; j){printf(%c , board[i][j]);}printf(\n);}
}
运行后结果如下 4、布置雷
//第三步布置雷Setmine(mine, ROW, COL);//Printboard(mine, ROW, COL);//这步可以用来检测雷是否布置成功如果怕出错可以用上
初始化棋盘之后就要在雷盘中随即找十个位置放雷也就是说要放进去十颗雷
void Setmine(char board[ROWS][COLS], int row, int show)
{int num mine_count;while (num){int i rand() % 9 1;int j rand() % 9 1;if (board[i][j] 0){board[i][j] 1;num--;}}
}
用‘1’表示雷就是将mine数组中随即找十个位置将‘0’换成‘1’表示在这里埋雷
5、排雷
排雷过程中只有两种结果一种是正好是雷那么就会炸死另一种则是不是雷如果不是雷我们应该把它周围有几个雷判断出来不然几乎不可能通关 代码如下
int lei_count(char mine[ROWS][COLS], int a, int b)
{int count mine[a - 1][b - 1] mine[a - 1][b] mine[a - 1][b 1] mine[a][b - 1] mine[a][b 1] mine[a 1][b - 1] mine[a 1][b] mine[a 1][b 1] - 8 * 0;return count;
}
void Finemine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int a, b;int wulei row * col - mine_count;while (wulei){printf(请输入你要检查的坐标);scanf(%d %d, a, b);if (a 0 a row b 0 b col){if (mine[a][b] 1){printf(抱歉这是雷你被炸死了\n);break;}else{//既然不是雷那就统计雷的数量int count lei_count(mine, a, b);show[a][b] count 0;Printboard(show, ROW, COL);wulei--;}}elseprintf(此坐标不存在请重新输入\n);}
}
五、完整代码
game.h
#includestdio.h
#includetime.h
#define ROW 9
#define COL 9
#define ROWS ROW2
#define COLS COL2
#define mine_count 10
void Initboard(char board[ROWS][COLS], int rows,int cols,char set);
void Printboard(char board[ROWS][COLS], int row, int col);
void Setmine(char board[ROWS][COLS],int row,int col);
void Finemine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);test.c
#includegame.h
void game()
{char mine[ROWS][COLS];char show[ROWS][COLS];//第一步初始化棋盘Initboard(mine, ROWS, COLS,0);Initboard(show, ROWS, COLS,*);//第二步打印棋盘Printboard(show, ROW, COL);//第三步布置雷Setmine(mine, ROW, COL);//Printboard(mine, ROW, COL);//第四步排雷Finemine(mine, show, ROW, COL);
}
void menu()
{printf(****************\n);printf(**** 1 play ****\n);printf(**** 0 exit ****\n);printf(****************\n);
}
int main()
{int count 0;srand((unsigned int)time(NULL));do{menu();printf(请输入你的选择);scanf(%d, count);switch (count){case 1:game();break;case 0:printf(你已选择退出游戏\n);break;default:printf(这是一个不规范的选择请重新选择\n);break;}} while (count);return 0;
}
game.c
#includegame.h
void Initboard(char board[ROWS][COLS], int rows, int cols,char set)
{for (int i 0; i rows; i){for (int j 0; j cols; j){board[i][j] set;}}
}
void Printboard(char board[ROWS][COLS], int row, int col)
{int i 0;int j 0;for (i 0; i row; i)printf(%d , i);printf(\n);for (i 1; i col; i){printf(%d , i);for (j 1; j row; j){printf(%c , board[i][j]);}printf(\n);}
}
void Setmine(char board[ROWS][COLS], int row, int show)
{int num mine_count;while (num){int i rand() % 9 1;int j rand() % 9 1;if (board[i][j] 0){board[i][j] 1;num--;}}
}
int lei_count(char mine[ROWS][COLS], int a, int b)
{int count mine[a - 1][b - 1] mine[a - 1][b] mine[a - 1][b 1] mine[a][b - 1] mine[a][b 1] mine[a 1][b - 1] mine[a 1][b] mine[a 1][b 1] - 8 * 0;return count;
}
void Finemine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int a, b;int wulei row * col - mine_count;while (wulei){printf(请输入你要检查的坐标);scanf(%d %d, a, b);if (a 0 a row b 0 b col){if (mine[a][b] 1){printf(抱歉这是雷你被炸死了\n);break;}else{//既然不是雷那就统计雷的数量int count lei_count(mine, a, b);show[a][b] count 0;Printboard(show, ROW, COL);wulei--;}}elseprintf(此坐标不存在请重新输入\n);}
}
用C语言解决扫雷游戏还是非常有意思的上面这种还是最简单的还有许多有趣的东西值得探索比如如何搞一个20*20的棋盘或如何用递归的方法实现快速展开如果想了解更多点击关注去学习更多C语言的知识。