mfc飞机大战课程设计文档
- 格式:doc
- 大小:417.34 KB
- 文档页数:20
实训报告飞机大战游戏设计与开发专业名称:软件工程班级:学号:信息科学与工程学院二零一三年十一月目录1. 概述 (03)1.1 实训项目简介 (03)1.2 实训功能说明 (03)1.2.1 基本功能 (03)2. 相关技术 (03)2.1 基类的使用 (03)2.2 Windows定时器技术 (03)2.3获取矩形区域 (03)2.4内存释放 (04)3. 总体设计与详细设计 (04)3.1 系统模块划分 (04)3.2 主要功能模块 (05)4. 编码实现 (31)5. 实训中遇到的主要问题及解决方法 (32)6. 实训体会 (32)1. 概述1.1 实训项目简介本次实训项目是做一个飞机大战的游戏,完成一个界面简洁流畅、游戏方式简单,玩起来易于上手的桌面游戏。
该飞机大战项目运用的主要技术即是MFC编程中的一些函数、链表思想以及贴图技术。
1.2 实训功能说明1.2.1 基本功能(1)设置一个战机具有一定的速度,通过键盘,鼠标,方向键可控制战机的位置,空格键发射子弹。
(2)界面中敌机出现的位置为随机的。
(3)对于随机产生的敌机和敌机炸弹,若超过矩形区域,则释放该对象。
(4)添加爆炸效果,包括战机子弹打中敌机爆炸、敌机炸弹打中战机爆炸、战机与敌机相撞爆炸以及战机子弹与敌机炸弹相撞爆炸四种爆炸效果。
且爆炸发生后敌机、子弹、炸弹均消失。
2. 相关技术2.1基类的使用在飞机大战的游戏中用到了很多基类,例如MyPlane、Bomb等等,这样使得游戏的实现更加规范,有效性。
通过主函数的调用,实现了很多功能。
2.2 Windows定时器技术Windows定时器是一种输入设备,它周期性地在每经过一个指定的时间间隔后就通知应用程序一次。
程序将时间间隔告诉Windows,然后Windows给您的程序发送周期性发生的WM_TIMER消息以表示时间到了。
本程序中使用多个定时器,分别控制不同的功能。
在MFC的API函数中使用SetTimer()函数设置定时器,设置系统间隔时间,在OnTimer()函数中实现响应定时器的程序。
程序设计综合实践实习报告一、实习题目:飞机大战游戏二、实习时间: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,释放非空的指针,最后把新建的设备描述表也删除。
飞机大战课设报告飞机大战是一款经典的游戏,也是计算机科学中常见的课设项目之一。
在这个项目中,我们需要设计一个能够实现基本飞机大战功能的程序,包括游戏场景,敌人飞机,玩家飞机以及子弹等元素。
在本文中,我们将介绍飞机大战的实现原理以及我们的设计思路。
一、游戏场景的实现游戏场景是飞机大战中最基本的元素之一。
我们需要在程序中创建一个游戏窗口,用于展示游戏场景。
在窗口中,我们需要绘制背景图像,以及玩家飞机和敌人飞机等元素。
为了实现更加真实的游戏体验,我们还可以添加背景音乐和音效。
二、敌人飞机的实现在飞机大战中,敌人飞机是玩家需要消灭的目标。
我们需要在程序中创建敌人飞机,并控制其在游戏场景中的运动轨迹。
为了增加游戏难度,我们可以让敌人飞机在不同的高度和速度上运动,同时还可以添加不同种类的敌人飞机,例如飞行速度更快或者攻击力更强的飞机。
三、玩家飞机的实现玩家飞机是游戏中最重要的元素之一。
我们需要在程序中创建玩家飞机,并控制其在游戏场景中的运动轨迹。
为了让玩家更好地操作飞机,我们还可以添加键盘控制功能,例如向上或向下移动、向左或向右转向等。
四、子弹的实现子弹是玩家攻击敌人飞机的主要武器。
我们需要在程序中创建子弹,并控制其在游戏场景中的运动轨迹。
为了增加游戏体验,我们还可以添加不同种类的子弹,例如攻击力更强或者射程更远的子弹。
五、游戏逻辑的实现游戏逻辑是飞机大战中最重要的部分之一。
我们需要实现游戏的开始和结束逻辑,例如游戏开始前的介绍页面和游戏结束后的排名页面。
同时,在游戏过程中,我们还需要实现敌人飞机的生成和移动、玩家飞机的控制和移动、子弹的生成和移动以及碰撞检测等功能。
六、总结在本文中,我们介绍了飞机大战的实现原理以及我们的设计思路。
通过以上的步骤,我们可以实现一个基本的飞机大战游戏,并在程序中添加更多的功能和元素,以实现更加完整的游戏体验。
飞机大战不仅仅是一款游戏,更是一个综合性的课设项目,可以让我们更好地掌握计算机科学中的相关知识。
飞机大战游戏课程设计报告一、课程目标知识目标:1. 学生能理解并掌握编程语言的基本语法和结构,如变量、循环、条件语句等。
2. 学生能运用所学的编程知识,设计和开发一个简单的“飞机大战”游戏。
3. 学生能理解游戏设计中的数学原理,如坐标系统、碰撞检测等。
技能目标:1. 学生能够运用编程工具(如Scratch或Python等)进行游戏设计和开发,提高编程实践能力。
2. 学生通过团队协作,培养沟通与协作能力,学会共同解决问题。
3. 学生能够运用创新思维,设计和优化游戏功能,提高游戏的可玩性和趣味性。
情感态度价值观目标:1. 学生培养对计算机编程的兴趣和热情,激发学习动力。
2. 学生在游戏设计和开发过程中,培养自信心和成就感,增强自主学习能力。
3. 学生通过游戏设计,体会团队合作的重要性,学会尊重他人,培养良好的团队精神。
课程性质:本课程为信息技术学科,以实践为主,注重培养学生的动手能力和创新思维。
学生特点:五年级学生,对新鲜事物充满好奇心,具备一定的逻辑思维能力,喜欢动手操作。
教学要求:教师应引导学生通过自主学习、合作探究的方式,完成游戏设计和开发任务,关注学生的学习过程,及时给予反馈和指导,提高学生的综合素质。
在教学过程中,将课程目标分解为具体的学习成果,以便于教学设计和评估。
二、教学内容本课程教学内容依据课程目标进行选择和组织,主要包括以下几部分:1. 编程基础知识:- 变量的定义和使用- 常用的数据类型- 程序流程控制(条件语句、循环语句)- 函数的定义和调用2. 游戏设计原理:- 游戏的基本元素(玩家、敌人、子弹等)- 坐标系统与运动控制- 碰撞检测与游戏逻辑3. 编程工具与操作:- Scratch或Python编程环境的使用- 图形和角色的绘制与导入- 事件处理与声音效果的应用4. 项目实践:- 设计并开发“飞机大战”游戏- 团队合作与分工- 游戏测试与优化教学内容安排和进度:第一课时:介绍编程基础知识和游戏设计原理,让学生了解课程目标和要求。
飞机大战游戏课程设计一、课程目标知识目标:1. 学生能理解游戏编程的基本概念,掌握飞机大战游戏中所涉及的计算思维和编程逻辑。
2. 学生能描述飞机大战游戏中角色、敌人和道具的基本属性,运用数学知识进行碰撞检测和分数计算。
3. 学生了解并能应用游戏设计中的美术元素,如角色设计、背景布局等。
技能目标:1. 学生能够运用所学的编程知识,独立设计和编写一个简单的飞机大战游戏。
2. 学生通过实践操作,掌握游戏中角色移动、射击、得分等功能的实现。
3. 学生能够运用合作学习的方法,与团队成员共同完成游戏设计,提高团队协作能力。
情感态度价值观目标:1. 学生培养对编程和游戏设计的兴趣,激发学习信息技术的热情。
2. 学生在游戏设计过程中,体验创新和解决问题的快乐,增强自信心。
3. 学生通过团队合作,学会尊重他人意见,培养良好的沟通和协作能力。
4. 学生了解游戏在现实生活中的应用,认识到信息技术在现代社会中的重要性。
课程性质:本课程为信息技术课程,以实践操作为主,结合理论知识,培养学生的编程能力和计算思维。
学生特点:五年级学生对新鲜事物充满好奇,具备一定的信息技术基础,喜欢动手实践,善于合作学习。
教学要求:课程要求学生在掌握基本知识的基础上,注重实践操作,通过合作学习,培养编程技能和团队协作能力。
教学过程中,教师需关注学生个体差异,提供个性化指导,确保每位学生都能达到课程目标。
二、教学内容1. 游戏编程基本概念:介绍游戏编程的定义、作用和基本流程,结合课本相关章节,让学生了解游戏设计的基本框架和编程思维。
2. 游戏角色设计:讲解角色属性、移动、射击等功能的实现方法,指导学生运用数学知识进行碰撞检测和分数计算。
3. 游戏场景设计:介绍背景、道具等元素的设计方法,结合课本中的美术知识,让学生学会如何制作美观、有趣的游戏场景。
4. 编程语言和工具:教授适合五年级学生的编程语言(如Scratch)和工具,使其能够运用所学知识独立编写飞机大战游戏。
飞机大战课程设计类一、教学目标本课程旨在通过飞机大战项目的设计与实现,让学生掌握以下知识目标:1. 理解飞机大战游戏的基本原理和开发流程;2. 掌握飞机大战游戏中飞机控制、敌机生成、子弹发射等核心模块的开发方法;3. 熟悉飞机大战游戏中地图切换、得分记录等高级功能的实现方法。
技能目标:1. 能够运用面向对象编程思想进行软件开发;2. 熟练使用相关编程语言和开发工具进行项目开发;3. 具备一定的软件调试和优化能力。
情感态度价值观目标:1. 培养学生团队协作、自主探究的学习精神;2. 培养学生面对挑战、勇于创新的勇气;3. 使学生认识到编程不仅是一门技术,更是一种解决问题的方式,提升学生对编程的兴趣和热情。
二、教学内容教学内容以飞机大战项目的开发为主线,共分为以下几个部分:1. 飞机大战游戏概述,介绍飞机大战游戏的基本原理和开发流程;2. 飞机控制模块开发,讲解飞机控制的相关知识,并通过实践让学生掌握飞机控制模块的开发方法;3. 敌机生成模块开发,讲解敌机生成机制,让学生学会如何实现敌机的自动生成;4. 子弹发射模块开发,讲解子弹发射原理,让学生掌握子弹发射模块的开发方法;5. 地图切换与得分记录功能实现,让学生了解地图切换和得分记录的实现方法,提升学生对高级功能的理解和开发能力。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用以下教学方法:1. 讲授法,用于讲解飞机大战游戏的基本原理、开发流程以及相关知识点;2. 案例分析法,通过分析实际案例,让学生掌握飞机控制、敌机生成、子弹发射等核心模块的开发方法;3. 实验法,让学生动手实践,实际操作飞机大战项目的开发,提升学生的实际编程能力;4. 讨论法,鼓励学生在课堂上提问、分享心得,促进学生之间的交流与合作。
四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1. 教材:《飞机大战项目开发实战》,用于引导学生学习飞机大战项目的开发方法;2. 参考书:《Python编程:从入门到实践》、《Unity 2D游戏开发实战》,用于为学生提供更多的编程知识和实践案例;3. 多媒体资料:包括教学视频、演示文稿等,用于丰富教学手段,提高学生的学习兴趣;4. 实验设备:计算机、键盘、鼠标等,用于让学生进行实践操作。
飞机大战课程设计界面布局一、课程目标知识目标:1. 学生能理解飞机大战游戏的基本概念,掌握界面布局的基本组成部分。
2. 学生能描述界面布局中各个元素的功能,如:分数显示、生命值、控制按钮等。
3. 学生了解并掌握至少两种界面布局的方法,以及它们在实际游戏中的应用。
技能目标:1. 学生能够运用所学知识,设计并实现一个简单的飞机大战游戏界面布局。
2. 学生能够使用相关软件工具进行界面元素的绘制和布局设计,培养动手操作能力。
3. 学生通过实践,提高分析问题、解决问题的能力,具备一定的创新意识。
情感态度价值观目标:1. 学生对游戏界面设计产生兴趣,激发学习积极性,培养良好的学习习惯。
2. 学生在团队协作中,学会沟通、分享、互助,提高团队协作能力。
3. 学生认识到界面布局在游戏设计中的重要性,理解优秀界面设计对用户体验的提升。
分析课程性质、学生特点和教学要求,本课程将目标分解为具体的学习成果,包括:掌握界面布局的基本知识、学会使用相关软件工具、提高团队协作能力等。
这些学习成果将为后续的教学设计和评估提供明确的方向。
二、教学内容本课程依据课程目标,选择以下教学内容:1. 界面布局基本概念:介绍界面布局的定义、作用和分类,结合教材第3章内容,让学生理解界面布局在游戏设计中的重要性。
2. 界面元素功能及设计:讲解飞机大战游戏中常见的界面元素,如:分数显示、生命值、控制按钮等,并分析其功能。
结合教材第4章,指导学生如何设计美观、实用的界面元素。
3. 界面布局方法:介绍两种界面布局方法,如:线性布局和相对布局,结合教材第5章,让学生了解不同布局方法在实际游戏中的应用。
4. 软件工具使用:教授学生使用相关软件工具(如:Photoshop、Illustrator 等)进行界面元素的绘制和布局设计,参考教材第6章内容,培养学生的动手操作能力。
5. 实践项目:设计一个简单的飞机大战游戏界面布局,要求学生运用所学知识,独立或团队合作完成。
程序设计综合实践报告姓名田梦涛学号201301051923班级软件13-3项目名称飞机大战实习地点J-13实习时间16、17周实习成绩指导教师签字信息科学与工程学院年月日目录1. 概述 (3)2. 相关技术 (3)2.1 建立基类CGameObject (3)2.2 透明图片贴图 (4)2.3 CObList链表 (4)2.4获得矩形区域函数 (4)2.5发射子弹或导弹函数 (4)2.6 添加爆炸效果技术 (5)2.7对于对象的绘制以及越出边界的处理 (5)2.8字体的个性化输出函数 (6)2.9获取键盘操作函数 (6)2.10用键盘控制战机的移动 (6)2.11 设置定时器 (7)2.12 双缓冲技术 (8)2.13内存释放技术 (8)3. 需求分析 (8)4. 总体设计与详细设计 (8)4.1 系统模块划分 (9)4.2 主要功能模块 (11)4.3 扩展功能设计思路 (11)4.4 软件结构设计体会 (12)5. 编码实现 (12)5.1游戏初始创建 (12)5.2游戏结束处理 (13)5.3 背景设定 (13)5.4 创建游戏对象 (14)5.4 战机技能的创建 (15)5.5 发射模块使用(以发射战机导弹为例,敌机、BOSS发射子弹,乘客逃离客机类似) (16)5.6碰撞检测(以战机与敌机相撞为例,导弹炸毁敌机、子弹命中战机与战机、BOSS或敌机相撞与战机吃到各种道具等情况类似) (17)5.7 定时器的创建 (18)5.8 难度的事件处理程序的创建 (18)6.测试情况说明。
(19)7. 实训中遇到的主要问题及解决方法 (19)8. 实训收获与体会 (20)1. 概述飞机大战游戏是基于Windows桌面的射击类游戏,其需要实现的功能为:实现游戏对象的爆炸特效、文字提示功能和界面背景特效,其主要是遵循一定的游戏规则进行游戏。
游戏中的主要角色可分为如下几个基本部分:战机、敌机(普通敌机、小BOSS和大BOSS)、战机的导弹、敌机的子弹。
程序设计综合实践报告姓名学号班级计算机科学与技术项目名称飞机大战游戏设计实验实习地点实习时间实习成绩指导教师签字信息科学与工程学院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变量,既可以作为链表循环中的循环变量,也可以作为标记某个位置的标签。
程序设计综合实践报告姓名田梦涛学号201301051923班级软件13-3项目名称飞机大战实习地点J-13实习时间16、17周实习成绩指导教师签字信息科学与工程学院年月日目录1. 概述 (3)2. 相关技术 (3)2.1 建立基类CGameObject (3)2.2 透明图片贴图 (4)2.3 CObList链表 (4)2.4获得矩形区域函数 (4)2.5发射子弹或导弹函数 (4)2.6 添加爆炸效果技术 (5)2.7对于对象的绘制以及越出边界的处理 (5)2.8字体的个性化输出函数 (6)2.9获取键盘操作函数 (6)2.10用键盘控制战机的移动 (6)2.11 设置定时器 (7)2.12 双缓冲技术 (8)2.13内存释放技术 (8)3. 需求分析 (8)4. 总体设计与详细设计 (8)4.1 系统模块划分 (9)4.2 主要功能模块 (11)4.3 扩展功能设计思路 (11)4.4 软件结构设计体会 (12)5. 编码实现 (12)5.1游戏初始创建 (12)5.2游戏结束处理 (13)5.3 背景设定 (13)5.4 创建游戏对象 (14)5.4 战机技能的创建 (15)5.5 发射模块使用(以发射战机导弹为例,敌机、BOSS发射子弹,乘客逃离客机类似) (16)5.6碰撞检测(以战机与敌机相撞为例,导弹炸毁敌机、子弹命中战机与战机、BOSS或敌机相撞与战机吃到各种道具等情况类似) (17)5.7 定时器的创建 (18)5.8 难度的事件处理程序的创建 (18)6.测试情况说明。
(19)7. 实训中遇到的主要问题及解决方法 (19)8. 实训收获与体会 (20)1. 概述飞机大战游戏是基于Windows桌面的射击类游戏,其需要实现的功能为:实现游戏对象的爆炸特效、文字提示功能和界面背景特效,其主要是遵循一定的游戏规则进行游戏。
游戏中的主要角色可分为如下几个基本部分:战机、敌机(普通敌机、小BOSS和大BOSS)、战机的导弹、敌机的子弹。
其主要遵循的游戏规则为:战机数量为1,由玩家通过键盘控制(方向键控制位置、空格键发射导弹)战机;导弹释放存在间隔,有一定的运行速度;导弹遇到敌机发生爆炸,敌机被炸毁,导弹消失,玩家得分;由计算机控制敌机自动向战机发动攻击;敌机数量可以根据难度大小随机生成,计算机生成敌机时随机选择类别;敌机从游戏区域的上端进入,左右位置随机;普通敌机被导弹攻击即死,作为进入第二关的标志的小BOSS的血量稍多一些但是数量较多发射子弹的频率也较高,第三关中的大BOSS不仅比小BOSS血量更厚而且它发射伞状的子弹;敌机行驶期间,不左右移动,不反向移动;运行线路为直线,方向为从上至下,不可左右移动。
纵向由发射位置起至游戏区域结束;敌机子弹遇到战机时发生爆炸,战机被炸毁,子弹消失,游戏结束。
游戏最后根据功能要求,在大BOSS死亡后会生成客机,被击中引擎后改变飞行轨迹,击中油箱后爆炸,战机还要拯救随机从客机上跳机的乘客。
2. 相关技术此次实训的飞机大战游戏其中的技术主要就是一些函数、双向链表的使用、内存释放和双缓冲技术。
2.1建立基类CGameObject建立基于所有类的父类CGameObject,其中定义了两个纯虚函数作为继承CGameObject类的其他类的某些声明,例如://绘制对象virtual BOOL Draw(CDC* pDC,BOOL bPause)=0;还有//获得矩形区域virtual CRect GetRect()=0;另外还定义了//获得左上角坐标CPoint GetPoint(){return m_ptPos;}以及//加载图像static BOOL LoadImage(CImageList& imgList,UINT bmpID,COLORREF crMask,int cx,int cy,intnInitial);2.2 透明图片贴图此次实训中用于贴图的函数:static BOOL LoadImage(CImageList& imgList,UINT bmpID,COLORREF crMask,int cx,int cy,int nInitial);//此函数主要用于将图片放入图像链表imageList中。
m_Images.Draw(pDC,0,m_ptPos,ILD_TRANSPARENT); //此函数主要是讲m_Images链表中的图像显示在pDC这个句柄中。
ILD_TRANSPARENT表示是透明贴图。
其中主要就是CImageList 图像列表。
它是相同大小图像的一个集合,每个集合中均以0为图像的索引序号基数,图像列表通常由大图标或位图构成,其中包含透明位图模式。
可以利用WINDOWS32位应用程序接口函数API来绘制、建立和删除图像,并能实现增加、删除、替换和拖动图像等操作。
2.3 CObList链表CObList m_ObjList[11];//主要是定义一个CObList类的一个链表对象用于存储所有此种相关的对象,易于后续的添加删除和提取数据。
POSITION bPos1=NULL,bPos2=NULL;//定义指针bPos1=m_ObjList[enBall].GetHeadPosition();//指针读取头结点CBall* pBall = (CBall*)m_ObjList[enBall].GetNext(bPos1);//指针读取下一个节点2.4获得矩形区域函数CRect mRect = m_pMe->GetRect();CRect bRect = pBall->GetRect();CRect tmpRect;tmpRect.IntersectRect(&bRect,mRect)//判断矩形是否有交接CRect GetRect(){return CRect(m_ptPos,CPoint(m_ptPos.x+ENEMY_HEIGHT,m_ptPos.y+ENEMY_HEIGHT));}//例子为获得敌机的矩形区域2.5发射子弹或导弹函数BOOL CMyPlane::Fired(){if(m_nWait==0)return TRUE;elsereturn FALSE;}其中的m_nWait未定义的发射延时变量,即在Draw中m_nWait++;if(m_nWait>3)m_nWait=0;可以控制子弹定时发射2.6 添加爆炸效果技术其实是一种链表的灵活运用,m_ObjList[enExplosion].AddTail(new CExplosion(mRect.left, mRect.top));设置一个放有爆炸对象的链表,在使用的时候直接NEW 一个爆炸对象添加到该链表中方便又实用。
2.7对于对象的绘制以及越出边界的处理//绘制导弹、爆炸、敌机、子弹for(int i=0;i<11;i++){POSITION pos1,pos2;for( pos1 = m_ObjList[i].GetHeadPosition(); ( pos2 = pos1 ) != NULL; ){CGameObject* pObj = (CGameObject*)m_ObjList[i].GetNext( pos1 );if(!pObj->Draw(pMemDC,FALSE)){m_ObjList[i].RemoveAt(pos2);delete pObj;}}}对于所有链表进行遍历,定义Draw函数,并在Draw函数中对于越出边界的对象在FALSE是进行m_ObjList[i].RemoveAt(pos2);删除。
实例:对于敌机的绘制BOOL CEnemy::Draw(CDC* pDC,BOOL bPause){m_nWait++;if(m_nWait>20)m_nWait=0;if(!bPause){m_ptPos.y = m_ptPos.y + m_nMotion * m_V;}if(m_ptPos.y > GAME_HEIGHT+ENEMY_HEIGHT )return FALSE;if(m_ptPos.y < -ENEMY_HEIGHT)return FALSE;m_Images.Draw(pDC,m_nImgIndex,m_ptPos,ILD_TRANSPARENT);return TRUE;}2.8字体的个性化输出函数CRect tc;CFont nfont;HFONT oldfont;pMemDC->SetBkMode(TRANSPARENT);nfont.CreatePointFont(280, _T("正楷"), pMemDC);oldfont = (HFONT)pMemDC->SelectObject(nfont);pMemDC->SetTextColor(255 * 256);pMemDC->SetBkMode(TRANSPARENT);//设置绘图dc的背景模式为透明模式pMemDC->SetTextAlign(TA_CENTER); //设置基准点与限定矩形的中心水平对齐pMemDC->TextOut(GAME_WIDTH / 10, GAME_HEIGHT / 8, _T("SCORE:")); CString SCORE_STR;SCORE_STR.Format(_T("%d"), score);pMemDC->TextOut(GAME_WIDTH / 10+100, GAME_HEIGHT / 8, SCORE_STR); 2.9获取键盘操作函数//获得键的状态1->downint GetKey(int nVirtKey){return (GetKeyState(nVirtKey) & 0x8000)? 1 : 0;}2.10用键盘控制战机的移动//检测四个方向键,移动战机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);}在MyPlane类中定义了:int m_nHorMotion;//飞机水平运行方向0->静止,1->右 -1->左int m_nVerMotion;//飞机垂直运行方向0->静止,1->上 -1->下void SetHorMotion(int nMotion){m_nHorMotion = nMotion;}int GetHorMotion() const{return m_nHorMotion;}void SetVerMotion(int nMotion){m_nVerMotion = nMotion;}int GetVerMotion() const{return m_nVerMotion;}2.11 设置定时器定时器告诉WINDOWS一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。