- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程序设计综合实践
实习报告学院名称 信息科学与工程学院 专业班级 软件工程2012-3 学生姓名 程大川 学号 1002 指导教师 孙红梅山 东 科 技 大 学
一、实习题目:四、指导教师(签章):2014年 月 日
目 录
7. 实训中遇到的主要问题及解决方法 22
8. 实训收获与体会 23
1. 概述2. 相关技术
2.1滚动背景技术
为了让游戏场景更加逼真,游戏节奏更加合理,可以通过让背景滚动来提高游戏的场景效应,实现这一技术时,可以将一张背景图片复制为三张,从上到下连续的拼接在一起,并将中间的图片进行垂直翻转,在输出图像时,每次只输出合成后图片的1/3部分,每次输出后,将位图中的纵坐标输出位置增加一个位移量,当输出位置到达图片的2/3部分时,将图片的纵坐标输出位置置为0,由于图片的起始位置和图片的2/3位置是一致,所以在背景图片的显示中,不会出现图片的卡顿和瞬移现象。
2.2透明贴图技术
在飞机大战项目中,需要将很多的BMP图像贴到画布上,结合逻辑处理完成对整个游戏的设计,为了实现更好的显示效果,使移动元素所用的图像更加贴合背景,则需要利用透明贴图技术,将BMP图像中的无关颜色做透明处理,实现方式为调用CDC中的TransparentBlt函数,并且利用函数的最后一个参数填写RGB信息,实现对对应颜色的透明化。
2.3定时器技术
为了实现屏幕的定时刷新功能和暂停功能,需要设置定时器,当设置好时间间隔时,每次经过一个设置的时间间隔,Windows都会向程序发送一个WM_TIMER,并且调用相关函数,程序执行OnTimer函数,并根据定时器编号执行相应的操作。实现方式为使用SetTimer函数设置定时器标识和时间间隔。另外也可以利用定时器实现对连续按键的处理,使子弹发射和移动效果更加平滑合理。
2.4双缓冲技术
利用普通的绘制函数对项目中元素进行绘图时,由于绘图时机不一定连续,绘图效率不一定统一,会造成重影和闪屏的不良效果,为了解决这一问题,可以利用双缓冲技术,先将要绘制的每部分内容存储到内存中的一个虚拟的绘图设备中,当所有部分的内容都绘制完毕后,再一次性的将内存中的内容绘制到真实屏幕上,实现这一方式,可以在程序定义一个CDC指针变量和CBitmap指针向量实现,在构造函数中为两个指针分配内存空间,将所有的图像绘制完毕后,再利用GetDC函数取得真实窗口CDC指针和BitBlt函数将内存中的内容完整的拷贝至真实屏幕上。
2.5连续按键处理技术
在飞机大战项目中,需要根据键盘输入决定游戏中各种位置的改变和一些变量的内容,在利用战机发射子弹或者进行移动时,需要按下键盘的空格键或者方向键,在该项目中,如果利用MFC中提供的默认消息处理函数进行按键消息的处理,则会导致子弹发射频率过快,战机移动过快,甚至程序卡死等严重问题,所以应将按键消息处理放在OnTimer函数里,以达到平滑的移动和发射子弹效果
2.6碰撞处理技术
在该项目中,需要处理对象之间的各种碰撞,比如,战机子弹与敌机的碰撞、敌机子弹与战机的碰撞、敌机与战机的碰撞、子弹与客机的碰撞等等。在处理碰撞时,可以为每个对象设置一个与位图大小相同的矩形,矩形的位置与对应位图所在位置一直,当判断两个元素是否发生了碰撞时,只需要利用IntersectRect函数判断两个矩形是否相交即可。
2.7链表存储技术
一局游戏中会有很多的敌机,敌机子弹以及战机子弹,并且需要其进行添加、删除、遍历等操作,为了提高程序执行效率,选用链表存储这些类型,当需要生产一个敌机或者敌机子弹时,只需要在链表尾部添加一个对应的对象即可,时间复杂度为O(1),当敌机被击毁或者子弹失效时,只需要在链表中将对应位置的对象删除即可,时间复杂度为O(1),当绘图时,需要对所有的对象进行遍历,此时只需要从头至尾遍历一个链表即可,时间复杂度为O(n),所有的复杂度已经是最低,所以利用CList链表存储项目各种对象,是一个非常合理的选择。
2.8动态效果技术
在敌机被击毁时,需要显示敌机爆炸的画面,这个动态的画面是由一组静态图像连续绘制形成的,为了实现这一效果,可以利用MFC中的CImageList类,将一组由静态图像组成的连续位图按照一定格式转化为CImageList对象,并为每个对象设置一个index,在敌机生命值为0时,根据index逐帧播放图像,实现敌机爆炸的动态效果。
3.需求分析
3.1功能需求分析
飞机大战项目需要实现的主要功能如下:
战机在用户的控制下可以自由移动,但不可以移动到窗体外。
战机可以连续发射子弹,子弹的起始位置和战机位置有关。
敌机在窗口顶部随机产生,产生后垂直向下移动。
敌机可以发射子弹,每个敌机在一个发射时刻可以发射两枚子弹。
客机在窗口顶部随机产生,
文档评论(0)