注册 登录
编程论坛 VC++/MFC

关于扫雷游戏

诸葛欧阳 发布于 2015-05-09 14:03, 3599 次点击
最近老师让我们自学MFC做一些小游戏,不过从没接触过MFC,会c++,'只有八周时间求各位高手给些建议和思路,目前选定题目是扫雷,求指导。
9 回复
#2
yangfrancis2015-05-09 23:53
我用VB做过。但MFC我不太懂。只能就编程思路说一说看法。至于雷的分布,用一个枚举变量的二维矩阵数组,随机赋值就行了。
扫的过程要麻烦一些。写一个Uncover函数,鼠标点击一块地砖的时候,将点击的位置(一般是横纵坐标)作为传参传递到函数体中去,先检查它本身是否是地雷,如果是,GAMEOVER,如果不是,再检查它周围的八个位置有没有地雷,统计出雷的数量,显示在点击的位置上,如果周围没有地雷,则把所点击位置的周围八个地砖全部翻开,以递归调用的方式依样检查新翻开的八个地砖周围地雷有多少。具体操作是:在翻开周围的某个地砖时,把新翻地砖的坐标再次作为参数传递给Uncover函数……不过要注意你得先定义一个布尔型的全局二维数组,全部初始化为false,每翻开一个地砖时,必须用二维的布尔型数组当中相应位置的布尔变量设true值来标记该地砖已经翻过(或者你把布尔变量写成地砖类的成员变量也一样,看各人习惯),每次递归调用前先做逻辑判断,符合条件还进入递归,以免出现循环调用导致死循环。(比如你当前位置周围没有地雷,需要调用递归,从当前位置的左上角开始顺时针方向翻砖,左上角第一个翻开,当它同样按照顺时针方向检查时,检查到右下角时正好是它上一级调用Uncover时的传参,这时你当然不能再把它的坐标作为参数进行递归)
#3
诸葛欧阳2015-05-10 13:22
布雷的时候对于那些没有雷的位置先算出来周围八个位置雷的数量存入数组,这样会不会高效些
#4
诸葛欧阳2015-05-10 13:23
能不能把用VB做的程序给我参考一下,我看看程序到底怎么组织,因为以前没做过这种东西不知道怎么把它们组织在一起
#5
yangfrancis2015-05-10 14:44
回复 3楼 诸葛欧阳
我没这样做,但听起来确实应该高效一些。

VB的代码我发给你吧,你给个地址。
#6
诸葛欧阳2015-05-10 15:45
13141211944@
#7
诸葛欧阳2015-05-10 15:45
先谢谢
#8
yangfrancis2015-05-10 16:57
发了
#9
诸葛欧阳2015-05-10 17:16
收到,谢谢,问一下源码在那个文件,只有vb可以打开吗
#10
yangfrancis2015-05-10 20:37
vbp文件,VB才能开
1