3.2 BackGround类的细化
(1)BackGround类的数据结构与属性设计:BackGround对象的主要工作是产生水果和虫子,提供蛇移动的环境。因此它的主要作用是提供带有位置性质的桌面平台。对这个桌子的数据结构进行分析和设计,采用一张二文表表示桌面。设计一个方法,将屏幕坐标转化为二文表对应的下标。二文表设计完成以后,然后设计数组元素中的内容。桌子上面有水果与毒果,蛇在上面移动,当蛇移动到有水果的地方就会将水果吃掉,以增长身体;移动到有虫子或者碰到墙壁的时候就会违反游戏规则而结束游戏。这样,在这个桌子里面,不同的位置应该有不同的属性标记。因此首先定义一个结构体Table,该结构中包含屏幕坐标信息,和属性标记,然后在用Table定义一个结构体数组Table table[20][30],其中该数组下标就是二文表坐标。因为两个坐标系的坐标是不同的,所以还需要设计一个方法,这个方法应该完成坐标系之间的对应。
(2)水果的安放与清除:对于BackGround对象来说,水果在桌面上的安放与清除是两个相对比较重要的函数。但是这两个函数的实现相对简单。安放函数只需要判断属性标记为空则置属性标记为食物。清除的时候则判断属性标记为食物,然后置属性标记为空。食物的显示和背景的刷新在另一个函数中。
(3)背景的刷新:在背景刷新函数的中,其中难点是墙壁的绘制。墙是由一个20*20像素的位图拼接而成。而墙所占的区域明显大于20*20,因此要用该位图对强所在区域进行填充。重复贴图显然会影响游戏速度并且增加内存开销,在这里本设计采用Windows自带的API函数PatBlt。
BOOL PatBlt (
HDC hdc, //目标设备环境句柄
int nXLeft, //目标设备环境的矩形区域的左上角x坐标
int nYLeft, //目标设备环境的矩形区域的左上角y坐标
int nWidth, //目标设备环境的矩形区域宽度值
int nHeight, //目标设备环境的矩形区域高度值
DWORD dwrop, //光栅操作符
所谓光栅操作,其实就是指原位图与目标位图以及图案刷的颜色值进行布尔运算的方式,游戏中用到的光栅操作代码是PATCOPY,可以将指定的图案刷复制的目标矩形上。
绘制墙
{
定义位图资源并载入;
创建位图画刷,其中调用墙的位图;
画刷和设备相关联 ;
把“墙”贴在屏幕上pDC->PatBlt(0,0,715,585,PATCOPY);
}
3.3 最终程序效果
程序的最终运行效果如图2所示。
图2 程序最终运行图
4.系统测试
4.1测试方案
软件测试工作伴随着软件开发的整个过程。测试的目的是能够用最少的时间和工作量,尽可能多的找出不同类型的错误。测试的任务是通过在计算机上执行程序,暴露程序中潜在的错误[9]。在测试过程中应从“小规模”开始,逐步转向“大规模”。为了达到最佳效果,找第三者来重新对该软件系统进行测试。
程序 错误信息 纠正信息 VC++贪食蛇游戏的实现(4):http://www.751com.cn/jisuanji/lunwen_1708.html