基于VC的扫雷游戏开发

本文详细介绍了如何在Visual C++6.0环境下使用C语言和easyX库开发扫雷游戏。从游戏背景、开发环境与工具体现到游戏设计流程,包括界面与鼠标交互、算法设计和游戏优化等方面,全面阐述了扫雷游戏的实现过程。通过这个项目,开发者可以提升编程能力和逻辑思维能力。
摘要由CSDN通过智能技术生成

基于VC的扫雷游戏开发

1.  引言:

1.1          背景:

“扫雷”是Windows操作系统自带的一款小游戏,以其简约的界面而不失逻辑推理的玩法深得广大玩家的喜爱。该游戏通过左键打开安全的格子,格子上的数字表明了在此格周围的八个格子中地雷的总数;用右键标记地雷、待定地雷;双击已开的格子自动开出周围八个未开格子。将所有非雷格子全部打开则游戏成功,开到有雷格子则游戏失败。

1.2          开发环境与工具:

VisualC++6.0开发环境下,用C语言以及从easyX图形库下载的扩充库<graphics.h>、标准输入输出库<stdio.h>、屏幕处理库<conio.h>日期和时间头文件<time.h>、多媒体相关应用程序接口"winmm.lib"Windows7扫雷音效文件等完成此次开发。

1.3          意义:

虽然并没有涉及到优秀的游戏编程语言C++或JAVA,也没有利用可观的界面框架MFC,没有载入任何漂亮的图片。用的只是最基础的C语言,去操控着整个游戏画面的形成,都是用最简单的函数一点点地勾勒出来的界面,而算法方面也是经过了精心的策划最终敲定的。这个过程中锻炼了我们的编程能力。

2.  总体构架与分析:

2.1          设计流程:

游戏整体设计思路即从三大方面展开:界面与鼠标、算法、优化。下图简单表明了大概的设计流程。

 

2.2          ※基本思路与算法:

首先需要建立这个9X9表格,利用二维数组map[9][9]存储每个格子的情况(1就是有雷,0就是无雷,当然这里用宏定义可以提高可读性,作为初学者我们务必要遵循这些良好的习惯,因此用MINE和NOMINE表示有无雷),另外还建立了一个_map[9][9]存储格子状态,由右键控制其变化(2就是未翻,3就是已翻,4就是标记,5就是待定)。当玩家左击下去,利用鼠标捕获函数获得用户点击的坐标(x,y)然后将它转换成数组下标(这样就实现了界面到代码化的过度)会出现两种情况,有雷与无雷,有雷则直接失败,无雷又分9种情况(编一个判断函数judge()(后面会详细介绍):以点击的这个格子为中心搜索周围8个的情况累计总数)。周围有0—8个雷,当是1-8个雷的时候则只会在你点下去的格子上显示数字并不会延展(这是最简单的情况也是递归的出口!),但当是0个的时候,则要进入递归去搜索以周围8个格子“各自”为中心的雷数情况。而这8个格子每个格子又都套用刚才“点击那个格子”的方法去计算他们各自周围的雷数。依次类推,而递归必须要出口,这个出口就是直到递归到表格的边界或递归到一个有数字的格子(可以从Windows上的扫雷的边缘观察,看是不是这样的)。另外还有开格函数open()(后面会详细介绍),它也嵌套调用了judge()函数,只不过添加了一些更为复杂的判断。至此,扫雷的基本思路就已经理清了。

2.3          头文件、宏定义、所有函数声明、全局变量:

2.4          主函数框架:main()

 

主函数中用initgraph(640,480)创建一个640*480大小的图形窗口,包含对界面的初始化函数menu() stop(),以及定义类MOUSEMSG(其中用到了对象的坐标、以及鼠标信息(左键、右键、双击)),再在whlie(true)永真循环内对鼠标的时时捕获函数GetMouseMsg(),随时锁定了用户鼠标的所在位置。如果鼠标落在事先设定好的“难度方块”范围内则用move()函数伸展出9X9 16X16的选择方块,在extend()函数中进一步对用户的鼠标进行捕获。而如果鼠标落在事先设定好的“退出方块”范围内则closegraph()退出操作系统。如此以来,会形成多重永真循环,在未到达出口时(即没有扫到雷或者用户没有主动点击退出),那么是在游戏的进行阶段,当到达出口时(即用户扫到雷或者扫雷成功或主动点击退出),那么将调用MessageBox()函数询问用户是否要重来,是的话则嵌套调用extend()函数重新开始,否则退出操作系统。

2.5          游戏正式开始函数框架:extend())

 

 

3.  开场界面:此界面被封装在int first()函数中,当用户按下任意键时返回1,主函数响应其值,进入游戏主界面。

3.1          自弹音乐:随着用Beep()函数编写的的背景音乐“星之所在”的响起,

屏幕逐渐打印出如下图示。(此部分代码单独编写在“音符.cpp”文件中)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值