用MFC做扫雷碰到的问题

本文介绍了使用MFC开发扫雷游戏的经验,包括选择合适的数据结构、地图生成算法、鼠标点击处理及递归实现等关键技术点。

刚接触MFC没多少时间。处在摸索状态。做扫雷是为了增加自己的实战经验。

学习编程免不了接触自己不熟悉的东西,然后边查边做,很正常的学习方式。

做扫雷有几个地方要注意:

1,  数据的选择。听到有些人说用一大堆button来组成雷区,没试过,不过总觉着太疯狂了。

       我选用的是

      struct BombUnit 

      {

             BOOL      IsTurned;    //  用来表示当前区域是否被翻过

             int             DisplayNum;   // -1 表示为雷,0 表示空白区域,其他数字表示周围的雷数

             CRect      rtUnit;           // 位置。当然你也可以用一个point或两个point来表示。

      }

2 , 地图的生成。无所谓就是用随机数来获得在那个位置上是雷。关键是怎样确定雷点周围方块的数字。

         先把所有位置都置为0, 然后确定雷的位置。最后扫描每一个方块,确定它周围有几个雷。

         或者是确定雷的位置后,让它周围的方块都 ++1 ,不过要注意的就是 千万不能对已经是雷的方块++1。

3,   捕获鼠标的点击位置可以确定点击的是那一个方块。简单就不说了。

4 ,  还有一个地方需要时间效率的就是:当你点击一个空白位置的时候,它邻近的空白区域都要打开。并且

         与空白区域相邻的数字区也要打开(不可能是雷点)。

         我是用递归来做的。

5 , 我是直接在视类中写进代码的,也可以用一个类继承视类。专门写一个独立的类来表示,好像也不是不可

          以。没有试过。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值