放寒假了,到家里太无聊了,上个礼拜做了一个扫雷游戏,界面和玩法都和XP上的差不多
我的程序大致结构是,5个类:
banner_num 存储红旗的数据,就是游戏界面左上部的数字那块
total_rect 游戏主界面的数据,就是雷格子那块
FACE 就界面上那小黄脸
TIME 界面右上部的计时器
Bitmap 是以上四个类的friend class ,上面4个类做数据上的处理(幕后
英雄),它访问其数据来加载相应的位图
关键问题的处理
用一个自定义类的数组保存格子的信息(比如9*9大小的雷区就用temp[9][9],具体信息就略了,太多了)
布雷是采用的取伪随机数布雷,初始化的时候还要记录每个格子是有雷还是没雷
没雷的时候还要记录相邻有几个雷
左键点击未按过或者没差红旗的格子,对格子进行判断,是雷就挂了,不是雷又有两种情况
1是相邻有雷,有几个雷就加载数字几的位图(这种就是点击一个格子不会
展开的情况)
2是相邻没雷。这个要用递归,不仅要判断当前格子,还要判断相邻格子,
说不定还要判断相邻的相邻,相邻的相邻的相邻... ...(这种就是点击一个
格子会展开的情况)
右键点击插红旗,一旦插了红旗这个位置就会屏蔽左键消息,要考虑到红旗的位置会影响格子的展开情况
还有些什么计算红旗个数,计时器什么的就没必要说了
我这个扫雷少了3个功能
第一就是右键没有出问号的功能,这个我故意不加的,这个问号就是没用,也没人
用
第二就是我这个只有一个初级难度,其他乱七八糟的难道还有什么排行榜什么的没搞了,那些都有把握做的好,就偷懒了,の。。。
第三个地方是我的疏忽,XP上的扫雷第一次点击永远不会触雷,但是我的会!!因为我的布雷是在点击之前就布好了,估计官方版本是在点击第一次后才开始布雷的
我得好好研究一下
心得:当时计划做的时候还怕自己做不下来,但后来做起来感觉也不难做,方法都可以想的到,遇到的问题自己都能独立解决,其实我觉得我这个扫雷唯一涉及到算法的就是对“左键点击可能展开”这个地方,就是那个递归,其他的都不能叫算法了,我觉得有些程序可能看起来很难,甚至貌似连边都挨不上,但是真的做起来其实也能拿的下来,关键是要动手,编程就要要动手,这是我一直注重的!