做旅游网站公司,杭州室内设计工作室,流媒体网站开发,电子商务网站建设和管理的含义扫雷的实现1. 配置运行环境2. 扫雷游戏的初步实现2.1 建立扫雷分布模块2.2 创建名为board的二维数组并进行棋盘初始化2.3 打印棋盘3. 接下来该讨论的事情3.1 布置雷3.2 排查雷3.3 统计坐标周围有几个雷4. 完整扫雷游戏的实现4.1 game.h4.2 game.c4.3 扫雷.c1. 配置运行环境 本游… 扫雷的实现1. 配置运行环境2. 扫雷游戏的初步实现2.1 建立扫雷分布模块2.2 创建名为board的二维数组并进行棋盘初始化2.3 打印棋盘3. 接下来该讨论的事情3.1 布置雷3.2 排查雷3.3 统计坐标周围有几个雷4. 完整扫雷游戏的实现4.1 game.h4.2 game.c4.3 扫雷.c1. 配置运行环境 本游戏用到了三个文件 两个源文件扫雷.c game.c 一个头文件game.h 2. 扫雷游戏的初步实现
2.1 建立扫雷分布模块 想要做好游戏首要任务就是要把模块想好。 先打印一个游戏菜单 void menu()
{printf(********************************\n);printf(********** 1.play ***********\n);printf(********** 0.exit ***********\n);printf(********************************\n);
} 玩家选择是否1\0是否进入游戏 int main()
{int input 0;do{menu();printf(请选择选项:);scanf(%d, input);switch (input){case 1:game();break;case 0:printf(退出扫雷游戏\n);break;default:printf(选择错误请重新开始选择\n);break;}} while (input);return 0;
}游戏思路这次实现的是初级难度的扫雷棋盘9X910个雷 2.2 创建名为board的二维数组并进行棋盘初始化 我们先创建两个二维数组一个数组布置雷方便我们统计雷的数量另一个数组打印出来给用户看棋盘大小为11X11。用户输入一个合法坐标我们判断该坐标是不是雷如果是就游戏结束不是就遍历该坐标周围8个位置通过布置雷的那个棋盘统计雷的数量比如说是3个就在给用户看的数组上面把对应的坐标替换成字符‘3’。
11X11的棋盘是为了方便统计棋盘边缘的雷的数量这样就不会越界访问了用户进行扫雷的棋盘是9X9 初始化棋盘。 #define ROW 9
#define COL 9
#define ROWS ROW2
#define COLS COL2#define EASY_COUNT 10#include stdio.h
#include stdlib.h
#include time.h//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);我们先创建个11X11的char型的二维数组。 set变量代表着两个初始化11*11的棋盘用0和 * 代替 ROW和COL是我们对两个数组操作时需要用到的ROWS和COLS是我们传递数组给函数时告诉函数这是11X11的数组。 #include game.hvoid 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;}}
}2.3 打印棋盘 game.h声明
//打印棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col);game.c打印
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{int i 0;int j 0;printf(******* 扫雷 *******\n);for (j 0; j col; j){printf(%d , j);}printf(\n);for (i 1; i row; i){printf(%d , i);for (j 1; j col; j){printf(%c , board[i][j]);}printf(\n);}
}3. 接下来该讨论的事情
3.1 布置雷
game.h声明
//布置雷
void SetMine(char mine[ROWS][COLS], int row, int col);game.c打印
void SetMine(char mine[ROWS][COLS], int row, int col)
{int count EASY_COUNT;while (count){//rand能产生的随机数范围是0~32767//0~81//1~9//srand((unsigned int)time(NULL))使用randint x rand() % row 1;int y rand() % col 1;if (mine[x][y] 0){mine[x][y] 1;count--;}}
}3.2 排查雷
game.h声明
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);game.c打印
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x 0;int y 0;int win 0;while (winrow*col-EASY_COUNT){printf(请输入要排查的坐标:);scanf(%d %d, x, y);if (x 1 x row y 1 y col){if (show[x][y] *){if (mine[x][y] 1){printf(很遗憾你被炸死\n);DisplayBoard(mine, ROW, COL);break;}else{//如果该坐标不是雷就要统计这个坐标周围有几个雷int count GetMineCount(mine, x, y);show[x][y] count 0;DisplayBoard(show, ROW, COL);win;}}else{printf(该位置已经被排查\n);}}else{printf(排查的坐标非法请重新输入\n);}}if (win row * col - EASY_COUNT){printf(恭喜你排雷成功\n);DisplayBoard(mine, ROW, COL);}
}3.3 统计坐标周围有几个雷
int GetMineCount(char mine[ROWS][COLS], int x, int y)
{return (mine[x - 1][y] mine[x - 1][y - 1] mine[x][y - 1] mine[x 1][y - 1] mine[x 1][y] mine[x 1][y 1] mine[x][y 1] mine[x - 1][y 1] - 8 * 0);
}4. 完整扫雷游戏的实现
4.1 game.h
#define ROW 9
#define COL 9
#define ROWS ROW2
#define COLS COL2#define EASY_COUNT 10#include stdio.h
#include stdlib.h
#include time.h//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);//打印棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col);//布置雷
void SetMine(char mine[ROWS][COLS], int row, int col);//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
4.2 game.c
#include game.hvoid 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;}}
}void DisplayBoard(char board[ROWS][COLS], int row, int col)
{int i 0;int j 0;printf(******* 扫雷 *******\n);for (j 0; j col; j){printf(%d , j);}printf(\n);for (i 1; i row; i){printf(%d , i);for (j 1; j col; j){printf(%c , board[i][j]);}printf(\n);}
}void SetMine(char mine[ROWS][COLS], int row, int col)
{int count EASY_COUNT;while (count){//0~32767//0~81//1~9int x rand() % row 1;int y rand() % col 1;if (mine[x][y] 0){mine[x][y] 1;count--;}}
}int GetMineCount(char mine[ROWS][COLS], int x, int y)
{return (mine[x - 1][y] mine[x - 1][y - 1] mine[x][y - 1] mine[x 1][y - 1] mine[x 1][y] mine[x 1][y 1] mine[x][y 1] mine[x - 1][y 1] - 8 * 0);
}void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x 0;int y 0;int win 0;while (winrow*col-EASY_COUNT){printf(请输入要排查的坐标:);scanf(%d %d, x, y);if (x 1 x row y 1 y col){if (show[x][y] *){if (mine[x][y] 1){printf(很遗憾你被炸死\n);DisplayBoard(mine, ROW, COL);break;}else{//如果该坐标不是雷就要统计这个坐标周围有几个雷int count GetMineCount(mine, x, y);show[x][y] count 0;DisplayBoard(show, ROW, COL);win;}}else{printf(该位置已经被排查\n);}}else{printf(排查的坐标非法请重新输入\n);}}if (win row * col - EASY_COUNT){printf(恭喜你排雷成功\n);DisplayBoard(mine, ROW, COL);}
}4.3 扫雷.c
#include game.hvoid menu()
{printf(*******************************\n);printf(******* 1. play *******\n);printf(******* 0. exit *******\n);printf(*******************************\n);
}void game()
{//mine数组是专门存放布置好的雷的信息char mine[ROWS][COLS] {0};//show数组是专门存放排查出的雷的信息char show[ROWS][COLS] {0};//初始化棋盘InitBoard(mine, ROWS, COLS, 0);//0InitBoard(show, ROWS, COLS, *);//*//打印棋盘DisplayBoard(show, ROW, COL);//布置雷SetMine(mine, ROW, COL);//DisplayBoard(mine, ROW, COL);//排查雷FindMine(mine, show, ROW, COL);
}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);return 0;
}如果这份博客对大家有帮助希望各位给恒川一个免费的点赞作为鼓励并评论收藏一下谢谢大家 制作不易如果大家有什么疑问或给恒川的意见欢迎评论区留言。