第五章简单扫雷游戏程序
本章我们学习的是一个简单的扫雷游戏程序,扫雷这个游戏相信大家都玩过,印象也比较深,这有利于我们更好的掌握和记住当中的知识点。下面开始介绍:
本章大致包含以下几个新知识点:
⑴基于wxFrame的窗体框架程序开发
⑵wxFrame等窗体大小控制
⑶wxMenu的使用
⑷通过wxClientDC进行客户区绘图
⑸通过WX_DEFINE_ARRAY定义使用对象容器
⑹鼠标左击、右击等事件的处理方法
※⑺简单游戏算法
上面标※的部分是与wxWidgets知识无关的,这里列出来是为了方便让程序能更容易理解,这个地方请大家选择性阅读。
程序最终结果预览:
程序运行图
同样的,代码我已经放到Google Code上了,项目地址是:http://code.google.com/p/wxminesweeping/,你可以在项目的Downloads下找到整个工程的源代码。
5.1 开发过程
做这个程序,首先自己要对整个游戏有个了解,至于实在不明白的,可以打开微软自带的扫雷玩玩,总的来说先确定以下要点:
1)程序即雷区界面布局
2)地雷密度和游戏等级间的关系
3)地雷周边个数提示功能
4)点开雷区空地时打开紧邻空地的连锁反应
5)游戏结果的统计
确定好要点后,我们只要一步步完成他就好了。
首先,我们要做雷区界面,雷区界面是个什么样的呢?大致形容一下的话,就是桌上整齐的放着一块块没有被翻开的“牌子”,其中有些“牌子”上翻开后写着“周围很危险,请你小心点”,其中有些“牌子”上翻开什么都没写,还有些是牌子是倒霉牌,翻开会发现上面写着大大的倒霉,呵呵!
不知道上面的例子好不好理解,那如果按照这个理解,我们用什么来表示“牌子”呢?这里我考虑到了两种方式:
I. 动态生成wxBitmapButton对象,分布到wxGridSizer当中去
II. 利用绘图功能,直接画出“牌子”
这两种方式各有优缺点,第一种动态生成wxBitmapButton的方式,因为wxBitmapButton作为按钮事件自身就拥有各种事件,所以只要绑定好事件处理就好,感觉上会容易掌握一些,但是这种批量生成控件的方法是很浪费资源的,在内存清理的时候就会比较繁琐。而第二种看起来貌似复杂,但只要掌握了绘图的原理,不仅高效,而且会显得更加灵活和快捷,只是有一个缺点,做出精致的界面需要下一番功夫!
在这个程序上,我采取的是第二种,有兴趣的看完教程后可以试着用第一种方式实现。
然后,我们要理清楚程序里的数据结构,比如说:
游戏等级LEVEL ——0:Learner,1:Player,2:Expert三个等级
“牌子”容器ARRAY
“牌子”总数TOTAL ——Count(ARRAY)
地雷密度RATE ——与LEVEL对应10%,15%,20%
地雷个数NUM ——TOTAL * RATE
……
注:这里的变量和方法是伪代码,不一定与程序的一样,只是一个说明。
弄清了数据结构后,我们只要依次把地雷、地雷提示等数据填到“牌子”容器里面去,然后遍历这个容器,我们就能画出最终的程序界面。
最后,实现鼠标左击、右击、右按下等事件的处理。其中重点在如何实现空地连锁打开以及边界处理功能。这里具体是怎么实现的在后面会有相关介绍,当然,你也可以直接看源代码进行了解。
下面我们开始动手实际操作。
5.2.1 工程建立
打开CodeBlocks,按照本教程3.2章节新建一个wxWidgets工程,此处工程类型我们选择wxFrame类型。
初始工程预览图(等待截图)
5.2.2 程序主要功能窗体设计
这个程序主体界面只需要加入菜单就好,另外程序需要有一个游戏等级设置对话框界面,我们在工程里面直接新建立一个wxDialog就好。wxDialog界面也相当简单,大家可以参照本教程第4.2.2小节去做,这里就不再重复了。
工程界面设计预览图(等待截图)
5.2.3 程序结构流程设计
矩阵单元含义示意图
除特别声明为转载内容外,本站所有内容均为作者原创,谢绝任何单位和个人不经许可的复制和转播!
对于确有转载需要的,请先与作者联系,在获得允许后烦请在转载时保留文章出处。
本文出自Lupin's Blog:http://www.cnzui.com/archives/1030
from: 《跟我学wxWidgets开发》系列教程开始了 - Lupin's Blog-原中华最网