ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

关于扫雷游戏的创作

关于扫雷游戏的创作 1.先明确要干什么首先要一个99的棋盘然后把棋盘打印出来然后随机设置雷点击如果是雷就会爆炸如果不是就显示附近雷的个数当点完全部非雷的地方游戏成功2.用到的知识点数组要有两个数组一个用于给后排布置雷的位置一个用于给玩家进行游戏。原本方块是99的但是边界上的也要有33的周边范围所以要扩展原本的范围下标要从0到10,是11个数则扩展为1111的正方形可以自己画一个22的然后把它扩展一圈就要44的才可以循环for(每一个位置要用横竖两个循环才可以表示出来)while埋雷循环do while 菜单反复艾斯克码表用这个来判断有多少个雷因为’1’是490’是48如果用1表示雷0表示非雷就可以用它们的差表示有多少个雷mine[x-1][y]mine[x1][y]mine[x-1][y1]mine[x1][y1]mine[x-1][y-1]mine[x1][y-1]-8’0’预处理\头文件这里用到了宏定义还有3个头文件出现的步骤1.打印菜单2.棋盘初始化3.打印棋盘4.随机布置雷5.排查雷简易扫雷用到的全部知识点不含递归预处理 / 头文件#define 宏定义定义行数、列数、雷的数量 ROWS 、 COLS 、 EASY_COUNT #include 头文件包含 stdio.h 、 stdlib.h 、 time.h 基础语法变量定义 int / char 类型do while 循环菜单反复玩游戏while 循环埋雷循环for 循环两层for初始化棋盘、打印棋盘if 判断 switch 分支菜单选择数组重点二维char数组 char board[ROWS][COLS]二维数组作为函数参数传递这是很多人卡的地方数组下标从0开始利用外围一圈下标做“围墙”规避边界判断字符与ASCII码核心考点字符存储本质是ASCII值‘1’-‘0’ 字符转数字数字 ‘0’ 数字转回字符放到show棋盘随机数rand() 获取随机数srand((unsigned int)time(NULL)) 设置随机种子放main里rand()%n 1 控制随机坐标范围函数自定义函数声明、定义、调用函数传参函数返回值统计雷数量 GetMineCount 返回int多文件工程思想加分项.h 头文件放宏、函数声明.c 源文件写函数实现多文件联合编译考试很少讲#includestdio.h#includestdlib.h#includetime.h#define ROW 9#define COL 9#define ROWS ROW2#define COLS COL2#define MINE_COUNT 10char board[ROWS][COLS];void menu(){printf(“…\n”);printf(“…1.play…\n”);printf(“…0.leave…\n”);printf(“…\n”);}void InitBoard(char board[ROWS][COLS], int ROW,int COL, char set){int i 0;int j 0;for (i 0; i ROW; i){for (j 0; j COL; 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 1; j COL; j){printf(“%d”, j);}for (i 0; i ROW; i){printf(“%d\n”, 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 0;while (count MINE_COUNT){int x rand() % ROW 1;int y rand() % COL 1;if (mine[x][y] ‘0’){mine[x][y] ‘1’;count;}}}int GetMineCount(char board[ROWS][COLS], int x, int y){return board[x - 1][y - 1] board[x - 1][y] board[x - 1][y 1] board[x][y - 1] board[x][y 1] board[x 1][y 1] board[x 1][y] board[x 1][y - 1] - 8 * ‘0’;}void FindMine(char board[ROWS][COLS], char show[ROWS][COLS], int ROW, int COL){int x 0;int y 0;int n 0;int win 0;while (win ROW * COL - MINE_COUNT){printf(“请输入”);scanf(“%d%d”, x, y);if ((x 1 x 9) (y 1 y 9)){if (board[x][y] ‘1’){printf(“你被炸死了”);DisplayBoard(board, ROW, COL);break;}else{int cun GetMineCount(board, x, y);show[x][y] cun ‘0’;DisplayBoard(show, ROW, COL);win;}}else{printf(“你输入错误重新输入”);}if (win ROW * COL - MINE_COUNT){printf(“游戏胜利”);DisplayBoard(board, ROW, COL);}}}void game(){char mine[ROWS][COLS];char show[ROWS][COLS];InitBoard(mine, ROWS, COLS, ‘0’);InitBoard(show, ROWS, COLS, ‘*’);SetMine(mine, ROW, COL);DisplayBoard(show, ROW, COL);FindMine(mine, show, ROW, COL);}int main(){srand((unsigned int)time(0));int input 0;do{menu();scanf(“%d”, input);switch (input){case 1:game();break;case 0:printf(leave game );break;default:printf(“重新输入”);break;}} while (input);return 0;}
返回列表