c++实训报告
程序设计实训实验报告(热门20篇)

程序设计实训实验报告(热门20篇)c语言是在国内外广泛使用的一种计算机语言。
其语言功能丰富、表达能力强、使用灵活方便、既具有高级语言的优点,又具有低级语言的许多特点,适合编写系统软件。
其功能强大,不仅用在计算机上广泛用在电子,机械等方面上,而且,所有的windows,unix,linux,mac,os/2,无一例外,哪一个不是c 语言写的?很多新型的语言如,c++,java,c,j,perl...都是衍生自c语言。
掌握了c语言,可以说你就掌握了很多门语言。
学习c程序这门课一年了,这是我们学的第一门专业课,在大学里c语言不但是计算机专业的必修课程而且也是非计算机专业学习计算机基础的一门必修课程。
所以作为我这个计算机专业的学生来说当然十分重要,老师在第一节课说过,c语言是计算机的基础,大多数软件都需要用c语言来编写,通过一个年的学习,使我由初步掌握简单的应试知识到完成高难度的深入编程,如我们在编写一个较大的程序时应该把它分开成几个小程序来看,这样会容易得多。
同时,我觉得c语言应该是操作和理论相结合的课程,在不断地编写中去思考,两者是不可分割的。
在学习一年c语言的过程中我也在慢慢探索怎样才能学好c语言,并总结了一点经验:要了解c语言就要从语法规为基础来学习起,首先要是要了解它的结构,比如变量,首先要了解变量的定义方式(格式),其意义是什么(定义变量有什么用);其次就是要我要怎么去运用它(我要用什么型式去应用它)。
在c语言的命令行中所有的语句都是有它自己的一定格式和形式出现在我们面前,所以我们在学习某种语句或命令时你首先要了解的就是它的规则是什么、有什么用、怎么实现等。
这些都是语法基础也是c语言的基础如果把它们都了解很好了,那么你编起程序来就很得心应手了。
比如说ifelse和switchcase这两种条件语句都是用来判断执行功能的,那我要什么时侯用if什么时侯用switch呢?如果你很好地了解它们的结构和作用的话那么就知道:若它的条件分支是多个而且条件的值是整数或是一个字符值时就会选switch而不会选if。
计算机c语言实训报告

计算机c语言实训报告计算机c语言实训报告(通用3篇)计算机c语言实训报告篇1一、课题名称:简洁计算器设计一个简洁的程序来模拟计算器的功能。
二、设计目的:1、通过理论学问与实际需求相结合,编辑解决一些日常中的实际问题,培育初步的独立分析和设计力量。
2、了解应用程序设计解决实际问题的详细过程和实现方法,把握应用C语言进行程序设计的基本规范;3、重点把握C语言的程序编写、函数设计、算法设计和程序调试方法;4、初步把握系统开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
三、设计任务:1、通过结构体数组和共用体数组来存放输入的每一数字或运算符号的记录(包括1、2、3等数字,+、--、_、等运算符号),然后将其信息存入文件中。
输入一个算术计算式,就在屏幕上显示结果。
2、输入简洁的加减乘除算术计算式,并在屏幕上显示计算结果;四、设计要求:1、用C语言实现程序设计并进行调试;2、画出查询模块的流程图;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机互交)。
5、完成设计说明书(A4)。
五、代码设计:#include stdio.h main { float x,y;char operator;printf(x,yun suan fu ,y: ); scanf(%f%c%f,x,operator,y); switch(operator){case +: printf(%.2f+%.2f=%.2f,x,y,x+y); break; case -:printf(%.2f-%.2f=%.2f,x,y,x-y); break; case _:printf(%.2f_%.2f=%.2f,x,y,x_y); break; case /: if(y==0)printf(chushushilingwuyiyi); elseprintf(%.2f/%.2f=%.2f,x,y,x/y); break;default: printf(yunsunfuwuxiao); } }?七、设计总结:学习C程序这门课一个学期了,这是我们学的第一门专业课,所以作为我这个计算机系的同学来说当然非常重要,老师在第一节课说过,C语言是计算机的基础,大多数软件都需要用C语言来编写,通过一个学期的学习,使我初步把握了一些关于这门课的学问这次的课程设计是对我们一个学期来所学的学问的综合考察,里面涉及到了我们大多数所学学问。
C#-实训报告

苏州市职业大学课程设计任务书课程名称:计算机语言C#课程设计起讫时间:2011-6-20~~2011-7-1院系:计算机工程系班级:10网站开发(ATA)班指导教师:张苏叶良系主任:李金祥一、课程设计课题本实训要求学生运用C#.NET独立设计、编程开发一个完整的Windows应用程序,并完成实训报告。
可以从以下题目中选择:①绘图板②二十一点游戏③科学计算器④弹珠游戏⑤日记本⑥屏幕保护程序⑦挖地雷游戏⑧调色板⑨文本编辑器⑩井字棋也可自选课题(须征得指导教师同意)不建议选择贪吃蛇、华容道等难度比较高的题目,需要由本人完成大部分代码,不建议根据网上或书上的现成代码调试编写。
二、课程设计要求1、设计选题:学生可以在“《Windows应用程序设计》实训选题”指定的题目中选取实训题目,具体题目以此文件为准。
也可以自选,但自选的题目必须在实训开始前得到指导教师的认可。
2、设计结果:学生需按所选题目的具体要求使用C#完成程序设计,同时还要完成课程设计说明书,以介绍实训的情况,说明书中应该至少包括以下几部分:●题目说明●总体设计:概述程序的基本结构和主要技术。
●详细说明:选择几个功能模块详细说明设计时的想法和所用的技术。
●遇到的问题和解决方法●心得体会3、考核要求学生需提交完整的C#源程序(电子版)和课程设计说明书(打印稿),要求程序运行稳定可靠,能实现题目中所要求的功能。
课程设计说明书符合要求,并能对程序的设计思路或具体代码做出正确的解释。
三、课程设计工作量1、程序中应有不少于100~300行的自行编写的代码。
2、软件界面美观大方,操作简洁易用,功能完备可靠。
3、说明书中摘用关键代码部分,应标注详细的代码说明。
4、实训报告以A4纸打印,其中正文不少于6页,正文主要用于解释实现思路和关键代码,完整代码作附件。
四、课程设计说明书内容(有指导书的可省略)课程设计说明书中至少应该包括以下几部分:1、封面2、摘要3、目录4、选题说明5、总体设计:概述程序的基本结构和主要技术。
c语言实训报告

c语言实训报告一、实训介绍作为计算机专业学生,我们需要熟练掌握各种编程语言,其中C语言是所有计算机专业学生必须学会的语言之一。
为了更好地掌握C语言的使用,我们参加了C语言实训。
本次实训分为理论学习和实践操作两部分,理论学习主要涵盖C语言的基本语法、数据类型、运算符、流程控制等内容,实践操作部分则要求我们通过编写各种程序来巩固所学知识并提高编程能力。
二、实训过程1. 理论学习在理论学习阶段,我们通过老师讲解和课堂互动的方式掌握了C语言的基本概念和语法规则,并进行了主要控制语句的讲解和练习。
同时,我们通过一些实例掌握了C语言的运算符和数据类型,并学会如何使用它们来编写程序。
2. 实践操作实践操作阶段是整个实训的重点和难点,主要包括以下几个方面的内容:(1)程序编写在实践操作过程中,老师为我们提供了多个练习题目,包括简单的判断语句、循环语句、数组等等。
我们需要通过编写代码来实现这些题目的要求,并进行调试修改,直到程序执行无误为止。
(2)实验报告为了让我们更好地掌握C语言的应用,老师还要求我们编写实验报告,记录我们在实践过程中遇到的问题和解决方案,以及程序设计的思路和实现过程。
通过编写实验报告,我们不仅可以更好地回顾和总结实践操作,还能提高我们的文字表达能力。
三、实训体会通过参加C语言实训,我对C语言的掌握更加深刻,不仅能灵活运用其语法和控制语句,还能熟练使用其常用函数和数据类型。
在实践操作中,我也锻炼了自己的程序设计和调试能力,并学会了一些解决问题的方法和技巧。
同时,我也认识到了C语言编程并不是简单的代码拼接,要求我们具备较强的逻辑思维能力和耐心,只有不断地进行练习和思考,才能在C语言编程中达到自己的目标。
四、总结通过C语言实训,我不仅掌握了C语言的基础知识和应用技巧,还培养了自己的创新思维和问题解决能力。
在未来的学习和工作中,我会继续学习和应用C语言,不断提升自己的编程水平,并为计算机行业的发展做出自己的贡献。
C语言程序设计实训报告

(1)掌握C语言中的基本数据输入、输出;
(2)熟练使用C语言中的数组;
(3)熟练使用C语言中的函数;
(4)熟练使用C语言中的指针;
(5)熟练使用C语言中的结构体。
实训内容(过程及步骤)
设计题目:简单计算器
1、基本思路:
先自定义好加、减、乘、除、求余、求周长、求面积等函数。在写主函数调用前面的自定义函数,进行计算,选择好计算种类,输入2个数回车进行计算得到结果。
for(b=0;;)
{
printf("请您选择");
scanf("%d",&b);
if(b==1)
sum();
if(b==2)
jianfa();
elseif(b==3)
cheng();
elseif(b==4)
chu();
elseif(b==5)
yu();
elseif(b==6)
sanjiao();
elseif(b==7)
scanf("%d",&a[0]);
scanf("%d",&a[1]);
printf("%d求余%d=%d\n",a[0],a[1],a[0]%a[1]);
}
voidsanjiao()
{
floatx[3],a,b,c,s,p;
printf("您选择了求三角面积\n");
printf("请输入三边长度:\n");
第二步:选择计算类型
第三步:输入数据进行计算。
第九步:保存数据
第十步:导出数据
4、遇到困难:
在进行此次实训的过程中我遇到了许多的问题,比如没有定义函数名就进行函数的编译,以至于等到运行时找了很久都没有找到错误。以及如何用函数把变量传送到到指定的地址等等。
7月C语言学习社会实践报告

7月C语言学习社会实践报告【标题】7月C语言学习社会实践报告【引言】在本次暑假期间,我参加了一项社会实践活动,进行了C语言的学习。
通过这次实践,我深入了解了C语言的基本知识和应用场景,并运用所学知识完成了一些小项目。
本报告旨在总结我在实践中的收获和体会,对于其他学习者进行参考和借鉴。
【目标】通过参加社会实践,系统学习C语言,并应用所学知识完成小项目。
【具体内容】1. 学习过程1.1 制定学习计划:根据C语言的基本教材和实践项目要求,制定了一个详细的学习计划,包括每天的学习时间和学习内容。
1.2 学习基本语法:通过阅读教材及相关教程,掌握了C语言的基本语法规则,理解了变量、数据类型、运算符等概念。
1.3 编写简单程序:通过编写一些简单的程序来巩固所学知识,如计算器、猜数字等小项目。
2. 实践项目2.1 学生成绩管理系统:根据实际需求,编写了一个简单的学生成绩管理系统,能够实现学生信息的录入、查询和修改。
2.2 游戏开发:参考教材中的案例,实现了一个简单的小游戏,玩家需要通过键盘操作控制角色完成任务。
2.3 文件处理:利用C语言的文件处理功能,实现了一个文件复制程序,能够将指定文件复制到指定目录。
3. 收获与体会3.1 掌握了C语言的基本语法和编程思想,能够独立编写简单的程序。
3.2 了解了C语言的应用场景,如系统开发、游戏开发等,对于今后的学习和就业有了更清晰的目标。
3.3 实践中遇到的问题,如编译错误、逻辑错误等,锻炼了我的问题解决能力和调试技巧。
【结论】通过本次社会实践,我对C语言的基础知识和应用有了深入了解,并成功应用所学知识完成了一些小项目。
在今后的学习和工作中,我将继续深化对C语言的学习,并希望能够进一步掌握其高级特性和应用。
c语言实训报告触模屏界面设计

c语言实训报告触模屏界面设计实训报告:C语言触模屏界面设计一、实训背景随着科技的不断发展,触摸屏技术在智能设备中的应用越来越广泛。
触摸屏具有操作直观、使用便捷等特点,可以提供更好的用户交互体验。
本次实训旨在通过C语言设计触摸屏界面,实现用户与程序的交互操作。
二、实训目标1. 学习掌握触摸屏原理和使用C语言进行触摸屏界面设计的基本知识;2. 设计一个简单的触摸屏界面,实现用户输入和指令响应的功能;3. 使用C语言编程,实现触摸屏界面的交互逻辑。
三、实训内容1. 触摸屏原理的学习触摸屏是通过触摸屏上的触点和操控对象之间的物理接触或者电容变化来实现用户输入的,具体的原理及类型可以根据实际情况进行学习。
2. C语言触摸屏界面设计根据实际需求,设计一个简单的触摸屏界面。
可以包括菜单页面、选项页面、输入页面等。
通过触摸屏输入,实现界面的切换和指令的响应。
在设计界面时,可以使用C语言的图形库或者在终端中实现界面的绘制。
3. 界面交互逻辑的编写通过编写C语言程序,实现触摸屏界面的交互逻辑。
包括触摸屏输入的处理、菜单切换、选项选择、输入验证等功能。
可以根据实际需求,编写相应的逻辑代码。
在编写过程中,需要注意合理的代码结构和逻辑优化。
四、实训成果完成一个简单的触摸屏界面设计,实现用户的输入和指令的响应。
通过实际测试和操作,验证界面的功能和稳定性。
并撰写实训报告,总结实训过程中的经验和问题。
五、实训总结通过本次实训,我学习了触摸屏原理和C语言触摸屏界面设计的基本知识,并成功完成了一个简单的触摸屏界面设计。
实训过程中,我遇到了一些问题,如界面的响应速度、界面的布局等,通过不断的尝试和调整,最终解决了这些问题。
通过实际操作,我深刻体会到了触摸屏界面设计的重要性,以及合理的交互逻辑对用户体验的影响。
这对我今后的学习和工作都具有积极的意义。
C语言学习社会实践报告

C语言学习社会实践报告
社会实践活动题目:C 语言学习活动
社会实践日期:2022 年 5 月 15 日
地点:某某中学
活动内容:
1. 活动介绍:本次社会实践活动是由某某中学计算机社团组织的 C 语言学习活动,旨在帮助学生们了解和学习 C 语言编程知识,提升其编程能力和逻辑思维能力。
2. 活动安排:
- 上午:编程导师介绍 C 语言基础知识和语法规则,学生们跟随导师完成简单的编
程练习。
- 下午:学生们根据实际情况,自行组队完成一个小型编程项目,展示并分享成果。
3. 收获与感受:
- 学生们通过活动学习了 C 语言编程知识,掌握了基本的编程技能,增强了对编程
的兴趣和自信心。
- 参与者们有机会与其他同学合作,体验团队合作的重要性,培养了沟通和协作能力。
- 通过实践的方式巩固了课堂学习的知识,加深了对编程的理解和掌握。
结语:本次 C 语言学习活动不仅帮助学生们提升了技能,增强了团队合作能力,还为
他们未来的学习和发展打下了坚实的基础。
通过参与此类实践活动,学生可以更好地
把理论知识转化为实际应用能力,培养综合素质,提高竞争力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实训报告飞机大战游戏设计与开发专业名称:数学与应用数学____班级:数学2011级__________ 学号:201101051222 _________ 姓名:王键_________信息科学与工程学院二零一三年十二月目录概述------------------------------------------------------------------------------------------------------3 相关技术------------------------------------------------------------------------------------------------3 总体设计与详细设计---------------------------------------------------------------------------------6 编码实现------------------------------------------------------------------------------------------------7 实训中遇到的问题与解决办法---------------------------------------------------------------------12 实训体会------------------------------------------------------------------------------------------------121. 概述1.1 总体概述本次实训项目是做一个飞机大战的游戏,应用MFC编程,完成一个界面简洁流畅、游戏方式简单,玩起来易于上手的桌面游戏。
该飞机大战项目运用的主要技术即是MFC编程中的一些函数、链表思想以及贴图技术。
1.2 功能简介(1)设置一个战机具有一定的速度,通过键盘,方向键可控制战机的位置,空格键发射子弹。
(2)界面中敌机出现的位置,以及敌机炸弹的发射均为随机的,敌机与敌机炸弹均具有一定的速度,且随着关卡难度的增大,数量和速度均增加。
(3)对于随机产生的敌机和敌机炸弹,若超过矩形区域,则释放该对象。
(4)添加爆炸效果,包括战机子弹打中敌机爆炸、敌机炸弹打中战机爆炸、战机与敌机相撞爆炸以及战机子弹与敌机炸弹相撞爆炸四种爆炸效果。
且爆炸发生后敌机、子弹、炸弹均消失,战机生命值减一。
2.相关技术2.1 Windows定时器技术Windows定时器是一种输入设备,它周期性地在每经过一个指定的时间间隔后就通知应用程序一次。
程序将时间间隔告诉Windows,然后Windows给您的程序发送周期性发生的WM_TIMER消息以表示时间到了。
本程序中使用多个定时器,分别控制不同的功能。
在MFC 的API函数中使用SetTimer()函数设置定时器,设置系统间隔时间,在OnTimer()函数中实现响应定时器的程序。
2.2 透明贴图实现技术绘制透明位图的关键就是创建一个“掩码”位图(mask bitmap),这个“掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。
在详细介绍实现过程之前先介绍下所使用的画图函数以及函数参数所代表的功能;整个绘制过程需要使用到BitBlt()函数。
整个功能的实现过程如下:(1) 创建一张大小与需要绘制图像相同的位图作为“掩码”位图;(2) 将新创建的“掩码”位图存储至掩码位图的设备描述表中;(3) 把位图设备描述表的背景设置成“透明色”,不需要显示的颜色;(4) 复制粘贴位图到“掩码”位图的设备描述表中,这个时候“掩码”位图设备描述表中存放的位图与位图设备描述表中的位图一样;(5) 把需要透明绘制的位图与对话框绘图相应区域的背景进行逻辑异或操作绘制到对话框上;(6) 把“掩码”位图与这个时候对话框相应区域的背景进行逻辑与的操作;(7) 重复步骤5的操作,把需要透明绘制的位图与对话框绘图相应区域的背景进行逻辑异或操作绘制到对话框上;(8) 最后把系统的画笔还给系统,删除使用过的GDIObject,释放非空的指针,最后把新建的设备描述表也删除。
2.3 CObList链表MFC类库中提供了丰富的CObList类的成员函数,此程序主要用到的成员函数如下:(1) 构造函数,为CObject指针构造一个空的列表。
(2) GetHead(),访问链表首部,返回列表中的首元素(列表不能为空)。
(3) AddTail(),在列表尾增加一个元素或另一个列表的所有元素。
(4) RemoveAll(),删除列表中所有的元素。
(5) GetNext(),返回列表中尾元素的位置。
(6) GetHeadPosition(),返回列表中首元素的位置。
(7) RemoveAt(),从列表中删除指定位置的元素。
(8) GetCount(),返回列表中的元素数。
在CPlaneGameView.h文件中声明各游戏对象与游戏对象链表:(1)//创建各游戏对象CMyPlane *myplane;CEnemy *enemy;CBomb *bomb;CBall *ball;CExplosion *explosion;(2)//创建存储游戏对象的对象链表CObList ListEnemy;CObList ListMe;CObList ListBomb;CObList ListBall;CObList ListExplosion;2.4获取矩形区域首先,使用CRect定义一个对象,然后使用GetClientRect(&对象名)函数,获取界面的矩形区域rect.Width() 为矩形区域的宽度,rect.Height()为矩形区域的高度。
使用IntersectRect(&,&))函数来判断两个源矩形是否有重合的部分。
如果有不为空,则返回非零值;否则,返回0。
2.5内存释放在VC/MFC用CDC绘图时,频繁的刷新,屏幕会出现闪烁的现象,CPU时间占用率相当高,绘图效率极低,很容易出现程序崩溃。
及时的释放程序所占用的内存资源是非常重要的。
在程序中使用到的链表、刷子等占用内存资源的对象都要及时的删除。
Delete Brush,List.removeall()等。
2.6 CImageList处理爆炸效果爆炸效果是连续的显示一系列的图片。
如果把每一张图片都显示出来的话,占用的时间是非常多的,必然后导致程序的可行性下降。
CImageList是一个“图象列表”是相同大小图象的集合,每个图象都可由其基于零的索引来参考。
可以用来存放爆炸效果的一张图片,使用Draw()函数来绘制在某拖拉操作中正被拖动的图象,即可连续绘制出多张图片做成的爆炸效果。
2.7对话框的应用在设置游戏难度、炸弹的速度等,使用对话框进行设置非常方便,又体现出界面的友好。
对话框的应用过程如下:(1). 资源视图下,添加Dialog对话框。
然后添加使用到的控件,并修改控件的ID 以便于后面的使用。
(2). 为对话框添加类,在对话框模式下,点击项目,添加类。
(3). 在类视图中,为对话框类添加成员变量(控件变量)。
设置变量的名称、类型、最值等信息。
(4). 在资源视图菜单中,选择相应的菜单项,右击添加时间监听程序,设置函数处理程序名称。
(5). 在处理程序函数中添加相应的信息。
3.总体设计与详细设计3.1 系统模块划分该飞机大战游戏程序分为游戏背景位图绘制模块、各游戏对象绘制模块、游戏对象之间的碰撞模块、爆炸效果产生模块、游戏界面输出玩家得分关卡信息模块。
其中在游戏对象绘制模块中,战机是唯一对象,在游戏开始时产生该对象,赋予其固定的生命值,当其与敌机对象、敌机炸弹碰撞时使其生命值减一,直至生命值为零,便删除战机对象。
敌机对象与敌机炸弹对象的绘制中采用定时器技术,定时产生。
爆炸对象初始化为空,当游戏过程中即时发生碰撞时,在碰撞位置产生爆炸对象,添加到爆炸链表中。
3.2 主要功能模块3.2.1 系统对象类图CGameObject是各个游戏对象的抽象父类,继承自CObject类,其他的类:战机类、敌机类、爆炸类、子弹类、炸弹类、文字类都继承了此类。
每个游戏对象类中既继承了来自父类CGameObject的属性,又有自己的特有属性和方法。
3.2.3 系统部分流程图(1)该飞机大战游戏执行流程图:生成我机(按下空格键发射子弹,方向键移动)->随即生成敌机(随机发射子弹)->定时器内碰撞检测(我机与敌机,我机与敌机炸弹,敌机与我机导弹)->我机被碰后健康值-1(初始值为3)->敌机被撞后直接销毁->若我机健康值<=0,游戏结束(2)利用定时器定时产生敌机并绘制敌机流程图每2000毫秒生成一只敌机,敌机在某一运动范围内随即发射炸弹攻击我机,玩家可控制我机向敌机发射导弹进行反击,每200毫秒(已通过测试,这个时间可以检测到所有的碰撞行为,每两个对象的接触时间都大于200毫秒)进行一次碰撞检测,并从内存值移除销毁对象,已达到内存的循环利用4.编码实现(主要编码)void CtestView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags){CtestDoc *pDoc = GetDocument();ASSERT_VALID(pDoc);if(!pDoc) return;switch(nChar){ //case VK_LEFT:pDoc->p1.setX(pDoc->p1.getX()-pDoc->p1.speed); break;case VK_RIGHT:pDoc->p1.setX(pDoc->p1.getX()+pDoc->p1.speed); break;case VK_UP:pDoc->p1.setY(pDoc->p1.getY()-pDoc->p1.speed); break;case VK_DOWN:pDoc->p1.setY(pDoc->p1.getY()+pDoc->p1.speed); break;case VK_SPACE:{if(delay >=5){delay = 0;missile *m = new missile;m->setX(pDoc->p1.getX()+20);m->setY(pDoc->p1.getY());m->Draw(pMemDC);pDoc->mlist.AddTail(m);}break; }default: break;}if(pDoc->p1.getX()<=20&&pDoc->p1.getX()>=-200) pDoc->p1.setX(20);else if(pDoc->p1.getX()>=1000) pDoc->p1.setX(1000);if(pDoc->p1.getY()<=30) pDoc->p1.setY(30);else if(pDoc->p1.getY()>=500) pDoc->p1.setY(500);//this->Invalidate();CView::OnKeyDown(nChar, nRepCnt, nFlags);}void CtestView::OnInitialUpdate(){explosion::Loadimage();enemy::LoadImageW();missile::LoadImageW();bomb::LoadImage();this->SetTimer(1,50,NULL);this->SetTimer(2,200,NULL);this->SetTimer(3,2000,NULL);pDC = new CClientDC(this);pMemDC = new CDC;pMemDC->CreateCompatibleDC(pDC);pMemBitmap = new CBitmap;CRect ck;this->GetClientRect(&ck);pMemBitmap->CreateCompatibleBitmap(pDC,ck.Width(),ck.Height());pMemDC->SelectObject(pMemBitmap);CView::OnInitialUpdate();}void CtestView::OnTimer(UINT_PTR nIDEvent){CtestDoc *pDoc = GetDocument();ASSERT_VALID(pDoc);if(!pDoc) return;CRect ck,re;POSITION p1,p2,p3;this->GetClientRect(&ck);switch(nIDEvent){case 1: {delay++;Delay++;pMemDC->FillSolidRect(ck,RGB(0,0,0));for(POSITION pos = pDoc->elist.GetHeadPosition();pos!=NULL;){explosion *etemp = (explosion *)pDoc->elist.GetNext(pos);etemp->setRT();if(etemp->getRT()<8){etemp->Draw(pMemDC,false);}}for(POSITION pos = pDoc->enlist1.GetHeadPosition();pos!=NULL;){enemy *en = (enemy *)pDoc->enlist1.GetNext(pos);en->Draw(pMemDC,false);if(en->getIM () == 0 && en->getY() >0 && en->getY()<100 && Delay%10 == 0){bomb *b = new bomb;pDoc->blist.AddTail(b);b->setSpeed(7);b->setX(en->getX()+15);b->setY(en->getY()+35);b->Draw(pMemDC);}if(en->getIM () == 1 && en->getY() >400 && en->getY()<500 && Delay%10 == 0) {bomb *b = new bomb;pDoc->blist.AddTail(b);b->setSpeed(-7);b->setX(en->getX()+15);b->setY(en->getY());b->Draw(pMemDC);}}for(POSITION pos = pDoc->blist.GetHeadPosition();(p3=pos)!=NULL;) //{bomb *btemp = (bomb *)pDoc->blist.GetNext(pos);btemp->Draw(pMemDC);btemp->setY(btemp->getY()+btemp->getSpeed());if(re.IntersectRect(pDoc->p1.GetRect(),btemp->GetRect())!=0){pDoc->blist.RemoveAt(p3);life--;if(life <= 0){explosion*e1=new explosion(pDoc->p1.getX(),pDoc->p1.getY());pDoc->elist.AddTail(e1);pDoc->p1.setX(-10000);}}}for(POSITION pos = pDoc->mlist.GetHeadPosition();pos!=NULL;){missile *mtemp = (missile *)pDoc->mlist.GetNext(pos);mtemp->Draw(pMemDC);}pDC->BitBlt(0,0,ck.Width(),ck.Height(),pMemDC,0,0,SRCCOPY);if(life<=0){pDoc->gm.Draw(pMemDC);}break;}case 2:{for(POSITION pos0 =pDoc->enlist1.GetHeadPosition();(p1=pos0)!=NULL;){enemy *en = (enemy *)pDoc->enlist1.GetNext(pos0);for(POSITION pos1 =pDoc->mlist.GetHeadPosition();(p2=pos1)!=NULL;){missile *m = (missile *)pDoc->mlist.GetNext(pos1);if(rect.IntersectRect(m->GetRect(),en->GetRect())!=0){explosion *e1 = new explosion(en->getX(),en->getY());pDoc->elist.AddTail(e1);pDoc->mlist.RemoveAt(p2);pDoc->enlist1.RemoveAt(p1);}}{if(rect.IntersectRect(pDoc->p1.GetRect(),en->GetRect())!=0){explosion *e1 = new explosion(en->getX(),en->getY());pDoc->elist.AddTail(e1);pDoc->enlist1.RemoveAt(p1);life--;if(life <= 0){pDoc->p1.setX(-10000);}}}}break;}case 3: {enemy *en1 = new enemy;pDoc->enlist1.AddTail(en1);en1->Draw(pMemDC);break;}default: break;}pDoc->p1.Draw(pMemDC); / pDC->BitBlt(0,0,ck.Width(),ck.Height(),pMemDC,0,0,SRCCOPY);CView::OnTimer(nIDEvent);}void CtestView::OnDestroy(){CView::OnDestroy();this->KillTimer(1);this->KillTimer(2);this->KillTimer(3);delete pDC;delete pMemDC;delete pMemBitmap;CtestDoc *pDoc = GetDocument();ASSERT_VALID(pDoc);if(!pDoc)return;for(POSITION pos = pDoc->elist.GetHeadPosition();pos!=NULL;){explosion *etemp = (explosion *)pDoc->elist.GetNext(pos);delete etemp;}for(POSITION pos = pDoc->enlist1.GetHeadPosition();pos!=NULL;){enemy *entemp = (enemy *)pDoc->enlist1.GetNext(pos);delete entemp;}for(POSITION pos = pDoc->blist.GetHeadPosition();pos!=NULL;){bomb *btemp = (bomb *)pDoc->blist.GetNext(pos);delete btemp;}for(POSITION pos = pDoc->mlist.GetHeadPosition();pos!=NULL;){missile *mtemp = (missile *)pDoc->mlist.GetNext(pos);delete mtemp;}}5.实训中遇到的主要问题及解决方法5.1碰撞检测中遇到了检测不准确的问题当时纠结了很长时间,最后也是通过孙老师帮忙调试才找到了错误,由于在飞机类中自己定义了坐标属性x,y,与继承的属性发生冲突,导致实际位置与看到的贴图位置不一致,因此发生碰撞检测错误。