飞机大战MFC实验报告
飞机大战实训报告
飞机大战实训报告作为一款经典的游戏,《飞机大战》已经深入人心,对于爱好游戏开发的人来说,掌握它的制作方法有助于提升自己的技能和经验。
在我的实训项目中,我选择了制作一款《飞机大战》游戏,下面是我的实训报告。
一、前期准备在开始制作游戏之前,我首先进行了一些前期准备,包括学习游戏开发工具和游戏设计思路的设计。
1.游戏开发工具的选择根据我的经验和需求,我选择了使用Cocos Creator 开发工具,因为它可以提供完整的游戏开发环境,包括UI 设计、动画制作、场景控制等功能,同时支持多平台发布。
2.游戏设计思路的设计在开发游戏之前,我需要对游戏的设计方案进行一定的考量。
我决定将游戏分为三个主要部分:开始场景、游戏场景和结束场景。
在开始场景中,我将为玩家提供游戏规则、操作说明等信息。
游戏场景将包括玩家战机、敌机、敌机攻击、奖励、分数等元素。
结束场景将显示玩家的得分、排名和游戏结束信息。
二、游戏开发1.开始场景开始场景是游戏的首屏,玩家可以在这里了解游戏规则和操作方法。
在这个场景中,我将使用Cocos Creator 的UI 设计功能创建一个开始界面。
在这个界面中,我会提供游戏开始、音乐开关、游戏规则等按钮。
2.游戏场景游戏场景是游戏的核心场景,游戏操作和游戏体验都在这里产生。
在这个场景中,我会使用Cocos Creator 的场景设计功能创建一个游戏场景。
在这个场景中,我将包含玩家战机、敌机、敌机攻击、奖励和分数等元素。
3.结束场景结束场景是游戏的最后一个场景,玩家可以在这里查看自己的得分和排名。
在这个场景中,我将使用Cocos Creator 的UI 设计功能创建一个结束界面。
三、游戏发布当游戏制作完成后,我需要将游戏发布到各个平台上。
对于HTML5 平台,我将使用Cocos Creator 提供的发布功能将游戏发布到浏览器上,对于移动平台,我将使用Cocos Creator 提供的发布功能将游戏发布到移动设备上。
飞机大作战游戏实训总结
飞机大作战游戏实训总结1.概述飞机大战游戏是在Microsoft Visual Studio编程软件的MFC环境下制作的一款游戏,界面简洁流畅、游戏方式简单。
游戏主要实现的功能和规则如下:(1)利用键盘中的上下左右键控制我方战机,空格键发射子弹。
战机初始有一定量的血量。
(2)屏幕上随机产生敌机,战机产生的数量和当前关卡,关卡越高,产生的敌机越多,游戏难度越大。
而且敌机产生的位置和速度是不确定的。
只有当我机位于敌机下方时,敌机会产生子弹,默认情况下是不发射任何子弹的。
(3)战机子弹打中敌机,敌机就会爆炸,同时玩家分数会增加,每得1000分进人下一关。
2.相关技术在设计该游戏时,用到许多技术,这里介绍几个相对重要的技术。
关于碰撞检测的相关函数:用CRect类的GetRect()函数可以获得当前对象的矩形区域,IntersectRect()并用此函数判断战机与敌机,子弹与战机,我方导弹与敌机,战机与物品是否相撞。
CObList链表:使用CObList链表来分别存储敌机,炸弹,导弹,爆炸效果。
CobList类似于一个双向链表,POSITION类型的变量为链表的键。
使用POSITION变量,既可以作为链表循环中的循环变量,也可以作为标记某个位置的标签。
我们可以通过获得某元素的POSITION来访问它。
本程序中主要用到的函数有:GetHeadPosition()——获取链表首元素的POSITION;AddTail ()——向链表尾部添加新的元素;GetNext(POSITION&rPosition)返回当前rPosition指向的元素,并使rPosition指向下一个元素。
设置定时器、销毁定时器SetTimerO函数来设置定时器,控制每隔多少毫秒执行一次什么任务。
用Ki11Time()函数来销毁定时器。
双缓冲技术为了避免窗体频繁闪烁,引入双缓冲技术。
双缓冲的原理是先建立一个内存DC,捋游戏对象绘制到内存DC上,再一次性的把内存中绘制好的图形“拷贝”到设备DC上。
飞机大战程序设计报告
程序设计综合实践实习报告一、实习题目:飞机大战游戏二、实习时间:2014.9.20-2014.9.30实习地点:J13-132、232三、实习任务:通过项目实战,掌握C++面向对象编程的基础技术和Windows 应用程序的编程方法,能够运用MFC技术及其开发环境进行小项目的开发。
四、小组分工说明:五、实习成绩六、指导教师对实习的评语:指导教师(签章):年月日飞机大战游戏1.实习目的1.1使学生全面了解软件项目实施的过程,理解软件企业对于程序员的基本素质和技术能力要求。
1.2使学生掌握C++及Window程序设计的基本技术,能够运用MFC技术及其开发环境进行小型项目的开发。
1.3重点培养学生的独立创新精神和查阅资料能力,提高其口头和书面的沟通能力。
1.4使学生掌握快速学习新知识、新技术方法,培养良好的分析问题和解决问题的能力1.5重点提高学生的编程能力,使学生建立正确的编程理念,养成规范的编程习惯。
2. 实习计划1、9.20—9.21先建立CGameObject 类,利用继承机制,根据此类进行依次的派生。
2、9.22—9.25再建立派生类:Bomb,Ball,Enemy,MyPlane,Explosion等,并实现各自功能。
3、9.26—9.29在xxView.cpp中的OnTimer中实现背景的设置,对敌机,导弹,敌机子弹,爆炸效果的绘制,以及敌机子弹和战机,导弹和敌机的碰撞检验,并添加爆炸效果4、9.29—9.30最后释放pDC以及定时器3.实习过程3.1 技术准备透明贴图技术绘制透明位图的关键就是创建一个“掩码”位图(mask bitmap),这个“掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。
在详细介绍实现过程之前先介绍下所使用的画图函数以及函数参数所代表的功能;整个绘制过程需要使用到BitBlt()函数。
整个功能的实现过程如下:(1) 创建一张大小与需要绘制图像相同的位图作为“掩码”位图;(2) 将新创建的“掩码”位图存储至掩码位图的设备描述表中;(3) 把位图设备描述表的背景设置成“透明色”,不需要显示的颜色;(4) 复制粘贴位图到“掩码”位图的设备描述表中,这个时候“掩码”位图设备描述表中存放的位图与位图设备描述表中的位图一样;(5) 把需要透明绘制的位图与对话框绘图相应区域的背景进行逻辑异或操作绘制到对话框上;(6) 把“掩码”位图与这个时候对话框相应区域的背景进行逻辑与的操作;(7) 重复步骤5的操作,把需要透明绘制的位图与对话框绘图相应区域的背景进行逻辑异或操作绘制到对话框上;(8) 最后把系统的画笔还给系统,删除使用过的GDIObject,释放非空的指针,最后把新建的设备描述表也删除。
MFC实验报告(模板)
重庆交通大学程序设计实训I课程实验报告
班级:专业级班
姓名:
学号:
实验项目名称:
实验项目性质:
实验所属课程:
实验室(中心):
指导教师:
实验完成时间:年月日
教师评阅意见:
签名:年月日实验成绩:
一、实验目的
二、实验主要内容及要求
三、实验设备及软件
四、设计方案
㈠题目(老师给定或学生自定)
㈡设计的主要思路或相关算法的流程图
㈢主要功能
五、主要代码及必要说明
六、实验结果及说明
七、测试数据与测试结果分析
八、实验体会
九、附录
此部分主要标明主要参考文献或其它需要特殊说明部分。
程序设计综合实践 飞机大战 实训报告
[在此处键入]实训报告飞机大战游戏设计与开发专业名称:班级:学号:信息科学与工程学院二零一八年七月目录1. 概述 (3)2. 相关技术 (3)2.1 碰撞检测 (3)2.2 COblist链表 (3)2.3 双缓冲技术 (4)2.4 背景滚动 (4)2.5 爆炸动画的实现 (4)2.6定时器的使用 (4)3. 总体设计与详细设计 (4)3.1 系统模块划分 (4)3.2 主要功能模块 (5)4. 编码实现 (7)5. 实训中遇到的主要问题及解决方法 (42)6. 实训体会 (43)1. 概述本次实训任务是以visual studio 2017为环境,利用MFC和C++编写一个飞机大战游戏。
其实现的主要功能为:实现游戏对象的爆炸特效,界面背景切换,文字提示和血条显示功能,奖励机制(血包、护盾、僚机、武器升级),大招和无敌模式等。
通过方向键控制战机移动,空格键发射子弹,击毁敌机可以得分。
游戏中可以按“X”开启或关闭无敌模式。
按“P”可以暂停。
游戏设有能量槽,能量不断积累,超过一半可以按“Z”键使用大招,大招为全屏攻击。
玩家收到攻击血量减少,血量为0游戏结束,显示“Game Over”,可以按“R”复活,继续游戏。
游戏设有关卡机制,每关开始一段时间后出现boss。
击败boss进入下一关。
boss有三种,难度依次增加。
第一种boss发射直线子弹,第二种boss发射散射子弹,第三种boss 两种子弹随机发射。
前三关背景图和boss固定,之后背景图与boss随机生成。
游戏中随机出现四种道具:血包:可以恢复一定的血量。
护盾:一段时间内无敌。
武器升级:升级玩家的武器,共三个等级。
僚机:获得一个僚机。
2. 相关技术2.1 碰撞检测游戏中需要处理一系列的碰撞,在处理碰撞时,可以认为每个对象是与位图大小相同的矩形,用Crect类的GetRect函数获取我方战机的矩形与敌机子弹矩形,然后新建一个矩形并且调用IntersectRect(&bRect,mRect)再用if条件语句判断,若矩形区域重叠不为空,则视为碰撞,在if语句中填写实现碰撞后的功能。
经典实验--飞机大战小游戏
经典实验--飞机⼤战⼩游戏·⼀、需求设计 1.为检测C语⾔的学习成果,根据所学的C语⾔知识,设计程序:飞机⼤战⼩游戏; 2.⾃⾏定义变量,函数或结构体,编写源代码并进⾏编译运⾏测试; 3.根据编写的代码,⾃⾏攥写实验报告;·⼆、系统设计 1 实验题⽬: 飞机⼤战⼩游戏 2 游戏描述 飞机⼤战是⼀款惊险刺激的射击游戏,通过控制飞机的上下左右移动,发射⼦弹,击退敌机并赢得分数,玩游戏既可以锻炼⼈的反应能⼒,也可以起到放松⾝⼼的作⽤. 进⾏C语⾔⾯向对象程序设计课程设计主要是在学习C语⾔这门⾯向对象语⾔的基础上,并通过实践加深对 C语⾔⾯向对象程序设计语⾔特点的认识与理解。
同时,可以提⾼运⽤C编程语⾔解决实际问题的能⼒;锻炼实际的编程能⼒;还能提⾼调查研究、查阅技术⽂ 献、资料以及编写软件设计⽂档的能⼒。
3 功能要求 【1】实现游戏难度的选择,飞机模型以及界⾯的外观设计等的功能。
【2】实现⽅向操移动的操作和敌机随机⽣成功能。
【3】分数计算功能。
【4】游戏的开始,暂停,结束以及分数显⽰的功能。
三、概要设计 1 简要设计及所涉及的知识 运⽤⼆维数组的加减和循环来设计游戏.通过下,xy的加减实现位置的移动;然后⽤⼀系列函数,实现各功能; 2 功能描述 (1) 难度选择: 1为困难,2为⼀般,3为简单,Enter开始游戏; (2) 操作:按1235控制飞机左下右上移动,空格发射⼦弹,按8暂停,按0停⽌游戏并输出分数;; (3) 游戏的测评⽅式为计分制,每击中⼀架敌机分数加1,⽆分数限制;·四详细设计 1定义全局变量 (1) long long int speed = 0;//控制敌机的速度 (2) int position_x, position_y;//飞机的所在位置 (3) int high, width;//地图的⼤⼩ (4) int bullet_x, bullet_y;//⼦弹的位置 (5) int enemy_x, enemy_y;//敌⼈的位置 (6) int map[MAX][MAX]; (7) /*地图符号说明:0表⽰空⽩,1表⽰战机*的区域,2表⽰敌⼈战机的位置。
飞机大战实训报告
程序设计综合实践实习报告学院名称专业班级学生姓名学号指导教师山东科技大学一、实习题目:飞机大战游戏的设计与实现二、实习时间:18周~ 19周实习地点:三、实习任务:1.基本功能要求:飞机大战游戏必须运用透明贴图、按键处理、定时控制、双缓冲技术等技术实现战机(玩家)和敌机(计算机)对战功能2.扩展功能:在完成基本功能基础上可以增加双人对战、游戏积分制、声音效果、多种子弹类型、客机类型、游戏关卡设计、多种类型敌机、游戏中间结果存贮等功能四、小组分工说明:自己完成五、实习成绩六、指导教师对实习的评语:指导教师(签章):2015年月日目录1.概述 (4)1.1实训项目简介 (4)1.2实训项目功能说明 (4)2.相关技术 (5)2.1透明贴图技术 (5)2.2 获取矩形区域并判断两个矩形区域是否相撞 (5)2.3鼠标控制我方战机 (5)2.4 Windows定时器技术 (6)2.5 CObList链表 (6)2.6对话框的应用 (7)2.7双缓冲技术 (7)3.需求分析 (7)3.1功能需求分析 (7)3.2 数据需求分析 . (7)3.3 行为需求分析 (7)3.4 其他需求 (7)4.总体设计与详细设计 (8)4.1 系统模块划分 (8)4.2 主要功能模块 (8)4.2.1系统主要类图 (8)4.2.2飞机大战游戏设计执行流程图 (8)4.3 扩展功能设计思路 (9)4.4 软件结构设计体会 (9)5.编码实现 (10)5.1绘制游戏背景位图的程序 (10)5.2各个游戏对象的绘制 (10)5.3我方战机位置的动态控制 (12)5.4各个游戏对象碰撞的实现 (13)5.5游戏界面输出当前游戏信息 (15)6.测试情况说明 (17)6.1主要模块测试情况 (17)6.2 主要功能测试情况 (18)7. 实训中遇到的主要问题及解决方法 (19)8.实训收获与体会 (19)1. 概述1.1实训项目简介本次实训项目是应用MFC编程完成一个界面简洁、运行流畅、操作简单、易于上手的飞机大战。
飞机大战项目实训报告
飞机大战项目实训报告一、项目背景随着计算机技术的不断发展和完善,游戏设计成为了计算机软件开发的重要组成部分之一。
针对此,本实训项目选择了一款单机游戏——飞机大战。
二、项目概述《飞机大战》是一款盛行于各大游戏平台的街机游戏,其玩法简单,操作容易上手,可单人、多人游戏。
玩家通过控制战斗机的移动与攻击,击败敌机、坦克、大型BOSS等,累计积分并提高自己的得分记录。
三、项目分析1.游戏玩法(1) 游戏起始界面:菜单栏、游戏设置、游戏排名、游戏开始、游戏介绍等。
(2) 游戏主界面:飞机、子弹、敌机、敌机轨迹、背景、音效等。
(3) 游戏结束界面:游戏得分、游戏排名、重新开始、返回主界面等。
2.技术要点图形处理、音频处理、基本算法、游戏逻辑、前端UI设计等。
四、开发流程1.需求分析首先要对游戏界面、游戏机制等进行详细的分析,梳理各个功能模块,并且根据分析结果来进行程序开发。
2.原型设计设计游戏UI框架,并进行渲染效果分析。
3.编码实现搭建游戏框架、实现游戏逻辑和算法,并对游戏进行调试。
4.测试调试经过编码实现后,对游戏进行测试和调试,确保游戏实现效果良好。
5.发布上线游戏开发完成后,进行打包、发布和上线操作。
五、技术要点1.图像处理:游戏中大量使用了图片素材进行操作,包括:飞机、子弹、敌机图片素材、背景图片处理等。
2.音频处理:音频处理主要用于游戏过程中背景音乐、游戏音效等相关操作。
3.基本算法:本游戏使用了几何线段相交法、多边形拐角点判断法等进行处理。
4.游戏逻辑:游戏逻辑主要包括游戏场景构建、游戏胜负判定等操作。
5.前端UI设计:游戏前端UI设计用于游戏的用户交互,即各种按钮、控件的设计和实现。
六、总结通过此次实训项目,我对游戏开发有了深入的了解和认识。
在项目的实践过程中,我逐步掌握了游戏开发的流程、技术要点等,也通过不断的学习和实践提高了自己的编程水平。
在以后的开发中,我需要更加深入的学习和掌握游戏开发中的各种技巧和实践经验,不断提高自己的编程水平和能力。
飞机大战实训报告总结
一、实训背景随着计算机技术的飞速发展,游戏开发已成为计算机科学与技术领域的一个重要分支。
为了提高学生的实践能力,加强理论知识与实际应用的结合,我们学院开展了飞机大战实训课程。
本次实训旨在让学生通过实际编程,了解并掌握游戏开发的基本流程和常用技术,培养学生的团队协作能力和创新意识。
二、实训内容1. 实训目标(1)掌握游戏开发的基本流程和常用技术;(2)熟悉游戏编程环境,提高编程能力;(3)培养团队协作能力和创新意识。
2. 实训内容(1)游戏设计:包括游戏背景、角色、场景、音效等;(2)游戏编程:使用C++、C#等编程语言进行游戏开发;(3)游戏测试:对游戏进行功能测试、性能测试和兼容性测试;(4)游戏优化:对游戏进行性能优化和用户体验优化。
三、实训过程1. 阶段一:需求分析与设计在实训初期,我们首先对飞机大战游戏进行了需求分析,明确了游戏的基本功能和性能指标。
然后,我们根据需求设计游戏的整体架构,包括游戏界面、角色、场景、音效等。
2. 阶段二:编程实现在编程实现阶段,我们采用模块化设计,将游戏分为多个模块,如游戏主界面、角色控制、敌机生成、子弹发射、碰撞检测等。
我们使用C++、C#等编程语言进行编程,实现了游戏的基本功能。
3. 阶段三:游戏测试与优化在游戏测试阶段,我们对游戏进行了功能测试、性能测试和兼容性测试,确保游戏在各个平台和设备上都能正常运行。
在游戏优化阶段,我们对游戏进行了性能优化和用户体验优化,提高了游戏的运行速度和可玩性。
4. 阶段四:团队协作与交流在实训过程中,我们注重团队协作,定期召开团队会议,讨论遇到的问题和解决方案。
我们还与其他团队交流心得,学习他们的优秀经验。
四、实训成果1. 完成了一款具有基本功能的飞机大战游戏;2. 提高了学生的编程能力和团队协作能力;3. 培养了学生的创新意识和解决问题的能力。
五、实训体会1. 理论与实践相结合:通过本次实训,我们深刻体会到理论知识与实践应用的重要性,只有将二者相结合,才能提高自己的能力。
mfc实验报告
mfc实验报告MFC实验报告引言:MFC(Microsoft Foundation Class)是一种用于开发Windows桌面应用程序的框架,它提供了丰富的类库和工具,简化了Windows应用程序的开发过程。
本文将介绍我在进行MFC实验过程中的经验和收获。
一、实验背景MFC作为一种常用的开发框架,被广泛应用于Windows平台的软件开发中。
通过学习和实践MFC,可以更好地理解Windows应用程序的开发原理和方法。
二、实验目的本次实验的目的是通过开发一个简单的MFC应用程序,掌握MFC的基本使用方法和开发流程。
同时,通过实践了解MFC的一些重要概念和特性。
三、实验过程1. 环境搭建首先,需要安装Visual Studio,选择合适的版本并按照提示进行安装。
安装完成后,打开Visual Studio,创建一个新的MFC应用程序项目。
2. 界面设计在MFC应用程序中,界面设计是一个重要的环节。
通过使用Visual Studio提供的可视化设计工具,我们可以方便地创建和布局界面元素,如按钮、文本框等。
3. 事件处理在MFC应用程序中,用户的操作往往会触发一些事件,如点击按钮、输入文本等。
我们需要编写相应的事件处理函数,来响应这些事件并执行相应的操作。
在实验中,我学会了如何编写事件处理函数,并与界面元素进行关联。
4. 数据处理在实际应用中,数据的处理是不可或缺的一部分。
通过学习MFC,我了解到如何在应用程序中进行数据的输入、输出和处理。
MFC提供了丰富的类库和接口,可以方便地进行数据操作。
5. 调试与测试在开发过程中,调试和测试是必不可少的环节。
通过使用Visual Studio提供的调试工具,我学会了如何定位和修复程序中的错误,并进行功能测试和性能测试。
四、实验结果经过一段时间的学习和实践,我成功地开发了一个简单的MFC应用程序。
该程序可以实现基本的界面显示和数据处理功能。
通过实验,我对MFC的使用有了更深入的了解,并且掌握了一些常用的开发技巧和方法。
计算机专业毕业论文-电脑游戏飞机大战的开发与设计
毕业设计(论文)题目:飞机大战游戏的设计与开发学院:计算机科学学院专业班级:电子信息科学与技术11级1班指导教师:职称:副教授学生姓名:学号:摘要飞机游戏是一款风靡全球的电视机游戏和掌上游戏机产品,曾几何时,它创造了一个无法企及的游戏巅峰,也曾影响了一代产业链。
虽然它辉煌的业绩在历史的涡轮中渐渐远去,但这款游戏每每提及,总会令人爱不释手,魂牵梦绕。
这款游戏的名字叫做飞机大战,它是运行于Windows操作系统下的一款2D 游戏,以C/C++为开发语言,构建于Microsoft Foundation Class Library(MFC)框架体系中,其中调用了部分的Win32API函数接口,在Visual Studio2010环境下开发的一款多媒体游戏。
随着硬件性能的不断提高,游戏的日益普及,使开发者不再需要过多的关注不同的硬件设备。
本论文着眼于双缓冲绘图的运用,开发出仅用于理论研究的二维平面射击类游戏。
本文首先分析了电脑游戏的发展历史,然后分析了制作游戏的基本流程和游戏本身所要包含的几种元素以及游戏应具备的游戏层次。
根据2D游戏的特点和游戏的角色,以及给用户呈现的游戏界面的特效,对2D图形技术,Windows 图形界面编程技术GDI,DirectDraw的显卡接口和DirectSound声卡接口以及MVC 设计模式下的MFC框架等技术进行了比较仔细的研究。
通过自定义一个游戏类CGame,封装了游戏元素的基本属性和行为,这样便于在用到游戏的行为操作是,只要轻松的产生CGame对象便可直接调用其方法,也有利于升级为双人游戏,乃至网络版时,只需要在该类中添加相应的行为便可。
当我们向用户呈现游戏运行的界面时,通过Timer时钟控件,映射到相应的处理函数,使得游戏界面大约每2秒钟刷新一下界面,这样才能让一张位图背景图片具有动态效果。
当使用DirectSound声卡接口时,我方和敌方相互射击所发出的声音,都是在时钟映射函数调用时处理的。
飞机大战实训报告
程序设计综合实践报告姓名学号飞机大战班级项目名称11.22—12.4实习地点实习时间实习成绩指导教师签字信息科学与工程学院2015年12月04日目录1概述 (3)2相关技术 (3)3需求分析 (7)3.1功能需求分析 (7)3.2数据需求分析 (8)3.3行为需求分析 (8)3.4其他需求 (9)4总体设计与详细设计 (10)4.1系统模块划分 (10)4.2主要功能模块 (10)4.3扩展功能设计思路 (12)4.4软件结构设计体会 (13)5编码实现 (13)6测试情况说明 (19)6.1战机移动及子弹发射模块测试 (19)6.2爆炸模块测试 (19)7. 实训中遇到的主要问题及解决方法 (20)8. 实训收获与体会 (21)9.济南参观体会 (21)1. 概述这次实训主要做的项目是飞机大战,主要实现的功能包括:战机敌机BOSS可以发射导弹,其中战机发射导弹通过键盘上的空格键发射,敌机的导弹通过判断与战机的距离来自动发射,BOSS的导弹是一直产生的,对战机进行扫射。
战机导弹与敌机相撞,战机与敌机相撞,敌机导弹与战机相撞,战机导弹与BOSS相撞,战机与BOSS相撞都能实现爆炸效果。
战机通过方向键控制自由移动且不飞出程序边界,战机具有一定的初始左右上下移动的速度,玩家可以设置战机的速度控制战机的移动。
敌机可根据随机函数随机产生,且屏幕的上下方飞入,大Boss可以随着战机移动,或者是实现自己的移动,客机从屏幕的右方向左移动,客机上载着小人,战机攻打客机可以打死小人,小人将从客机上坠落。
战机具有吃生命值的功能,游戏过程中会随机往下掉落生命值,战机吃了之后,生命值会上升。
战机具有一定的大招,使用大招时战机可以发射导弹,但是其他的不能来攻打战机,战机可以通过使用大招来进行破关。
游戏背景可以移动,这样战机相对于背景来说是相对运动的,结束界面包括游戏胜利的界面和失败的界面。
游戏有各个关卡的划分,实现达到一定的条件可以实现升级,最后到达一定程度游戏结束。
飞机大战实验报告
飞机大战实验报告专业:网络工程132班学号:姓名:孙仁强计算机科学与技术学院二零一六年十二月一、软件运行所需要的软硬件环境?本系统是以Windows系统为操作平台,用Java编程语言来实现本系统所需功能的。
?本机器的配置如下:?处理器:CORE i7?主频:1.2Hz以上?内存:4G以上?硬盘:HHD?50G编程语言:Java?开发环境:windows7?开发软件:Eclipse?Mars二、游戏流程1.用户打开游戏,进入开始菜单。
?2.用户点击开始游戏按钮,进入游戏界面;?3.用户通过触屏方式控制玩家飞机上下左右移动,躲避与子弹相撞;?4.游戏失败后,显示本次游戏得分,用的秒数和水平;?5.退出游戏三、主要代码1、准备代码设置窗口使用双缓冲使飞机不闪烁Constant设置窗口大小package com.ahut.准备代码;public class Constant {public static final int GAME_WIDTH = 350;public static final int GAME_HEIGHT = 600;}package com.ahut.准备代码;public class GameUtil {private GameUtil () {}public static Image getImage(String path) {BufferedImage bi = null;try {} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return bi;}}package com.ahut.准备代码;public class MyFrame extends Frame{public void lauchFrame() {setSize(Constant.GAME_WIDTH, Constant.GAME_HEIGHT);setLocation(100, 100);setVisible(true);new PaintThread().start();addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}private Image offScreenImage = null;public void update(Graphics g) {if (offScreenImage == null)offScreenImage = this.createImage(Constant.GAME_WIDTH, Constant.GAME_HEIGHT);Graphics gOff = offScreenImage.getGraphics();paint(gOff);g.drawImage(offScreenImage, 0, 0, null);}class PaintThread extends Thread {public void run() {while (true) {repaint();try {Thread.sleep(40);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}主代码飞机:import com.ahut.准备代码.GameUtil;public class Plane extends GameObject {private boolean left, up, right, down;private boolean live = true;public void draw(Graphics g) {if (live) {g.drawImage(img, (int)x, (int)y, null);move();}}public void addDirection(KeyEvent e) {switch (e.getKeyCode()) {case KeyEvent.VK_LEFT: //左left = true; break;case KeyEvent.VK_UP: //上up = true; break;case KeyEvent.VK_RIGHT: //右right = true; break;case KeyEvent.VK_DOWN: //下down = true; break;default: break;}}public void minusDirection(KeyEvent e) {switch (e.getKeyCode()) {case KeyEvent.VK_LEFT: //左left = false; break;case KeyEvent.VK_UP: //上up = false; break;case KeyEvent.VK_RIGHT: //右right = false; break;case KeyEvent.VK_DOWN: //下down = false; break;default: break;}}public void move() {if (left) {x -= speed;}if (right) {x += speed;}if (up) {y -= speed;}if (down) {y += speed;}}public Plane(String imgpath, double x, double y) { this.img = GameUtil.getImage(imgpath);this.width = img.getWidth(null);this.height = img.getHeight(null);this.x = x;this.y = y;}public Plane() {}public void setLive(boolean live) {this.live = live;}public boolean isLive() {return live;}}子弹:import com.ahut.准备代码.Constant;public class Bullet extends GameObject {double degree;public Bullet() {degree = Math.random() * Math.PI * 2;x = Constant.GAME_WIDTH / 2;y = Constant.GAME_HEIGHT / 2;width = 10;height = 10;}public Rectangle getRect() {return new Rectangle((int)x, (int)y, width, height);}public void draw(Graphics g) {Color oldColor = g.getColor();g.setColor(Color.yellow);g.fillOval((int)x, (int)y, width, height);x += speed * Math.cos(degree);y += speed * Math.sin(degree);if (y > Constant.GAME_HEIGHT - height || y < 30) {degree = -degree;}if (x < 0 || x > Constant.GAME_WIDTH - width) {degree = Math.PI - degree;}g.setColor(oldColor);}}游戏对象:public class GameObject {Image img;double x,y;int speed=5;int width,height;public Rectangle getRect() {return new Rectangle((int)x, (int)y, width, height);}public GameObject(Image img, double x, double y, int speed, int width,int height) {super();this.img = img;this.x = x;this.y = y;this.speed = speed;this.width = width;this.height = height;}public GameObject() {}}主线程import com.ahut.准备代码.GameUtil;import com.ahut.准备代码.MyFrame;public class PlaneGameFrame extends MyFrame {Image bg = GameUtil.getImage("image/ped.jpg");Plane p = new Plane("image/plane.png", 50, 50);ArrayList bulletList = new ArrayList();Date startTime;Date endTime;public void paint(Graphics g) {g.drawImage(bg, 0, 0, null);p.draw(g);//在这里画子弹for (int i = 0; i < bulletList.size(); i++) {Bullet b = (Bullet)bulletList.get(i);b.draw(g);//检测跟飞机的碰撞boolean peng = b.getRect().intersects(p.getRect());if (peng) {p.setLive(false);break;}}if (!p.isLive()) {int period = ((int)endTime.getTime() - (int)startTime.getTime()) / 1000; //转换成秒printInfo(g, "时间: " + period + "秒", 20, 115, 300, Color.white);switch (period / 10) {case 0:case 1:printInfo(g, "菜鸟", 40, 115, 270, Color.white);break;case 2:printInfo(g, "入门", 40, 115, 270, Color.yellow);break;case 4:printInfo(g, "精通", 40, 115, 270, Color.white);break;case 5:printInfo(g, "大师", 40, 115, 270, Color.white);break;}}// printInfo(g, "分数: 100", 10, 50, 50, Color.yellow);}public void printInfo(Graphics g, String str, int size, int x, int y, Color color) { Color c = g.getColor();g.setColor(color);Font f = new Font("宋体", Font.BOLD, size);g.setFont(f);g.drawString(str, x, y);g.setColor(c);}public void launchFrame() {uchFrame();addKeyListener(new KeyMonitor());for (int i = 0; i < 10; i++) {Bullet b = new Bullet();bulletList.add(b);}startTime = new Date();}class KeyMonitor extends KeyAdapter {@Overridepublic void keyPressed(KeyEvent e) {p.addDirection(e);}@Overridepublic void keyReleased(KeyEvent e) {p.minusDirection(e);}}public static void main(String[] args) {new PlaneGameFrame().launchFrame();}}四、游戏实现截图五、实验总结JAVA和EclipsexMars是一款非常好的面向对象开发语言和平台,通过这一段时间的JAVA程序开发,我感觉到尽管的是不同的语言和平台,开发程序一样需要动脑和努力,每一款软件或者游戏都不是一朝一夕能制作出的,都需要大量的构思和编程,学习好软件工程这门课对日后的编程很有用,最后还有繁琐的调试检查运行时的错误,通过这次接触JAVA我今后会更努力的学习它。
飞机大战实训报告---精品管理资料
目录1. 概述................................. 错误!未定义书签。
2。
相关技术 ............................ 错误!未定义书签。
2。
1碰撞检测 (2)2.2 CObList链表 (2)2。
3 设置定时器 (2)2。
4 背景滚动技术 (2)2.5 内存释放技术 (2)3. 总体设计与详细设计 ................... 错误!未定义书签。
3.1 系统模块划分 ..................... 错误!未定义书签。
3。
2 主要功能模块 .................... 错误!未定义书签。
4。
编码实现 .. (6)5. 实训中遇到的主要问题及解决方法 (49)6。
实训体会 (50)1. 概述这次实训,目的以VS 为环境,利用MFC,使用C++语言编写一个简单的飞机大战游戏 .实现的主要功能:1.有开始游戏界面,上下左右键控制飞机自由移动,空格键发射炮弹。
2.设有关卡,每打完一个boss就会过关,每过一关战机炮弹会升级,敌机随机发射子弹数量增加。
3.战机起始十条命,可以通过过关和吃到道具增加血量.4.战机子弹打中敌机,敌机就会爆炸,boss血量随关卡升高而增多,打败敌机或者boss会有分数加成.5.设有无敌模式和普通模式,无敌模式大招无限,生命无限,战机导弹直接升至最高等级。
2。
相关技术2。
1碰撞检测用CRect类的GetRect()函数可以获得当前对象的矩形区域,IntersectRect()并用此函数判断二者是否碰撞。
2.2CObList链表这个程序使用CObList链表来存储各效果.CobList类似于一个双向链表,POSITION类型的变量为链表的键。
使用POSITION变量,既可以作为链表循环中的循环变量,也可以作为标记某个位置的标签。
我们可以通过获得某元素的POSITION来访问它.本程序中主要用到的函数有:GetHeadPosition():获取链表首元素的POSITION;AddTail():将新的元素添加到链表最后;GetNext( POSITION& rPosition ):使rPosition指向下一个元素。
飞机大战
双缓冲绘图:
建立一个内存DC与设备DC,先将图 画到内存DC上,再从内存DC画到设备DC上 ,避免游戏画面闪烁。
游戏背景滚动:
从一个图片的某个位置开始截取一段 作为背景,并循环改变开始截取的位置, 实现背景的滚动显示。
CList类的使用:
对于炮弹、导弹、爆炸效果等类建立 新的list类,完成各个游戏对象的遍历,检 测,加入与删除。
敌机随机出现与移动:
通过srand(time(NULL))函数产生随机数 种子,再调用rand()%n产生n以内的正整数 来初始化敌机位置,然后调用OnTimer()函 数来改变战机位置。
敌机发射炮弹:
判断战机与该敌机是否在同一竖直 区域且在该敌机前方,是则发射炮弹。
添加爆炸效果:
如果检测到碰撞就添加爆炸效果的 一个对象,在爆炸效果类中有一个标志, 保证爆炸效果产生8次,否则返回失败,并 删除该对象,释放内存空间。
相对于用数组来完成更加方便,高效 ,节省内存空间。
在实训中,许多功能的实现并不是一 下子就能完成的,需要查阅资料学习,通 过这次实训学到了很多编程技巧,同时也 复习了以前的知识。
刚开始写游戏时,感觉无从下手,等 到真的去做也感觉并没有那么困难,解决 一个的问题就会有一种成就感。
Thank you!
物联网工程13-2 李万 学号:201301052208
信息科学与工程学院 2014年12月
项目简介:本次实训项目是做 一个飞机大战游戏,运用的主要技 术是MFC编程中的一些函数,链表 的思想等。
基本功能:
1). 战机移动 2). 敌机随机出现 3). 碰撞检测 4). 爆炸效果 5). 关卡 6). 音效
战机的移动是通过OnKeyDown函数以 及OnKeyUp函数记录标志,在OnTimer函数 中实现。
飞机大战游戏设计实验(山科大)
程序设计综合实践报告姓名学号班级计算机科学与技术项目名称飞机大战游戏设计实验实习地点实习时间实习成绩指导教师签字信息科学与工程学院2015年7月25日目录1. 概述 (3)2. 相关技术 (3)2.1CObList链表 (3)2.2获取矩形区域函数 (3)2.3添加爆炸效果函数 (4)2.4弹出对话框函数 (4)2.5字体的输出 (4)2.7游戏隐形模式的实现 (4)2.8设置定时器 (4)2.9双缓冲技术 (5)2.10滚屏的实现 (5)3. 总体设计与详细设计 (5)3.1 系统模块划分 (5)3.2 主要功能模块 (6)4. 编码实现 (6)5. 实训中遇到的主要问题及解决方法 (24)6. 实训体会 (24)1. 概述飞机大战游戏是在Microsoft Visual Studio编程软件的MFC环境下制作的一款桌面游戏,界面简洁流畅、游戏方式简单。
游戏主要实现的功能和规则如下:(1)利用键盘中的上下左右键控制我方战机,空格键发射子弹。
战机生命值初始为5,血量初始值为100。
(2)屏幕上方随机产生敌机,战机产生的数量和当前玩家的等级有关,等级越高,产生的敌机越多,游戏难度越大。
而且敌机产生的位置和速度是不确定的。
只有当我机位于敌机下方时,敌机才会产生子弹,默认情况下是不发射任何子弹的。
(3)每个关卡都会产生BOSS,BOSS横向移动,生命值200。
战机和BOSS同时存在时,BOSS发射子弹。
(4)战机子弹打中敌机,敌机就会爆炸,同时玩家分数会增加1分,战机子弹打中BOSS,BOSS生命值减1,每得100分并且杀死BOSS过关。
2. 相关技术2.1CObList链表在本程序中使用了CObList链表来分别存储敌机,炸弹,导弹,爆炸效果。
CobList类似于一个双向链表,POSITION类型的变量为链表的键。
使用POSITION变量,既可以作为链表循环中的循环变量,也可以作为标记某个位置的标签。
c飞机大战实训报告
实训报告飞机大战游戏设计与开发姓名:陆再旺专业名称:___数字媒体技术___________班级:______2011级__________________ 学号:___201101051114____________信息科学与工程学院二零一三年十二月目录1. 项目概述 ····················································错误!未定义书签。
2. 相关技术 ····················································错误!未定义书签。
2.1透明贴图技术 ················································错误!未定义书签。
实训报告飞机大战概述
一、实训背景随着计算机技术的飞速发展,游戏行业逐渐成为了一个充满活力的产业。
为了提升学生的编程能力和实践技能,信息科学与工程学院开展了“飞机大战游戏的设计与实现”实训项目。
本报告旨在对此次实训进行概述,分析实训过程中的关键技术、需求分析、系统设计以及遇到的问题与解决方案。
二、实训目的通过本次实训,学生能够:1. 掌握游戏开发的基本流程和方法。
2. 熟悉并运用多种编程技术,如透明贴图、按键处理、定时控制、双缓冲技术等。
3. 培养团队合作精神,提高问题解决能力。
4. 激发创新思维,提升个人综合素质。
三、实训内容1. 基本功能要求:- 运用透明贴图技术,实现战机和敌机的对战效果。
- 通过按键处理,控制战机的移动和射击。
- 利用定时器技术,控制游戏节奏和敌机生成速度。
- 采用双缓冲技术,避免画面闪烁,提升游戏体验。
2. 扩展功能:- 实现双人对战模式,提高游戏趣味性。
- 引入游戏积分制,激励玩家不断挑战自我。
- 添加声音效果,增强游戏沉浸感。
- 设计多种子弹类型,丰富游戏玩法。
- 设置客机类型,增加游戏难度。
- 设计游戏关卡,提升游戏连贯性。
- 引入多种类型敌机,增强游戏挑战性。
- 实现游戏中间结果存储,方便玩家查看。
四、相关技术1. 滚动背景技术:通过复制背景图片,实现背景的连续滚动,增强游戏场景的逼真感。
2. 透明贴图技术:将无关颜色设置为透明,使移动元素更加贴合背景,提升视觉效果。
3. 定时器技术:控制游戏节奏和敌机生成速度,保证游戏平衡性。
4. 双缓冲技术:避免画面闪烁,提升游戏流畅度。
5. 连续按键处理技术:实现战机的快速移动和射击。
6. 碰撞处理技术:检测战机与敌机、子弹之间的碰撞,实现游戏效果。
7. 链表存储技术:存储游戏中的各种元素,如敌机、子弹等。
8. 动态效果技术:实现爆炸、子弹发射等动态效果,增强游戏趣味性。
五、需求分析1. 功能需求分析:明确游戏的基本功能和扩展功能,为系统设计提供依据。
飞机大战游戏设计与实现
程序设计综合实践报告姓名学号班级项目名称飞机大战游戏设计与实现实习地点计算机实验室实习时间2015-12-9至2015-12-19实习成绩指导教师签字信息科学与工程学院2015年12月20日目录1. 概述项目:飞机大战主要功能有以下几点:关卡设置本次飞机大战游戏中共设置了四个关卡,第一关的难度设置较低,仅有敌机对其进行攻击;第二关在原有的基础上增加一些补血的小道具,当积分达到一定的时候便会出现该道具,并且敌机出现的频率也比第一关高;第三关在第二关的基础上新出现了小boss,并增加了其他的道具;第四关在第三关的基础上再新出现大boss,当积分达到要求以及大boss被消灭后通关成功。
敌机设置小敌机随机出现,炮弹也随机发射,当小敌机与战机相撞或被战机的子弹击中时,小敌机消失。
当达到一定积分时,小boss出现并随机发射出与小敌机一样的炮弹,但是炮弹分三个方向发射出。
当小boss被战机的子弹击中或与战机相撞时失去5滴血。
当到达四关并且积分足够多时出现大boss,同小boss一样,当大boss与战机相撞或被战机子弹击中时失去1滴血。
除此之外,小boss和大boss上方都有血条显示,当血条消失时意味着生命消失,大boss和小boss消失。
小boss会在屏幕上随机出现和走动出了屏幕后会在屏幕的任意地方再随机出现,直至血量为0消失。
大boss则在屏幕中随机走动不出屏幕,直至血量为0消失。
战机设置战机初始有五条生命,每条命的血量为50,所获得的积分以及其生命值、血条都在窗口的左上角显示。
在第一、二关时,按空格键战机会出现两个向上发射的炮弹,到第三、四关的时候,按空格键战机会发射三个不同方向的炮弹。
战机吃到药瓶道具时血量会增加20,但不可以超过50;吃到闪电道具时,便可放大招,放大招的次数为15。
当战机被敌方的炮弹击中或与敌方相撞时,血量减少,减少为0时生命值减1,直至生命值为0。
游戏设置进入游戏时,会有背景音乐,窗口左上角显示战机所得积分及其生命值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实训报告飞机大战游戏设计与开发目录1. 概述 (4)2. 相关技术 (4)2.1 透明贴图技术 (4)2.2 CObList链表 (4)2.3获取矩形区域函数 (4)2.4弹出对话框函数 (5)2.5字体的个性化输出函数 (5)2.6设置定时器 (5)2.7双缓冲技术 (5)2.8 内存释放技术 (6)2.9对话框中添加动态按钮 (6)2.10检测方向键按下 (6)3. 需求分析(用结构化方法或面向对象方法给出系统的主要需求模型) (6)3.1功能需求分析 (6)3.2 数据需求分析 (7)3.3 行为需求分析 (7)3.4 其他需求 (8)4. 总体设计与详细设计 (8)4.1 系统模块划分 (9)4.2 主要功能模块 (10)4.3 扩展功能设计思路 (10)5. 编码实现 (11)5.1游戏初始创建 (11)5.2定时器 (11)5.3背景及游戏开始、结束界面绘制函数 (11)5.4键盘控制函数 (12)5.5游戏对象进行碰撞测试和碰撞销毁 (13)5.6创建动态按钮(开始游戏、游戏规则) (13)5.6重新开始游戏代码 (14)5.7设置游戏难度代码 (14)5.8游戏结束时释放资源函数 (15)5.9调整对话框大小函数 (15)5.10开始界面背景绘制函数 (15)5.11选择下一关卡以及选择完成后的执行代码 (16)6.测试情况说明。
(17)6.1主要模块测试情况(白盒) (17)6.11各游戏对象碰撞检测爆炸模块测试 (17)6.12战机导弹的方向速度模块测试 (17)6.13文字显示,游戏结束和关卡进入模块测试 (18)6.14设置游戏难度和重新开始模块测试 (18)6.2 主要功能测试情况(黑盒) (18)6.21各游戏对象碰撞检测爆炸模块测试 (18)6.22敌机子弹导弹的方向速度模块测试 (19)6.23文字显示,游戏结束和关卡进入模块测试 (19)6.24设置游戏难度和重新开始模块测试 (19)7. 实训中遇到的主要问题及解决方法 (19)8. 实训收获与体会 (20)1. 概述本次实训主要是做一个基于windows的飞机大战单机版游戏,其实现的主要功能为:控制战机对象的移动,敌机对象的随机出现和发射子弹,实现游戏对象的爆炸特效,文字提示功能和界面背景切换特效,其主要是遵循开发者规定的游戏规则进行游戏闯关。
游戏主要角色:战机、敌机、战机导弹、敌机子弹、客机、导弹架、生命包,其中战机分为四种:普通战机,一级战机,二级战机。
其主要遵循的游戏规格如下:战机数量为1;由玩家通过键盘控制(方向键控制位置、‘Z’键发射导弹)战机,战机有一定的运行速度;导弹释放存在间隔,有一定的运行速度;导弹遇到敌机发生爆炸,敌机被炸毁,导弹消失,玩家得分;由计算机控制敌机自动向战机发动攻击;敌机数量随机,计算机生成敌机时随机选择类别;普通敌机从游戏区域的上下两端进入位置随机;敌机行驶期间,不左右移动,不反向移动;运行线路为直线,方向为从下至上,或从下至上,不可左右移动;战机导弹击毁敌机后有一定几率掉落导弹架和生命包,导弹架可以增加战机导弹数量,生命包可以增加战机生命。
每关有boss从游戏区域的左上角端进入,左右位置随机;敌机行驶期间,可左右移动,可反向移动;当敌机到达战机下方时发射炸弹对战机进行攻击。
炸弹纵向由发射位置起至游戏区域结束;炸弹遇到战机时发生爆炸,战机减生命值,炸弹消失;战机与boss碰撞,战机被毁,游戏结束;炸弹运行时有速度限制;客机在游戏界面左上角出现,又左向右运动,客机上有油箱,导弹击中客机油箱客机爆炸并消失,玩家减分。
当玩家战机生命值为0时,游戏结束,并显示玩家得分。
2. 相关技术此次实训的飞机大战游戏其中的技术主要就是一些API函数、内存释放和双缓冲技术。
2.1 透明贴图技术此次实训中用于贴图的函数:LoadImage(CImageList& imageList,UINT bmpID,COLORREF crMask,int cx,int cy,int nInitial) //此函数主要用于将图片放入图像链表imageList中。
img_Bomb1.Draw(pDC,0,G_pos,ILD_TRANSPARENT) //此函数主要是讲img_Bomb1链表中的图像显示在pDC这个句柄中。
ILD_TRANSPARENT表示是透明贴图。
其中主要就是CImageList图像列表。
它是相同大小图像的一个集合,每个集合中均以0为图像的索引序号基数,图像列表通常由大图标或位图构成,其中包含透明位图模式。
可以利用WINDOWS32位应用程序接口函数API来绘制、建立和删除图像,并能实现增加、删除、替换和拖动图像等操作。
2.2 CObList链表CObList bomblist; //主要是定义一个CObList类的一个链表对象用于存储所有的此种相关的对象,易于后续的添加删除和提取数据。
POSITION posball=NULL,posball_t=NULL; //定义指针CBomb *temp = new CBomb();temp=pDoc->bomblist.GetHeadPosition();//指针读取头结点temp= (CBomb *)pDoc->bomblist.GetNext(posball); //指针读取下一个结点2.3获取矩形区域函数CRect rc; //定义GetClientRect(&rc); //获取其矩形区域获取结果课为:rc.Width() //矩形区域的宽度rc.Height() //矩形区域的高度CRect tmpRect;tmpRect.IntersectRect(&bRect,eRect))//判断两个矩形是否有交接2.4弹出对话框函数if(AfxMessageBox(L"是否进入下一关?",MB_YESNO)==6){}//此函数主要是弹出对话框供用户进行选择,当用户点击确定按钮时执行此函数的{}内的语句进行继续运行。
2.5字体的个性化输出函数MemDC.SetBkMode(TRANSPARENT);MemDC.SetTextColor(RGB(0, 0, 0));CFont font;//创建一个字体对象;LOGFONT lf;memset(&lf, 0, sizeof(LOGFONT));lf.lfHeight = 40;lf.lfWidth = 20;//设置字的高度和宽度;font.CreateFontIndirect(&lf);// HFONT CreateFontIndirect(CONST LOGFONT *lplf);MemDC.SelectObject(font);char strData[100];sprintf_s(strData, 20, "得分:%d", pDoc->score);MemDC.TextOut(260, 350, (CString)strData);//在对话框中显示strData里的字;2.6设置定时器定时器告诉WINDOWS一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。
通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数。
SetTimer(1,30,NULL); //设置每30毫秒刷新一次2.7双缓冲技术关于双缓冲技术主要就是利用缓存的原理进行将所有的东西都先存在一个缓冲得虚拟的区域,然后再一次性的将所有的虚拟缓存中的东西都放入实在的存储器中。
CDC MemDC; //首先定义一个显示设备对象CBitmap MemBitmap;//定义一个位图对象//随后建立与屏幕显示兼容的内存显示设备MemDC.CreateCompatibleDC(NULL);//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);//将位图选入到内存显示设备中CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);//先用背景色将位图清除干净MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));//绘图MemDC.MoveTo(……);MemDC.LineTo(……);//将内存中的图拷贝到屏幕上进行显示pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);//绘图完成后的清理MemBitmap.DeleteObject();MemDC.DeleteDC();2.8 内存释放技术在此次实训项目中有太多的对象的生成和运用,造成了内存的极度的紧张,当游戏进行到一定的程度的时候就会出现内存溢出现象。
解决此问题的技术就是内存释放。
内存释放技术的实现主要是通过释放各个满足一定条件的对象和链表来实现的,pDoc->bomblist.RemoveAt(mPos2);//用于删除指针delete pDoc->Bomb;//用于删除对象2.9对话框中添加动态按钮ID号是控件的标识,创建控件前必须先为它设置一个ID号。
打开资源中的“String Table”,在空白行上双击鼠标,这时会弹出一个ID属性对话框,在其中的ID编辑框中输入ID,如:IDC_MYBUTTON,在Caption中输入控件标题或注解然后用CButton *p_MyBut = new CButton();创建一个CButton类的普通按钮。
再然后在CSpaceWarView中添加响应函数,在头文件中添加函数定义,编写消息响应函数,最后回收资源2.10检测方向键按下使用SHORT GetKeyState(int nVirtKey)函数检测方向键是否按下。
该函数检取指定虚拟键的状态。
该状态指定此键是UP状态,DOWN状态,还是被触发的(开关每次按下此键时进行切换)。
3. 需求分析(用结构化方法或面向对象方法给出系统的主要需求模型)3.1功能需求分析1、战机数量为1,战机的位置可通过键盘(方向键和游戏常用键均可进行控制战机的位置)。
可通过‘Z’键控制战机进行发导弹,战机导弹有一定的数量限制,发射完固定数量的导弹后便不能在发射导弹,导弹具有一定的速度。
2、敌机出现的时间和位置均为随机,敌机的速度,敌机发射子弹的时间可以再难度设置更改,子弹的发射具有延时性,子弹的速度具有随机性。
3、导弹和子弹及敌机碰撞爆炸同时销毁碰撞的物体,战机和子弹及敌机碰撞爆炸同时销毁碰撞的子弹及敌机,战机则判断生命,为0时游戏结束否则继续。