飞机大战实训报告

合集下载

飞机大战游戏设计与实现

飞机大战游戏设计与实现

程序设计综合实践报告信息科学与工程学院2015年12月20日目录1. 概述 (1)1.1 关卡设置 (1)1.2 敌机设置 (1)1.3 战机设置 (2)1.4 游戏设置 (2)2. 相关技术 (2)2.1 Windows定时器技术 (2)2.2 双缓冲技术 (3)2.3 获取矩形区域 (3)3. 总体设计与详细设计 (3)3.1 系统模块划分 (3)3.2 主要功能模块 (4)4. 编码实现 (4)4.1 初始准备 (4)4.2 战机对象 (6)4.3 敌机对象 (8)4.4 道具对象 (9)4.5 主要内容 (10)4.6 窗口显示信息 (19)5. 实训中遇到的主要问题及解决方法 (20)5.1 产生中断及解决方案 (20)5.2 图片闪烁问题及解决方案 (20)6. 实训体会 (22)飞机大战游戏设计与实现1. 概述项目:飞机大战主要功能有以下几点:1.1 关卡设置本次飞机大战游戏中共设置了四个关卡,第一关的难度设置较低,仅有敌机对其进行攻击;第二关在原有的基础上增加一些补血的小道具,当积分达到一定的时候便会出现该道具,并且敌机出现的频率也比第一关高;第三关在第二关的基础上新出现了小boss,并增加了其他的道具;第四关在第三关的基础上再新出现大boss,当积分达到要求以及大boss被消灭后通关成功。

1.2 敌机设置小敌机随机出现,炮弹也随机发射,当小敌机与战机相撞或被战机的子弹击中时,小敌机消失。

当达到一定积分时,小boss出现并随机发射出与小敌机一样的炮弹,但是炮弹分三个方向发射出。

当小boss被战机的子弹击中或与战机相撞时失去5滴血。

当到达四关并且积分足够多时出现大boss,同小boss一样,当大boss与战机相撞或被战机子弹击中时失去1滴血。

除此之外,小boss和大boss上方都有血条显示,当血条消失时意味着生命消失,大boss和小boss 消失。

小boss会在屏幕上随机出现和走动出了屏幕后会在屏幕的任意地方再随机出现,直至血量为0消失。

飞机大战实训报告

飞机大战实训报告

飞机大战实训报告作为一款经典的游戏,《飞机大战》已经深入人心,对于爱好游戏开发的人来说,掌握它的制作方法有助于提升自己的技能和经验。

在我的实训项目中,我选择了制作一款《飞机大战》游戏,下面是我的实训报告。

一、前期准备在开始制作游戏之前,我首先进行了一些前期准备,包括学习游戏开发工具和游戏设计思路的设计。

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上。

c++实训报告(飞机大战)

c++实训报告(飞机大战)
2. 相关技术
此次实训的飞机大战游戏其中的技术主要就是一些函数、内存释放和双缓冲技术。
2.1 透明贴图函数(技术一的名称)
此次实训中用于贴图的函数: LoadImage(CImageList& imageList,UINT bmpID,COLORREF crMask,int cx,int cy,int nInitial) //此函数主要用于将图片放入图像链表 imageList 中。 img_Bomb.Draw(pDC,0,m_m_ptPos,ILD_TRANSPARENT) // 此 函 数 主 要 是 讲 img_Bomb1 链表中的图像显示在 pDC 这个句柄中。ILD_TRANSPARENT 表示是透明贴图。 其中主要就是 CImageList 图像列表。它是相同大小图像的一个集合,每个集合中均以 0 为 图像的索引序号基数,图像列表通常由大图标或位图构成,其中包含透明位图模式。可以利 用 WINDOWS32 位应用程序接口函数 API 来绘制、建立和删除图像,并能实现增加、删除、替 换和拖动图像等操作。
3
信息科学与工程学院软件实践实训报告
2.3 获取矩形区域函数
CRect rc; //定义 GetClientRect(&rc); // 获 取 其 矩 形 区 域 获 取 结 果 课 为 : rc.Width() // 矩 形 区 域 的 宽 度
rc.Height() //矩形区域的高度 CRect tmpRect; tmpRect.IntersectRect(&bRect,eRect))//判断两个矩形是否有交接
实训报告
飞机大战游戏设计与开发
专业名称:__________ ____________

级:__________________

程序设计综合实践 飞机大战 实训报告

程序设计综合实践 飞机大战 实训报告

[在此处键入]实训报告飞机大战游戏设计与开发专业名称:班级:学号:信息科学与工程学院二零一八年七月目录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. 第一天的实训主要是了解飞机大战游戏的基本操作和规则,包括如何控制飞机移动和射击,如何进行升级和购买武器等。

2. 在第二天的实训中,我们开始进行游戏的各种模式练习,了解不同模式的特点和游戏策略。

3. 第三天的实训中,我们开始进行组队游戏,分工合作,制定战术,更好地完成各种任务和挑战。

4. 在第四天的实训中,我们开始进行实际的比赛,与其他小组进行对抗,锻炼自己的竞技能力和团队合作能力。

5. 第五天的实训中,我们对比赛过程中出现的问题进行了总结和反思,分析自己的不足之处,制定下一步的改进方案。

6. 经过一周的实训,我们的游戏水平和团队合作能力都有了很大提高,已经能够独立完成各种任务和挑战。

7. 在实训过程中,我发现自己最大的问题是对游戏策略的理解不够深刻,需要更加努力的学习和实践。

8. 实训期间我们也注意到一些游戏中的问题和难点,需要更加深入的学习和研究,为今后的游戏发展提供更好的思路和方案。

9. 最后的比赛让我们深刻认识到团队合作和个人能力的重要性,大家都非常努力地为团队争取胜利,这样的经历让我们受益匪浅。

10. 在未来的实践过程中,我们希望能够更加深入地学习飞机大战游戏的各种技巧和策略,为团队的发展和个人能力的提升做出更多的努力。

飞机大战课设报告

飞机大战课设报告

飞机大战课设报告飞机大战是一款经典的游戏,也是计算机科学中常见的课设项目之一。

在这个项目中,我们需要设计一个能够实现基本飞机大战功能的程序,包括游戏场景,敌人飞机,玩家飞机以及子弹等元素。

在本文中,我们将介绍飞机大战的实现原理以及我们的设计思路。

一、游戏场景的实现游戏场景是飞机大战中最基本的元素之一。

我们需要在程序中创建一个游戏窗口,用于展示游戏场景。

在窗口中,我们需要绘制背景图像,以及玩家飞机和敌人飞机等元素。

为了实现更加真实的游戏体验,我们还可以添加背景音乐和音效。

二、敌人飞机的实现在飞机大战中,敌人飞机是玩家需要消灭的目标。

我们需要在程序中创建敌人飞机,并控制其在游戏场景中的运动轨迹。

为了增加游戏难度,我们可以让敌人飞机在不同的高度和速度上运动,同时还可以添加不同种类的敌人飞机,例如飞行速度更快或者攻击力更强的飞机。

三、玩家飞机的实现玩家飞机是游戏中最重要的元素之一。

我们需要在程序中创建玩家飞机,并控制其在游戏场景中的运动轨迹。

为了让玩家更好地操作飞机,我们还可以添加键盘控制功能,例如向上或向下移动、向左或向右转向等。

四、子弹的实现子弹是玩家攻击敌人飞机的主要武器。

我们需要在程序中创建子弹,并控制其在游戏场景中的运动轨迹。

为了增加游戏体验,我们还可以添加不同种类的子弹,例如攻击力更强或者射程更远的子弹。

五、游戏逻辑的实现游戏逻辑是飞机大战中最重要的部分之一。

我们需要实现游戏的开始和结束逻辑,例如游戏开始前的介绍页面和游戏结束后的排名页面。

同时,在游戏过程中,我们还需要实现敌人飞机的生成和移动、玩家飞机的控制和移动、子弹的生成和移动以及碰撞检测等功能。

六、总结在本文中,我们介绍了飞机大战的实现原理以及我们的设计思路。

通过以上的步骤,我们可以实现一个基本的飞机大战游戏,并在程序中添加更多的功能和元素,以实现更加完整的游戏体验。

飞机大战不仅仅是一款游戏,更是一个综合性的课设项目,可以让我们更好地掌握计算机科学中的相关知识。

飞机大战游戏课程设计报告

飞机大战游戏课程设计报告

飞机大战游戏课程设计报告一、课程目标知识目标:1. 学生能理解并掌握编程语言的基本语法和结构,如变量、循环、条件语句等。

2. 学生能运用所学的编程知识,设计和开发一个简单的“飞机大战”游戏。

3. 学生能理解游戏设计中的数学原理,如坐标系统、碰撞检测等。

技能目标:1. 学生能够运用编程工具(如Scratch或Python等)进行游戏设计和开发,提高编程实践能力。

2. 学生通过团队协作,培养沟通与协作能力,学会共同解决问题。

3. 学生能够运用创新思维,设计和优化游戏功能,提高游戏的可玩性和趣味性。

情感态度价值观目标:1. 学生培养对计算机编程的兴趣和热情,激发学习动力。

2. 学生在游戏设计和开发过程中,培养自信心和成就感,增强自主学习能力。

3. 学生通过游戏设计,体会团队合作的重要性,学会尊重他人,培养良好的团队精神。

课程性质:本课程为信息技术学科,以实践为主,注重培养学生的动手能力和创新思维。

学生特点:五年级学生,对新鲜事物充满好奇心,具备一定的逻辑思维能力,喜欢动手操作。

教学要求:教师应引导学生通过自主学习、合作探究的方式,完成游戏设计和开发任务,关注学生的学习过程,及时给予反馈和指导,提高学生的综合素质。

在教学过程中,将课程目标分解为具体的学习成果,以便于教学设计和评估。

二、教学内容本课程教学内容依据课程目标进行选择和组织,主要包括以下几部分:1. 编程基础知识:- 变量的定义和使用- 常用的数据类型- 程序流程控制(条件语句、循环语句)- 函数的定义和调用2. 游戏设计原理:- 游戏的基本元素(玩家、敌人、子弹等)- 坐标系统与运动控制- 碰撞检测与游戏逻辑3. 编程工具与操作:- Scratch或Python编程环境的使用- 图形和角色的绘制与导入- 事件处理与声音效果的应用4. 项目实践:- 设计并开发“飞机大战”游戏- 团队合作与分工- 游戏测试与优化教学内容安排和进度:第一课时:介绍编程基础知识和游戏设计原理,让学生了解课程目标和要求。

飞机大战实训报告

飞机大战实训报告

程序设计综合实践实习报告学院名称专业班级学生姓名学号指导教师山东科技大学一、实习题目:飞机大战游戏的设计与实现二、实习时间: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. 理论与实践相结合:通过本次实训,我们深刻体会到理论知识与实践应用的重要性,只有将二者相结合,才能提高自己的能力。

飞机大战实训报告

飞机大战实训报告

程序设计综合实践报告姓名学号飞机大战班级项目名称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.准备代码;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.IOException;import .URL;public class GameUtil {private GameUtil () {}public static Image getImage(String path) {BufferedImage bi = null;try {URL u = GameUtil.class.getClassLoader().getResource(path);bi = javax.imageio.ImageIO.read(u);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return bi;}}package com.ahut.准备代码;import java.awt.Frame;import java.awt.Graphics;import java.awt.Image;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;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();}}}}}主代码飞机:package com.ahut.plane;import java.awt.Graphics;import java.awt.event.KeyEvent;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;}}子弹:package com.ahut.plane;import java.awt.Color;import java.awt.Graphics;import java.awt.Rectangle;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);}}游戏对象:package com.ahut.plane;import java.awt.Image;import java.awt.Rectangle;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() {}}主线程package com.ahut.plane;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.util.ArrayList;import java.util.Date;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我今后会更努力的学习它。

飞机大战总结

飞机大战总结

江西理工大学应用科学学院个人实习总结实习类型教学实习 _实习单位智游教育 _实习题目飞机大战 _指导教师看看 _所在院系信息工程系 _班级电子信息122班 _姓名看看 _学号 12345678988 _一、实习时间和地点时间:2015.06.25-2014.07.05地点:1栋1503二、实习的内容1、介绍本次实习制作的飞机大战游戏是在VMware Workstation 10软件的虚拟机ios环境下制作的一款桌面游戏,界面简洁流畅、游戏方式简单。

2、流程图3、功能概述①实现闪屏。

游戏运行前先显示一张图片,图片显示一段时间然后消失,接着游戏开始启动。

②实现游戏背景。

游戏运行时背景不断下落。

③实现敌机。

敌机随机产生,数量不定,以随机的速度从主屏幕上方下落,当子弹击中敌机,敌机爆炸消失。

④实现主机。

主机只有一架,由鼠标控制移动,移动过程中鼠标击中点始终主机的中心点重合。

⑤实现子弹。

子弹由主机发出,数量不定,连续产生,若子弹飞出主屏幕则自动消失,若子弹击中敌机子弹消失。

4、变量声明①背景变量:bgImgv 和bgImgv1UIImageView * bgImgv ;UIImageView * bgImgv1 ;bgImgv 和bgImgv1是两张背景图片,利用两张图片的交替变化实现背景图片不断下落。

②敌机变量:djArray 、dj 、count 、vx 、vyNSMutableArray * djArray ;DjImageView * dj = [[DjImageView alloc] init] ;Static int count;Float vx ; float vy ;djArray是储存敌机的数组;dj是敌机这个对象;count是计数变量用来生成敌机;vx是敌机的横向速度,vy是敌机的纵向速度。

③主机变量:fjFXQImageView * fj ;fj是主机这个对象。

④子弹变量:zdArray 、count 、zd 、NSMutableArray * zdArray ;Static int count;zdImageView * zd = [[zdImageView alloc] init] ;zdArray是储存子弹的数组;zd是子弹这个对象;count是计数变量用来生成子弹。

c语言飞机大战实践报告

c语言飞机大战实践报告

c语言飞机大战实践报告C语言飞机大战实践报告引言:飞机大战是一款经典的游戏,它让玩家扮演一架战斗机,在天空中与敌人进行激烈的战斗。

本报告将详细介绍我们实践过程中所采取的步骤和方法,以及所遇到的挑战和解决方案。

第一部分:项目准备在开始编写代码之前,我们首先进行了项目准备工作。

我们使用C语言作为开发语言,并使用了一个基本的图形库来实现游戏画面的显示。

我们选择了一个简单的控制台窗口来作为游戏的界面,这样我们可以利用图形库提供的函数来绘制游戏场景和玩家的飞机。

第二部分:项目架构在开始编写代码之前,我们进行了项目架构的设计。

我们将游戏分为几个模块,每个模块负责不同的功能。

首先是游戏引擎模块,它负责处理游戏的主流程,包括初始化游戏界面、接收用户输入、更新游戏状态和绘制游戏画面。

然后是游戏逻辑模块,它负责实现游戏的逻辑规则,比如玩家和敌人的移动、碰撞检测和计分等。

最后是图形绘制模块,它负责将游戏逻辑模块的数据转换成图形数据,并在界面上进行绘制。

第三部分:编写代码在完成项目架构设计后,我们开始编写代码。

首先是游戏引擎模块的实现,我们使用了一个循环来不断更新游戏状态和绘制游戏画面。

然后是游戏逻辑模块的实现,我们使用了一些基本的算法来处理玩家和敌人的移动和碰撞检测。

最后是图形绘制模块的实现,我们使用了图形库提供的函数来实现游戏画面的绘制。

第四部分:调试和优化在完成代码编写后,我们进行了调试和优化工作。

我们通过测试不同的输入和场景来验证代码的正确性,并修复了一些错误和bug。

此外,我们还尝试优化代码的性能,使游戏的运行更加流畅和稳定。

第五部分:心得体会通过这次实践,我们学到了很多关于C语言和游戏开发的知识。

我们了解到C语言是一种非常强大和灵活的编程语言,可以用来实现各种不同的应用程序。

同时,我们也体会到了游戏开发的复杂性和挑战性,需要综合运用各种不同的技术和算法来实现一个完整的游戏。

结论:通过这次实践,我们成功地完成了一款简单的C语言飞机大战游戏。

飞机大战实训报告

飞机大战实训报告

目录1. 概述..................................................1. 概述这次实训,目的以VS 为环境,利用MFC,使用C++语言编写一个简单的飞机大战游戏。

实现的主要功能:1.有开始游戏界面,上下左右键控制飞机自由移动,空格键发射炮弹。

2.设有关卡,每打完一个boss就会过关,每过一关战机炮弹会升级,敌机随机发射子弹数量增加。

3.战机起始十条命,可以通过过关和吃到道具增加血量。

4.战机子弹打中敌机,敌机就会爆炸,boss血量随关卡升高而增多,打败敌机或者boss会有分数加成。

5.设有无敌模式和普通模式,无敌模式大招无限,生命无限,战机导弹直接升至最高等级。

2. 相关技术碰撞检测用CRect类的GetRect()函数可以获得当前对象的矩形区域, IntersectRect()并用此函数判断二者是否碰撞。

CObList链表这个程序使用CObList链表来存储各效果。

CobList类似于一个双向链表,POSITION 类型的变量为链表的键。

使用POSITION变量,既可以作为链表循环中的循环变量,也可以作为标记某个位置的标签。

我们可以通过获得某元素的POSITION来访问它。

本程序中主要用到的函数有:GetHeadPosition():获取链表首元素的POSITION;AddTail():将新的元素添加到链表最后;GetNext( POSITION& rPosition ):使rPosition指向下一个元素。

设置定时器SetTimer()函数来设置定时器。

背景滚动为了让游戏场景更加逼真,游戏节奏更加合理,可以通过让背景滚动来提高游戏的场景效应,实现这一技术时,可以将一张背景图片复制为2张,从上到下连续的拼接在一起,使其不会出现图片的卡顿和瞬移现象。

内存释放技术这个程序中有大量的地方需要使用内存,如果不及时删除会出现闪图等情况,容易导致程序崩溃,要及时释放内存资源。

Java算法实训(飞机大战)实验报告

Java算法实训(飞机大战)实验报告

淮阴工学院实验报告2016 ------- 2017 学年第 1 学期学院计算机与软件工程学院课程名称算法实训班级达内1151学号 1151331134姓名陈龙指导教师达内讲师算法实训实验报告一、实训目的及意义进一步了解java开发的相关知识,掌握java开发的基本技术,丰富java 开发的实战经验。

学习java的基础知识及正确的运用方法,和有用的相关技术,提高自己的工作效率。

通过实习,巩固大二所学专业的基本知识,提高分析、判断和处理实际问题的能力,锻炼自己的实际动手能力,增强自己的团队协作意识,了解软件开发的思考角度和主要流程。

为毕业之后能够更快地进入工作状态并且能够更好的工作,打好一定的基础。

二、实训任务实习期间,通过学习一个简单的Java程序——飞机大战,了解和掌握Java 编程的基础,如构造器、API接口等。

最后可以独立完成一个小程序。

三、实习训语言Java的特点1.Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。

另一方面,Java丢弃了C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。

特别地,Java 语言不使用指针,并提供了自动的废料收集,不必为内存管理而担忧。

2、Java语言是一个面向对象的Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。

Java语言全面支持动态绑定,而C++ 语言只对虚函数使用动态绑定。

总之,Java语言是一个纯的面向对象程序设计语言。

3、Java语言是分布式的Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。

实训报告飞机大战概述

实训报告飞机大战概述

一、实训背景随着计算机技术的飞速发展,游戏行业逐渐成为了一个充满活力的产业。

为了提升学生的编程能力和实践技能,信息科学与工程学院开展了“飞机大战游戏的设计与实现”实训项目。

本报告旨在对此次实训进行概述,分析实训过程中的关键技术、需求分析、系统设计以及遇到的问题与解决方案。

二、实训目的通过本次实训,学生能够:1. 掌握游戏开发的基本流程和方法。

2. 熟悉并运用多种编程技术,如透明贴图、按键处理、定时控制、双缓冲技术等。

3. 培养团队合作精神,提高问题解决能力。

4. 激发创新思维,提升个人综合素质。

三、实训内容1. 基本功能要求:- 运用透明贴图技术,实现战机和敌机的对战效果。

- 通过按键处理,控制战机的移动和射击。

- 利用定时器技术,控制游戏节奏和敌机生成速度。

- 采用双缓冲技术,避免画面闪烁,提升游戏体验。

2. 扩展功能:- 实现双人对战模式,提高游戏趣味性。

- 引入游戏积分制,激励玩家不断挑战自我。

- 添加声音效果,增强游戏沉浸感。

- 设计多种子弹类型,丰富游戏玩法。

- 设置客机类型,增加游戏难度。

- 设计游戏关卡,提升游戏连贯性。

- 引入多种类型敌机,增强游戏挑战性。

- 实现游戏中间结果存储,方便玩家查看。

四、相关技术1. 滚动背景技术:通过复制背景图片,实现背景的连续滚动,增强游戏场景的逼真感。

2. 透明贴图技术:将无关颜色设置为透明,使移动元素更加贴合背景,提升视觉效果。

3. 定时器技术:控制游戏节奏和敌机生成速度,保证游戏平衡性。

4. 双缓冲技术:避免画面闪烁,提升游戏流畅度。

5. 连续按键处理技术:实现战机的快速移动和射击。

6. 碰撞处理技术:检测战机与敌机、子弹之间的碰撞,实现游戏效果。

7. 链表存储技术:存储游戏中的各种元素,如敌机、子弹等。

8. 动态效果技术:实现爆炸、子弹发射等动态效果,增强游戏趣味性。

五、需求分析1. 功能需求分析:明确游戏的基本功能和扩展功能,为系统设计提供依据。

飞机大战实训报告总结java -回复

飞机大战实训报告总结java -回复

飞机大战实训报告总结java -回复Java实训报告总结:飞机大战实训一、引言飞机大战是一款经典的游戏,其核心玩法是玩家操控飞机进行战斗,消灭敌机并击败关卡Boss。

为了学习和掌握Java编程语言的基本语法和面向对象编程的思想,我们进行了飞机大战实训项目。

本文将对该实训项目进行总结和归纳,详细介绍实训的过程和各个模块的设计与实现。

二、项目概述1. 项目背景飞机大战实训项目是为了让我们学习和运用Java编程语言的基础知识和面向对象的思想,掌握基本的游戏开发技能。

2. 项目目标通过实践,达到以下目标:(1) 熟悉Java编程语言的基本语法和面向对象编程的思想;(2) 掌握游戏开发的基本流程和常用技术;(3) 实践团队协作与沟通能力;(4) 提升问题解决能力和编程实际操作能力。

三、项目实施1. 分析与设计项目开始前,我们小组成员进行了对游戏需求的分析与设计。

首先,明确了游戏的基本功能模块和玩法规则。

然后,我们绘制了UML类图,定义了所需要的各个类及其之间的关系。

这一步骤对于后续的开发工作具有重要的指导意义。

2. 编码实现根据分析与设计的结果,我们开始进行编码实现。

首先,我们搭建了项目的基础框架,包括游戏窗口和图像资源的加载。

然后,我们根据UML类图中的定义,依次实现了飞机、子弹、敌机、Boss等各个类及其相关的功能方法。

编码过程中,我们注意代码的规范性和可读性,并进行了适当的功能封装和模块化设计。

3. 调试与测试在编码完成后,我们进行了代码的调试与测试。

首先,我们保证游戏的基本功能能够正常运行,包括飞机的移动、子弹的发射和敌机的生成等。

然后,我们对各个功能模块和类进行了逐一测试,修复了发现的问题和bug。

最后,我们对游戏进行了全面性能测试,确保游戏在各种情况下都能够稳定运行。

4. 优化与改进在游戏的调试与测试过程中,我们也发现了一些性能问题和改进的空间。

我们对游戏逻辑进行了优化,采用了线程池对敌机的生成和移动进行了控制,提高了游戏的性能和流畅度。

c飞机大战实训报告附带码

c飞机大战实训报告附带码

目录1. 概述 (3)1.1 实训项目简介 (3)1.2 实训功能说明 (3)1.2.1 基本功能 (3)1.2.2 附加功能 (3)2. 相关技术 (4)2.1 Windows定时器技术 (4)2.2 透明贴图实现技术 (4)2.3 CObList链表 (5)2.4获取矩形区域 (6)2.5使用AfxMessageBox显示游戏过程中的提示信息 (7)2.6内存释放 (7)2.7 CImageList处理爆炸效果 (7)2.8对话框的应用 (8)3. 总体设计与详细设计 (8)3.1 系统模块划分 (8)3.2 主要功能模块 (9)3.2.1 系统对象类图 (9)3.2.2 系统主程序活动图 (10)3.2.3 系统部分流程图 (11)4. 编码实现 (13)4.1 绘制游戏背景位图程序 (13)4.2 飞机大战游戏对象的绘制程序 (14)4.3 飞机大战游戏对象战机位置的动态控制 (18)4.4 飞机大战游戏对象之间的碰撞实现 (21)4.5 游戏界面输出当前信息 (22)5. 项目程序测试 (24)5.1战机移动及子弹发射模块测试 (24)5.2 敌机及炸弹模块测试 (20)5.3 爆炸模块测试 (20)6. 实训中遇到的主要问题及解决方法 (25)7. 实训体会 (25)1. 概述1.1 实训项目简介本次实训项目是做一个飞机大战的游戏,应用MFC编程,完成一个界面简洁流畅、游戏方式简单,玩起来易于上手的桌面游戏。

该飞机大战项目运用的主要技术即是MFC编程中的一些函数、链表思想以及贴图技术。

1.2 实训功能说明1.2.1 基本功能(1)设置一个战机具有一定的速度,通过键盘,方向键可控制战机的位置,空格键发射子弹。

(2)界面中敌机出现的位置,以及敌机炸弹的发射均为随机的,敌机与敌机炸弹均具有一定的速度,且随着关卡难度的增大,数量和速度均增加。

(3)对于随机产生的敌机和敌机炸弹,若超过矩形区域,则释放该对象。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录1. 概述 (1)2. 相关技术 (2)2.1碰撞检测 (2)2.2 CObList链表 (2)2.3 设置定时器 (2)2.4 背景滚动 (2)2.5内存释放技术 (2)3. 总体设计与详细设计 (2)3.1 系统模块划分 (2)3.2 主要功能模块 (3)4. 编码实现 (5)5. 实训中遇到的主要问题及解决方法 (37)6. 实训体会 (37)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指向下一个元素。

2.3 设置定时器SetTimer()函数来设置定时器。

2.4 背景滚动为了让游戏场景更加逼真,游戏节奏更加合理,可以通过让背景滚动来提高游戏的场景效应,实现这一技术时,可以将一张背景图片复制为2张,从上到下连续的拼接在一起,使其不会出现图片的卡顿和瞬移现象。

2.5内存释放技术这个程序中有大量的地方需要使用内存,如果不及时删除会出现闪图等情况,容易导致程序崩溃,要及时释放内存资源。

3. 总体设计与详细设计3.1 系统模块划分3.2 主要功能模块类关系图:4. 编码实现// PlaneGameView.cpp : CPlaneGameView 类的实现void CPlaneGameView::UpdateFrame(CDC* pMemDC){//绘制天空if(level==0){CPaintDC dc(this);CBitmap bmpBackground; //位图对象bmpBackground.LoadBitmap(IDB_BITMAP1);CDC dcMem; //定义一个工具箱(设备上下文)dcMem.CreateCompatibleDC(&dc);BITMAP bitmap;bmpBackground.GetBitmap(&bitmap); //建立绑定关系CBitmap *back = dcMem.SelectObject(&bmpBackground); //保存原有CDC对象,并选入新CDC对象入DCstatic int curr = 1;if (curr <= 1)curr = GAME_HEIGHT - 1;curr -= 1;pMemDC->BitBlt(0, 0, GAME_WIDTH, GAME_HEIGHT - curr, &dcMem, 0, curr, SRCCOPY);pMemDC->BitBlt(0, GAME_HEIGHT - curr, GAME_WIDTH, curr, &dcMem, 0, 0, SRCCOPY);}if(level>=1&&l==0&&boss==0){pMemDC->FillSolidRect(0, 0, GAME_WIDTH, GAME_HEIGHT, RGB(0, 0, 0));l++;z=1;}if(level==1&&l!=0&&boss!=0){CPaintDC dc(this);CBitmap bmpBackground; //位图对象bmpBackground.LoadBitmap(IDB_BITMAP1);CDC dcMem; //定义一个工具箱(设备上下文)dcMem.CreateCompatibleDC(&dc);BITMAP bitmap;bmpBackground.GetBitmap(&bitmap); //建立绑定关系CBitmap *back = dcMem.SelectObject(&bmpBackground); //保存原有CDC对象,并选入新CDC对象入DCstatic int curr = 1;if (curr <= 1)curr = GAME_HEIGHT - 1;curr -= 1;pMemDC->BitBlt(0, 0, GAME_WIDTH, GAME_HEIGHT - curr, &dcMem, 0, curr, SRCCOPY);pMemDC->BitBlt(0, GAME_HEIGHT - curr, GAME_WIDTH, curr, &dcMem, 0, 0, SRCCOPY);}if (level == 2 && l != 0 && boss != 0){CPaintDC dc(this);CBitmap bmpBackground; //位图对象bmpBackground.LoadBitmap(IDB_MAP2);CDC dcMem; //定义一个工具箱(设备上下文)dcMem.CreateCompatibleDC(&dc);BITMAP bitmap;bmpBackground.GetBitmap(&bitmap); //建立绑定关系CBitmap *back = dcMem.SelectObject(&bmpBackground); //保存原有CDC对象,并选入新CDC对象入DCstatic int curr = 1;if (curr <= 1)curr = GAME_HEIGHT - 1;curr -= 1;pMemDC->BitBlt(0, 0, GAME_WIDTH, GAME_HEIGHT - curr, &dcMem, 0, curr, SRCCOPY);pMemDC->BitBlt(0, GAME_HEIGHT - curr, GAME_WIDTH, curr, &dcMem, 0, 0, SRCCOPY);}if(level==3 && l != 0 && boss != 0){CPaintDC dc(this);CBitmap bmpBackground; //位图对象bmpBackground.LoadBitmap(IDB_MAP3);CDC dcMem; //定义一个工具箱(设备上下文)dcMem.CreateCompatibleDC(&dc);BITMAP bitmap;bmpBackground.GetBitmap(&bitmap); //建立绑定关系CBitmap *back = dcMem.SelectObject(&bmpBackground); //保存原有CDC对象,并选入新CDC对象入DCstatic int curr = 1;if (curr <= 1)curr = GAME_HEIGHT - 1;curr -= 1;pMemDC->BitBlt(0, 0, GAME_WIDTH, GAME_HEIGHT - curr, &dcMem, 0, curr, SRCCOPY);pMemDC->BitBlt(0, GAME_HEIGHT - curr, GAME_WIDTH, curr, &dcMem, 0, 0, SRCCOPY);}if(level==4 && l != 0 && boss != 0){CPaintDC dc(this);CBitmap bmpBackground; //位图对象bmpBackground.LoadBitmap(IDB_MAP4);CDC dcMem; //定义一个工具箱(设备上下文)dcMem.CreateCompatibleDC(&dc);//兼容BITMAP bitmap;bmpBackground.GetBitmap(&bitmap); //建立绑定关系CBitmap *back = dcMem.SelectObject(&bmpBackground); //保存原有CDC对象,并选入新CDC对象入DCstatic int curr = 1;if (curr <= 1)curr = GAME_HEIGHT - 1;curr -= 1;pMemDC->BitBlt(0, 0, GAME_WIDTH, GAME_HEIGHT - curr, &dcMem, 0, curr, SRCCOPY);pMemDC->BitBlt(0, GAME_HEIGHT - curr, GAME_WIDTH, curr, &dcMem, 0, 0, SRCCOPY);}if(level==5 && l != 0 && boss != 0){CPaintDC dc(this);CBitmap bmpBackground; //位图对象bmpBackground.LoadBitmap(IDB_MAP5);CDC dcMem; //定义一个工具箱(设备上下文)dcMem.CreateCompatibleDC(&dc);BITMAP bitmap;bmpBackground.GetBitmap(&bitmap); //建立绑定关系CBitmap *back = dcMem.SelectObject(&bmpBackground); //保存原有CDC对象,并选入新CDC对象入DCstatic int curr = 1;if (curr <= 1)curr = GAME_HEIGHT - 1;curr -= 1;pMemDC->BitBlt(0, 0, GAME_WIDTH, GAME_HEIGHT - curr, &dcMem, 0, curr, SRCCOPY);pMemDC->BitBlt(0, GAME_HEIGHT - curr, GAME_WIDTH, curr, &dcMem, 0, 0, SRCCOPY);}if(level>5 && l != 0 && boss != 0){CPaintDC dc(this);CBitmap bmpBackground; //位图对象bmpBackground.LoadBitmap(IDB_MAP6);CDC dcMem; //定义一个工具箱(设备上下文)dcMem.CreateCompatibleDC(&dc);BITMAP bitmap;bmpBackground.GetBitmap(&bitmap); //建立绑定关系CBitmap *back = dcMem.SelectObject(&bmpBackground); //保存原有CDC对象,并选入新CDC对象入DCstatic int curr = 1;if (curr <= 1)curr = GAME_HEIGHT - 1;curr -= 1;pMemDC->BitBlt(0, 0, GAME_WIDTH, GAME_HEIGHT - curr, &dcMem, 0, curr, SRCCOPY);pMemDC->BitBlt(0, GAME_HEIGHT - curr, GAME_WIDTH, curr, &dcMem, 0, 0, SRCCOPY);}pMemDC->SetBkMode(TRANSPARENT);pMemDC->SetTextAlign(TA_CENTER);pMemDC->SetTextColor(RGB(255, 255, 255));if(level==0){wchar_t S8[1000];wsprintf(S8, L"单击鼠标进入游戏");pMemDC->TextOutW(GAME_WIDTH / 2, GAME_HEIGHT / 2, CString(S8));}if(level>=1&&z!=0){wchar_t S9[1000];wsprintf(S9, L"点击进入下一关");pMemDC->TextOutW(GAME_WIDTH / 2, GAME_HEIGHT / 2, CString(S9)); }if(level>=1&&z==0){wchar_t S1[1000];wchar_t S2[1000];wsprintf(S1, L"得分:%d", number);wsprintf(S2, L"关卡:%d", level);pMemDC->TextOutW(35, 0, CString(S1));pMemDC->TextOutW(200, 0, CString(S2));wchar_t S3[1000];wsprintf(S3 , L"按下“F1”开启无敌模式");pMemDC->TextOutW(390, 0, CString(S3));wchar_t S4[1000];wsprintf(S4, L"按下“F2”关闭无敌模式");pMemDC->TextOutW(390, 20, CString(S4));wchar_t S5[1000];if(wu==0){ wsprintf(S5, L"大招数量:%d",dazhao );pMemDC->TextOutW(430, 40, CString(S5));}if(wu==1){wsprintf(S5, L"大招数量:无限");pMemDC->TextOutW(430, 40, CString(S5));}wchar_t S6[1000];wsprintf(S6, L"按下空格发射子弹");pMemDC->TextOutW(60, 50, CString(S6));wchar_t S7[1000];wsprintf(S7, L"按下“Z”大招");pMemDC->TextOutW(56, 70, CString(S7));//绘制我方战机if (m_pMe != NULL){m_pMe->Draw(m_pMemDC, FALSE);}else{ //Game OverCString str = _T("Game Over!");pMemDC->TextOut(GAME_WIDTH / 2, GAME_HEIGHT / 2, str);}//绘制血条if (m_pMe != NULL){CString z1;z1.Format(L"战机HP(%d)", shengming);pMemDC->TextOut(47, 30, z1);pMemDC->FillSolidRect(90, 33, shengming * 10, 10, RGB(255, 0, 0));if (bxt == 1){CString z2;z2.Format(L"Boss HP (%d)",boss);pMemDC->TextOut(35, 100, z2);pMemDC->FillSolidRect(80, 108, boss * 2, 10, RGB(0, 255, 0));}}//绘制导弹、爆炸、敌机、子弹、boss、boss子弹for (int i = 0;i <= 8;i++){POSITION pos1, pos2;for (pos1 = m_ObjList[i].GetHeadPosition(); (pos2 = pos1) != NULL; ){CGameObject* pObj = (CGameObject*)m_ObjList[i].GetNext(pos1);if (pObj && !pObj->Draw(pMemDC, FALSE)){m_ObjList[i].RemoveAt(pos2);delete pObj;}}}}//复制内存DC到设备DCm_pDC->BitBlt(0, 0, GAME_WIDTH, GAME_HEIGHT, m_pMemDC, 0, 0, SRCCOPY); }void CPlaneGameView::AI(){static int nCreator = rand() % 5+20 ;//随机产生敌机if (nCreator <= 0){nCreator = rand() % 5 +20;m_ObjList[enEnemy].AddTail(new CEnemy);}nCreator--;//随机产生大招if (count % 30 == 0){m_ObjList[endazhao].AddTail(new Cda);count++;}//随机产生生命if (count % 40 == 0){m_ObjList[enming].AddTail(new Cshengming);count++;}//产生bossif (level == 1&&bn==0&&count>=25&&count<=27) {m_ObjList[enboss].AddTail(new Cboss);bxt = 1;bn++;}if (level == 2&&bn==0&&count>=50&&count<=52) {m_ObjList[enboss].AddTail(new Cboss);bxt = 1;bn++;}if (level == 3&&bn==0&&count>=75&&count<=77) {m_ObjList[enboss].AddTail(new Cboss);bxt = 1;bn++;}if (level == 4&&bn==0&&count>=100&&count<=102) {m_ObjList[enboss].AddTail(new Cboss);bxt = 1;bn++;}if (level == 5&&bn==0&&count>=150&&count<=152) {m_ObjList[enboss].AddTail(new Cboss);bxt = 1;bn++;}if (level>5&&count%200==0&&bn==0){m_ObjList[enboss].AddTail(new Cboss);bxt = 1;bn++;}if (m_pMe == NULL)return;//检测四个方向键,移动战机for (int i = 0;i<4;i++){int nMeMotion = 0;m_pMe->SetVerMotion(0);m_pMe->SetHorMotion(0);nMeMotion = GetKey(VK_UP);if (nMeMotion == 1)m_pMe->SetVerMotion(1);nMeMotion = GetKey(VK_DOWN);if (nMeMotion == 1)m_pMe->SetVerMotion(-1);nMeMotion = GetKey(VK_RIGHT);if (nMeMotion == 1)m_pMe->SetHorMotion(1);nMeMotion = GetKey(VK_LEFT);if (nMeMotion == 1)m_pMe->SetHorMotion(-1);}//产生战机导弹if (GetKey(VK_SPACE) == 1)//按下了空格键{if (m_pMe != NULL && m_pMe->Fired()){CPoint pt = m_pMe->GetPoint();if (level == 1 && wu == 0){m_ObjList[enBomb].AddTail(new CBomb(pt.x + 20, pt.y + 10));}if (level == 2 && wu == 0){m_ObjList[enBomb].AddTail(new CBomb(pt.x + 10, pt.y + 30));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 30, pt.y + 30));}if (level == 3 && wu == 0){m_ObjList[enBomb].AddTail(new CBomb(pt.x + 10, pt.y + 30));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 30, pt.y + 30));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 20, pt.y + 30));}if (level >= 4 && wu == 0){m_ObjList[enBomb].AddTail(new CBomb(pt.x + 10, pt.y + 30));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 30, pt.y + 30));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 20, pt.y + 30));m_ObjList[enBomb].AddTail(new CBomb(pt.x , pt.y + 30));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 40, pt.y + 30));}if (wu == 1){m_ObjList[enBomb].AddTail(new CBomb(pt.x + 10, pt.y + 30));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 30, pt.y + 30));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 20, pt.y + 30));m_ObjList[enBomb].AddTail(new CBomb(pt.x, pt.y + 30));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 40, pt.y + 30));}}}if (GetKey(VK_F1) == 1)//按下了F1{if (m_pMe != NULL && m_pMe->Fired()){wu = 1;}}if (GetKey(VK_F2) == 1 && wu == 1)//按下了F2{if (m_pMe != NULL && m_pMe->Fired()){wu = 0;}}//boss发射子弹static int num = 100;if (m_pMe != NULL && num <= 0){for (POSITION ePos = m_ObjList[enboss].GetHeadPosition(); ePos != NULL;) {Cboss* pEnemy = (Cboss*)m_ObjList[enboss].GetNext(ePos);CPoint ePt = pEnemy->GetPoint();CBossball * t;for (int i = -level + 1; i <= level - 1; i++){t = new CBossball(ePt.x + 20, ePt.y + 30);t->zx = int(4.0*sin((3.14* double(i)) / 9));t->zy = int(8.0*cos((3.14* double(i)) / 9));m_ObjList[enBossball].AddTail(t);}}num = 100;}num--;//敌机发射子弹if (m_pMe){CPoint PlanePt = m_pMe->GetPoint();for (POSITION ePos = m_ObjList[enEnemy].GetHeadPosition(); ePos != NULL;) {CEnemy* pEnemy = (CEnemy*)m_ObjList[enEnemy].GetNext(ePos);if (!pEnemy->Fired())continue;CPoint ePt = pEnemy->GetPoint();BOOL by = FALSE;//敌机在战机前面if (pEnemy->GetMontion() == 1 && ePt.y<PlanePt.y)by = TRUE;//敌机在战机后面if (pEnemy->GetMontion() == -1 && ePt.y>PlanePt.y)by = TRUE;if (by && ePt.x >= PlanePt.x && ePt.x < PlanePt.x + CMyPlane::PLANE_WIDTH){CBall * t;for (int i = -level + 1; i <= level - 1; i++){t = new CBall(ePt.x + 20, ePt.y + 30, -pEnemy->GetMontion());t->xx = int(8.0*sin((3.14* double(i)) / 9));t->xy = int(8.0*cos((3.14* double(i)) / 9));m_ObjList[enBall].AddTail(t);}}}}//boss子弹打到战机if (m_pMe != NULL){POSITION nPos3 = NULL, nPos4 = NULL;CRect mRect = m_pMe->GetRect();for (nPos3 = m_ObjList[enBossball].GetHeadPosition(); (nPos4 = nPos3) != NULL;){CBall* pBall = (CBall*)m_ObjList[enBossball].GetNext(nPos3);CRect bRect = pBall->GetRect();CRect tmpRect;if (tmpRect.IntersectRect(&bRect, mRect)){//添加爆炸效果if (wu == 0 ){shengming--;//生命减少}m_ObjList[enExplosion].AddTail(new CExplosion(mRect.left, mRect.top));//删除子弹m_ObjList[enBossball].RemoveAt(nPos4);delete pBall;if (shengming <= 0){//删除战机delete m_pMe;m_pMe = NULL;break;}}}}//敌机子弹打到战机if (m_pMe){POSITION nPos1 = NULL, nPos2 = NULL;CRect mnRect = m_pMe->GetRect();for (nPos1 = m_ObjList[enEnemy].GetHeadPosition(); (nPos2 = nPos1) != NULL;){CBall* pBall = (CBall*)m_ObjList[enEnemy].GetNext(nPos1);CRect bRect = pBall->GetRect();CRect tmpRect;if (tmpRect.IntersectRect(&bRect, mnRect)){//添加爆炸效果if (wu == 0 ){shengming--;//生命减少}m_ObjList[enExplosion].AddTail(new CExplosion(mnRect.left, mnRect.top));//删除子弹m_ObjList[enEnemy].RemoveAt(nPos2);delete pBall;if (shengming <= 0){//删除战机delete m_pMe;m_pMe = NULL;break;}}}}if (NULL != m_pMe) {//敌机撞战机POSITION bPos1 = NULL, bPos2 = NULL;CRect mRect = m_pMe->GetRect();for (bPos1 = m_ObjList[enBall].GetHeadPosition(); (bPos2 = bPos1) != NULL;) {CBall* pBall = (CBall*)m_ObjList[enBall].GetNext(bPos1);CRect bRect = pBall->GetRect();CRect tmpRect;if (tmpRect.IntersectRect(&bRect, mRect)){//添加爆炸效果if (wu == 0 ){shengming--;//生命减少}m_ObjList[enExplosion].AddTail(new CExplosion(mRect.left, mRect.top));//删除子弹m_ObjList[enBall].RemoveAt(bPos2);delete pBall;if (shengming <= 0){//删除战机delete m_pMe;m_pMe = NULL;break;}}}}//吃大招if (NULL != m_pMe) {POSITION bPos1 = NULL, bPos2 = NULL;CRect bRect = m_pMe->GetRect();for (bPos1 = m_ObjList[endazhao].GetHeadPosition(); (bPos2 = bPos1) != NULL;){CBall* pBall = (CBall*)m_ObjList[endazhao].GetNext(bPos1);CRect mRect = pBall->GetRect();CRect tmpRect;if (tmpRect.IntersectRect(&mRect, bRect)){dazhao++;//删除子弹m_ObjList[endazhao].RemoveAt(bPos2);delete pBall;}}}//吃生命if (NULL != m_pMe) {POSITION bPos1 = NULL, bPos2 = NULL;CRect mRect = m_pMe->GetRect();for (bPos1 = m_ObjList[enming].GetHeadPosition(); (bPos2 = bPos1) != NULL;) {CBall* pBall = (CBall*)m_ObjList[enming].GetNext(bPos1);CRect bRect = pBall->GetRect();CRect tmpRect;if (tmpRect.IntersectRect(&bRect, mRect)){shengming++;//删除子弹m_ObjList[enming].RemoveAt(bPos2);delete pBall;}}}//战机导弹炸掉敌机POSITION mPos1 = NULL, mPos2 = NULL;for (mPos1 = m_ObjList[enBomb].GetHeadPosition();(mPos2 = mPos1) != NULL;) {CBomb* pBomb = (CBomb*)m_ObjList[enBomb].GetNext(mPos1);CRect bRect = pBomb->GetRect();POSITION ePos1 = NULL, ePos2 = NULL;for (ePos1 = m_ObjList[enEnemy].GetHeadPosition();(ePos2 = ePos1) != NULL;){CEnemy* pEnemy = (CEnemy*)m_ObjList[enEnemy].GetNext(ePos1);CRect mRect = pEnemy->GetRect();CRect tmpRect;if (tmpRect.IntersectRect(&bRect, mRect)){count++;number += 5;//添加爆炸效果m_ObjList[enExplosion].AddTail(new CExplosion(mRect.left, mRect.top));//删除导弹if (da == 1){m_ObjList[enBomb].RemoveAt(mPos2);delete pBomb;}//删除敌机m_ObjList[enEnemy].RemoveAt(ePos2);delete pEnemy;break;}}}//战机导弹炸掉子弹POSITION mPos3 = NULL, mPos4 = NULL;for (mPos3 = m_ObjList[enBomb].GetHeadPosition(); (mPos4 = mPos3) != NULL;) {CBomb* pBomb = (CBomb*)m_ObjList[enBomb].GetNext(mPos3);CRect bRect = pBomb->GetRect();POSITION ePos3 = NULL, ePos4 = NULL;for (ePos3 = m_ObjList[enBall].GetHeadPosition(); (ePos4 = ePos3) != NULL;) {CBall* pBall = (CBall*)m_ObjList[enBall].GetNext(ePos3);CRect mRect = pBall->GetRect();CRect tmpRect;{//添加爆炸效果//删除导弹m_ObjList[enBomb].RemoveAt(mPos4);delete pBomb;//删除敌机m_ObjList[enBall].RemoveAt(ePos4);delete pBall;break;}}}//导弹炸掉bossPOSITION mPos5 = NULL, mPos6 = NULL;for (mPos5 = m_ObjList[enBomb].GetHeadPosition(); (mPos6 = mPos5) != NULL;) {CBomb* pBomb = (CBomb*)m_ObjList[enBomb].GetNext(mPos5);CRect bRect = pBomb->GetRect();POSITION ePos5 = NULL, ePos6 = NULL;for (ePos5 = m_ObjList[enboss].GetHeadPosition(); (ePos6 = ePos5) != NULL;) {Cboss* pBall = (Cboss*)m_ObjList[enboss].GetNext(ePos5);CRect mRect = pBall->GetRect();CRect tmpRect;{boss--;//添加爆炸效果m_ObjList[enExplosion].AddTail(new CExplosion(mRect.left, mRect.top));//删除导弹m_ObjList[enBomb].RemoveAt(mPos6);delete pBomb;if (boss <= 0){number = number + 100 * level;bxt = 0;//删除敌机m_ObjList[enboss].RemoveAt(ePos6);delete pBall;dazhao++;bn = 0;count = 0;shengming += 2;l=0;boss=0;break;}}}}}void CPlaneGameView::OnTimer(UINT_PTR nIDEvent){//刷新游戏帧画面: 在内存DC上绘图UpdateFrame(m_pMemDC);if ((beijing != GAME_HEIGHT))beijing += 2;elsebeijing = 0;AI();CView::OnTimer(nIDEvent);}void CPlaneGameView::On0(){// TODO: 在此添加命令处理程序代码}void CPlaneGameView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {// TODO: 在此添加消息处理程序代码和/或调用默认值CView::OnKeyDown(nChar, nRepCnt, nFlags);if(nChar==90&&wu==1){CPoint pt = m_pMe->GetPoint();m_ObjList[enBomb].AddTail(new CBomb(pt.x - 50, pt.y + 80));m_ObjList[enBomb].AddTail(new CBomb(pt.x - 20, pt.y + 80));m_ObjList[enBomb].AddTail(new CBomb(pt.x - 70, pt.y + 80));m_ObjList[enBomb].AddTail(new CBomb(pt.x - 130, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 550, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 520, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 160, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 490, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 460, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 190, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 430, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 400, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 220, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 370, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 340, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 250, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 310, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 280, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x, pt.y + 80));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 30, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 60, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 90, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 120, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 150, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 570, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 180, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 540, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 510, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 210, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 480, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 450, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 240, pt.y + 80));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 390, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 270, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 360, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 330, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 300, pt.y + 80));m_ObjList[enBomb].AddTail(new CBomb(pt.x - 50, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 20, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 70, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 100, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 130, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 550, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 520, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 160, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 490, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 460, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 190, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 430, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 400, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 220, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 370, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 340, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 250, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 310, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 280, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 30, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 60, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 120, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 150, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 570, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 180, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 540, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 510, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 210, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 480, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 450, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 240, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 420, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 390, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 270, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 360, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 330, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 300, pt.y + 60));} else if(nChar==90&&wu==0&&dazhao>=1){dazhao = dazhao - 1;CPoint pt = m_pMe->GetPoint();m_ObjList[enBomb].AddTail(new CBomb(pt.x - 50, pt.y + 80));m_ObjList[enBomb].AddTail(new CBomb(pt.x - 20, pt.y + 80));m_ObjList[enBomb].AddTail(new CBomb(pt.x - 70, pt.y + 80));m_ObjList[enBomb].AddTail(new CBomb(pt.x - 100, pt.y + 80));m_ObjList[enBomb].AddTail(new CBomb(pt.x - 130, pt.y + 80));m_ObjList[enBomb].AddTail(new CBomb(pt.x - 550, pt.y + 80));m_ObjList[enBomb].AddTail(new CBomb(pt.x - 520, pt.y + 80));m_ObjList[enBomb].AddTail(new CBomb(pt.x - 160, pt.y + 80));m_ObjList[enBomb].AddTail(new CBomb(pt.x - 490, pt.y + 80));m_ObjList[enBomb].AddTail(new CBomb(pt.x - 460, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 190, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 430, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 400, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 220, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 370, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 340, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 250, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 310, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 280, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x, pt.y + 80));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 30, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 60, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 90, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 120, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 150, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 570, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 180, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 540, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 510, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 210, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 480, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 450, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 240, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 420, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 390, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 270, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 360, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 330, pt.y + 80)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 300, pt.y + 80));m_ObjList[enBomb].AddTail(new CBomb(pt.x - 50, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 20, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 70, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 100, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 130, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 550, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 520, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 160, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 490, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 460, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 190, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 430, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 400, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 220, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 370, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 340, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 250, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 310, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x - 280, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 30, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 60, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 90, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 120, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 150, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 570, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 180, pt.y + 60)); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 540, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 510, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 210, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 480, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 450, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 240, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 420, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 390, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 270, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 360, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 330, pt.y + 60));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 300, pt.y + 60));}}void CPlaneGameView::OnLButtonDown(UINT nFlags, CPoint point){// TODO: 在此添加消息处理程序代码和/或调用默认值CView::OnLButtonDown(nFlags, point);if(level==0&&point.x>=0&&point.x<=512&&point.y>=0&&point.y<=768) level=1;if(level>=1&&boss<=0&&l==1&& point.x >= 0 && point.x <= 512 && point.y >= 0 && point.y <= 768){。

相关文档
最新文档