C语言扫雷游戏代码以及基本原理教学(一看就会) |
您所在的位置:网站首页 › abc的游戏原理 › C语言扫雷游戏代码以及基本原理教学(一看就会) |
目录 1.什么是扫雷游戏以及扫雷游戏怎么玩 (1)什么是《扫雷》 (2)《扫雷》背景故事 (3)怎么玩《扫雷》 2.扫雷游戏代码实现的基本思路 (1)基本思路(创建几个文件及其设计意义) (2)扫雷游戏的基本框架 3.《扫雷》代码实现 (1)游戏的外部封装 (2)创建数组 (3)初始化数组 (4)打印棋盘 (5)随机布置雷 (6)排查雷 (7)测试游戏代码是否成功 (8)函数封装完成,组装函数 test.c文件 扫雷游戏的测试逻辑(也是游戏代码的基本框架) game.h文件 测试游戏函数的函数定义以及头文件 game.c文件 游戏函数的声明 4.总结 1.什么是扫雷游戏以及扫雷游戏怎么玩 (1)什么是《扫雷》《扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。 (2)《扫雷》背景故事扫雷在科技历史上也扮演了相似的角色。这个基于数字的逻辑谜题最早来自20世纪六七十年代,当时Jerimac Ratliff推出的名为“Cube”的游戏已经非常受人欢迎。几十年后的1992年,扫雷游戏被加入window系统,这并不是为了展示Windows是游戏操作系统专家,而是为了训练用户的鼠标左右键操作能力,让这些动作变得非常自然,并培养鼠标移动的速度和准确性。 (3)怎么玩《扫雷》1. 在格子的数字里,看显示的数字是多少,相邻就有多少个雷。 2. 数字1,相对简单,8个格子只有一个是雷。 3. 数字2,8个格子有二个是雷。 4. 以此类推,基本上3,4,5,6的数字都是这样的意思。 5. 当遇到不能确定的情况,我们需要从另一边推进,尽量翻出更多的数字来推理。 2.扫雷游戏代码实现的基本思路 (1)基本思路(创建几个文件及其设计意义)test.c文件 扫雷游戏的测试逻辑 game.h文件 测试游戏函数的函数声明 game.c文件 游戏函数的实现 test.c: 放主函数及其代码的基本框架,以及扫雷的基本逻辑。 game.h: 放扫雷游戏函数的函数声明,以及一些头文件声明,方便在test.c和game.c中使用。 game.c:实现游戏函数的内容。 (2)扫雷游戏的基本框架游戏思路有了接下来就要设计游戏框架,进而一步一步的实现游戏,一步步封装游戏。扫雷需要有存放雷的数组,也需要有查找时,周围一圈雷的个数,这又需要存放一个数组。为什们不存放在一个数组内呢,是因为方便观察呀,还有需要注意的一个点在查找雷时,要找周围一圈雷的个数,如果再找最边里的雷查找周围的雷可能会发生数组越界,所以要创建一个大一圈的数组。创建完两个数组,再进行数组的初始化,为了方便数组的使用,然后肯定需要打印两个棋盘了,然后在一个棋盘上布置雷,然后在排查雷将信息放到另一个数组上,这就是扫雷游戏的基本框架。 总结 创建两个数组,一个存放布置好的雷(mine数组),一个存放排查雷的信息(show数组)初始化数组:将mine数组初始化为"0",布置雷的时候改为"1"(就是雷是1,非雷是0) show数组初始化" * " ,排查雷后改为具体数字.打印两个棋盘,方便观察然后在mine数组中随机布置雷再排查雷,将排查雷的信息记录在show数组上判断游戏结果(踩雷或者排雷完成)画图解释为什们要建立大一圈的数组:
《扫雷》这些雷和数字都要存放到9*9的二维数组里,为了避免越界访问需要创建一个大一圈的数组11*11,这样在查找雷时,就不会越界访问。 有了框架,就跟着框架写代码就非常好写了 3.《扫雷》代码实现 (1)游戏的外部封装对于《扫雷》游戏不可能玩一把就不玩了,所以应写循环,玩完一把在玩下一把,不想玩就退出,对于这个游戏至少应该进行一次,所以用do-while()循环。为了让玩家看的明白怎么我玩应该封装一个菜单函数,1---进入游戏,0---退出游戏。为什们这么设置也是有用意的,在循环中0---表示假,就可以直接退出游戏,而1--表示真就可以进入游戏,我们需要选择,可以用switch语句进行选择。下面就是代码实现。可以在游戏函数简单写一个输出函数printf简单模拟游戏函数,然后在简单运行一下,看现在已写代码的正确性。 //扫雷游戏的外部封装 #define _CRT_SECURE_NO_WARNINGS 1 #include void menu() { printf("***************************\n"); printf("******1---进入游戏---******\n"); printf("******0---退出游戏---******\n"); printf("***************************\n"); } void game() { printf("游戏开始\n"); } int main() { int input = 0; do { menu(); printf("请输入n->"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出程序\n"); break; default: printf("输入错误,请重新输入\n"); break; } } while (input); return 0; } (2)创建数组创建两个数组一个存放布置好的雷(mine数组),一个存放排查雷的信息(show数组). 一个放雷,不需要给玩家看,一个放排雷的信息,给玩家看 //创建两个数组 void game() { char mine[ROWS][COLS] = { 0 }; char show[ROWS][COLS] = { 0 }; } (3)初始化数组mine数组初始化为" 0 " ,布置雷的时候改为"1" show数组初始化为" * " ,排查雷后改为具体数字 在函数传参,传参传(数组,行,列,以及初始化的字符) //初始化mine和show数组。 void init_board(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; } } } (4)打印棋盘两个数组初始化完成,就可以打印了,再通过循环打印出来, 需要注意初始化是11*11的数组,而打印棋盘是给玩家看的,打印9*9就可以了。 在打印过程中需要打印行号和列号,这个东西需要找到规律后也会发现很简单,具体操作请看代码。每个代码后都有注释。 //打印棋盘 void print_board(char board[ROWS][COLS], int row, int col) { int i = 0; int j = 0; //需要在每一行每一列上加上坐标好让玩家好观察 //先打印每一列的坐标,因为还有1列行坐标,行坐标上是0 for (j = 0; j |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |