程序设计综合实践报告

合集下载

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

程序设计实训实验报告(热门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。

《基础程序设计综合实践》实践报告范文

《基础程序设计综合实践》实践报告范文

实践报告:基础程序设计综合实践一、引言本报告是针对《基础程序设计综合实践》课程的实践内容进行总结和分析。

通过该实践,我对基础程序设计的知识有了更深入的理解,并且掌握了实际应用的能力。

二、实践目标本次实践的主要目标是:1. 学习并掌握基础程序设计语言(如C、Java等)的基本语法和特性;2. 熟悉常见的程序设计模式和算法;3. 运用所学知识完成一系列实际案例的编程任务。

三、实践过程在实践过程中,我按照以下步骤进行了学习和实践:1. 学习基础程序设计语言的语法和特性:我通过阅读教材和参考资料,系统地学习了所选的程序设计语言的基本语法和常用特性。

这包括变量定义、控制流程、函数调用等内容。

2. 学习程序设计模式和算法:为了提高程序的可维护性和扩展性,我学习了一些常见的程序设计模式和算法。

例如,单例模式、观察者模式、递归算法等。

这些模式和算法对于解决实际问题非常有帮助。

3. 完成编程任务:根据教师布置的编程任务,我运用所学知识完成了一系列实际案例的编程任务。

这些任务涵盖了不同难度和领域的问题,包括数据结构、图像处理、网络编程等。

在完成任务的过程中,我不断调试和优化代码,提高程序的效率和可读性。

四、实践收获通过《基础程序设计综合实践》的实践,我获得了以下收获:1. 熟练掌握了基础程序设计语言的语法和特性,能够独立编写简单到中等复杂程度的程序;2. 掌握了常见的程序设计模式和算法,能够灵活运用它们解决实际问题;3. 增强了问题分析和解决的能力,学会了如何将实际问题转化为计算机程序;4. 加深了团队协作和沟通能力,在与同学一起完成编程任务时,学会了合理分工和交流合作。

五、总结与展望通过《基础程序设计综合实践》的实践,我不仅巩固了基础程序设计的知识,还培养了实际应用的能力。

在未来,我将继续深入学习程序设计的高级知识和技术,不断提升自己的编程水平。

同时,我也会积极参与开源项目和编程竞赛,锻炼自己在实际项目中的编程能力。

程序设计实践报告总结

程序设计实践报告总结

程序设计实践报告总结
一、实践总结
1、本次实践对象是一个基于C语言的学生成绩管理系统。

2、实践过程中,我们首先熟悉了系统的框架结构和功能,然后进行相应的测试,确定程序的功能要求,并将具体的功能要求针对性分解为各种函数,再慎重地进行程序的设计和编程。

3、在实践过程中,我们使用了结构体、置换排序、字符串操作等基本C语言编程技术,并且在抽象的思维上理清了程序的各个函数之间的联系,从而实现正确的程序设计。

4、通过本次实践,我们深深地体会到程序设计的复杂性,了解到程序设计中逻辑思维和计算机思维的重要性,也提高了程序设计能力。

二、总结与体会
1、本次实践让我们更加深刻地体会到计算机程序设计的重要性。

程序设计是实现软件功能的关键,也是软件开发的核心,程序设计的过程要求我们有良好的抽象思维和计算机思维,在程序设计中,我们要拆分问题,确定程序功能,并将功能要求分解为各种函数,从而使程序更加清晰,更具可操作性。

2、实践过程中,我们还学习了一些C语言的基本编程技术,比如结构体、置换排序、字符串操作等,这些技术在今后的程序设计中可以灵活地运用。

3、本次实践让我们更加清楚地认识到,程序设计是一门艺术,
需要充分发挥自己的创造性,要求我们思考问题,针对性分析问题,并且积极参与程序设计的实践,把知识积累起来,从而提高自己的能力。

C语言程序设计实习报告

C语言程序设计实习报告

C语言程序设计实习报告一、实习目的1. 巩固和加深对C语言程序设计的理解。

2. 掌握C语言编程的基本技巧和方法。

3. 提高分析问题、解决问题的能力。

4. 学会将理论知识应用于实际编程中。

二、实习内容XXX语言基础语法练习变量、数据类型、运算符、表达式等基础语法练习。

控制结构(顺序、分支、循环)的实现。

函数的定义和调用方式练习。

2. 模块化程序设计将一个大的程序分解成多个模块,每个模块完成特定的功能。

通过模块间的调用和传递数据来实现整个程序的功能。

3. 文件操作与文件读写文件的打开、关闭、读写操作练习。

文件格式的转换和数据统计处理。

4. 预处理指令与宏定义使用预处理指令进行条件编译和宏定义替换。

练习使用常见的预处理指令如include、define、ifdef等。

5. 结构体、链表与指针结构体的定义和使用。

链表的创建、插入、删除、遍历等操作。

指针的概念和指针运算。

深入理解指针与数组、结构体等数据结构的关系。

6. 位运算与嵌入式系统编程学习位运算符的使用和位段操作的实现。

嵌入式系统的基本概念和编程方法。

7. 综合项目实践参与或独立完成一个综合性C语言程序设计项目。

项目可以包括基于命令行参数的程序设计、基于文件操作的程序设计、基于网络编程的程序设计等。

三、实习过程1. 理论学习:通过教材、网络资源等途径学习C语言的基础知识和编程技巧。

2. 上机实践:在计算机上编写和调试C语言程序,不断巩固所学知识。

3. 问题解决:遇到问题时,通过查阅资料、请教老师或同学等方式解决问题。

4. 团队合作:在小组项目中与他人协作,共同完成任务。

四、实习收获1. 知识技能方面:深入理解了C语言的基本概念和编程技巧,掌握了模块化程序设计和文件操作等常用算法。

2. 解决问题能力方面:学会了如何分析问题、寻找解决方案并通过实践验证解决方案的正确性。

3. 团队协作能力方面:学会了与他人合作,共同完成任务,提高了团队协作能力。

4. 职业素养方面:培养了耐心、细致的工作态度和勇于尝试、敢于创新的探索精神。

程序设计综合设计实训报告

程序设计综合设计实训报告

一、实训目的本次程序设计综合设计实训旨在通过实际项目开发,巩固和深化程序设计相关理论知识,提高学生的编程能力、团队协作能力和问题解决能力。

通过实训,使学生能够熟练掌握程序设计的基本方法、技巧和工具,为今后从事软件开发工作打下坚实基础。

二、实训内容本次实训项目为“学生信息管理系统”,主要包括以下功能:1. 学生信息录入:包括姓名、性别、年龄、班级、学号、联系方式等基本信息。

2. 学生信息查询:根据姓名、学号、班级等条件查询学生信息。

3. 学生信息修改:对已录入的学生信息进行修改。

4. 学生信息删除:删除不需要的学生信息。

5. 数据备份与恢复:对系统数据进行备份和恢复,确保数据安全。

6. 用户权限管理:设置不同用户的登录权限,包括管理员、教师、学生等。

三、实训过程1. 项目需求分析在实训开始前,我们对项目进行了详细的需求分析,明确了项目目标、功能模块、性能指标等。

通过与指导老师、团队成员的讨论,明确了以下需求:(1)系统应具备良好的用户界面,操作简单易懂。

(2)系统应具备数据备份与恢复功能,确保数据安全。

(3)系统应具备用户权限管理功能,满足不同用户的需求。

2. 系统设计根据需求分析,我们制定了以下系统设计方案:(1)采用B/S架构,前端使用HTML、CSS、JavaScript等技术,后端使用Java语言和MySQL数据库。

(2)使用MVC设计模式,将系统分为模型(Model)、视图(View)和控制器(Controller)三个部分。

(3)使用Spring框架进行项目开发,简化开发过程。

3. 系统开发在系统开发过程中,我们遵循以下步骤:(1)前端开发:完成页面布局、样式设计、交互逻辑等。

(2)后端开发:完成业务逻辑处理、数据库操作、接口设计等。

(3)测试与调试:对系统进行功能测试、性能测试、安全测试等,确保系统稳定可靠。

4. 团队协作在实训过程中,我们遵循以下团队协作原则:(1)明确分工:根据团队成员的特长,合理分配任务。

程序设计实践实验报告(2)

程序设计实践实验报告(2)

程序设计实践实验报告(2)程序设计实践实验报告2000字从这次实训中我知道了,我们在学校学习和在工作岗位上学习是不一样的;在单位上,是没有人会像老师一样倾其所有的教你,也不会有人花时间手把手的教你,但是你做错了就会有责怪,这种转变让我有点措手不及。

人总是能在逆境中成长,责怪一多,我也慢慢的地去学习,努力的把工作做的细致一点,尽自己最大的能力去把工作做得完美一些,让自己和领导都舒心一点。

在学校,你可以随时不去上课,也可以随时早退或旷课;但是在单位上,你一定会准时甚至提前去。

在学校,你没有准时完成作业,还可以补一补,但是在工作上,你没有准时完成工作,那么就是你的过失,你的能力问题,就算是加班熬通宵,你也必须把任务完成,这就是责任。

这就是工作与学校里的最根本的区别,也是从学生转变成劳动者必须经历的阶段。

通过这次实训,我能感觉得到很多的工作经验,但是在开发中的知识我们了解的还是不够充分,致使我们在开发初期要较多的时间用于入门。

更加让我觉得在学校学习基本知识是非常重要的。

再次我也更加深刻的意识到我们学校部分学生普遍基础理论知识较多,工程经验不足的现象,我们同学大可以去掉以往羞于参与工程,怕在别人前认短的心态,我们应该积极的参加学校的实践活动,多多参与老师的项目,有了这一些知识,我们一般在工程面前还是能很快入手的,而为了更好的进行开发,我们也应该在校期间就多进行一些工程方面的锻炼,培养实际动手能力。

虽然只是短短的两个星期,以前有些知识点以前没有学过,但我也没有去研究,实训时突然间觉得自己真的有点无知,虽然现在去看依然可以解决问题,但要浪费许多时间,这一点是我必须在以后的学习中加以改进的地方,同时也要督促自己在学习的过程中不断的完善自我。

另外一点,也是在实训中必不可少的部分,就是同学之间的互相帮助。

所谓”当局者迷,旁观者清”,有些东西感觉自己做的是时候明明没什么错误,偏偏程序运行时就是有错误,让其他同学帮忙看了一下,发现其实是个很小的错误。

程序设计实训报告(9篇)

程序设计实训报告(9篇)

程序设计实训报告(9篇)【导语】程序设计实训报告怎么写出亮点?整理了9篇优秀的《程序设计实训报告》通用版范文,有规范的开头结尾写法和标准的书写格式。

是您写出深受大家欢迎的综合报告抱负参考模板,盼望对您有所关心。

【第1篇】程序设计实训报告程序设计实训报告1一,实训目的:加深对可视化编程技术基本学问的理解,把握运用vb开发应用程序的基本方法及基本技巧。

二,实训时间:20xx年10月20xx年11月三,实训方式:上机操作四,实训类容:这次在杨立雄老师的带领下,利用vb开发工具与数据库sql开发一个使用的小型管理信息系统。

我选择了学籍管理系统。

它的功能要求如下:1,学籍信息输入:实现同学基本状况的输入。

包括各个同学的状况,姓名,家庭号码,家庭住址,学号等各个信息。

2,学籍信息管理:本模块实现了信息的修改,删除,查询。

还有个人信息。

把信息统计这个繁琐的工作简洁化,为同学信息的管理方面提高工作效率。

3,学籍信息查询:通过输入学号便可以查询到这个同学的全部信息,包括姓名,性别,诞生年月,班级,入学日期,联系电话,嘉奖和成果表都一目了然,很大的便利了教工们查询同学信息的过程。

4,统计查询:实现查询全班人数,男女生比例等。

五,实训体会:这次实训,感觉既好玩又有些辛苦。

这还是老师担忧我们适应不了所以没教那么多学问,即使这样我们仍学到了比以前上学时更多的学问,而且这些学问有好多都是我们自己去领悟的到的。

我也知道有人比我们更累,所以我自觉得还是挺好的。

经过这次的实训,我真真实切的感受到了计算机在我们生活中工作中的运用,这些软件,程序能让我们提高工作的效率,更直观更便捷切入主题。

这次我们学习的是数据源的原理及应用的各方面学问,由老师带着我们不断操作。

vb能有效的组织,管理和共享数据库信息,能把数据库信息与ado结合在一起,实现数据库信息的共享。

同时,vb概念清楚,简洁易学,使用。

是适合企业管理人员,数据库管理员使用的首选。

程序员的实习报告三篇(程序设计实训报告总结)

程序员的实习报告三篇(程序设计实训报告总结)

【实用】程序员的实习报告三篇(程序设计实训报告总结)>程序员的实习报告篇1时间一晃而过,转瞬间到公司已经两个多月了。

这是我人生中弥足珍贵的一段经受。

在这段时间里各级领导在工作上赐予了我极大的关怀,在生活上赐予了我极大的关怀,让我充分感受到了领导们“海纳百川”的胸襟,感受到了大发人“不经受风雨,怎能见彩虹”的豪气。

在对公司各级领导肃然起敬的同时,也为我有机会成为公司的一份子而傲慢。

在段时间里,在领导和同事们的悉心关怀和指导下,通过自身的努力,各方面均取得了确定的进步。

来这个公司虽然才短短两个月,收获挺多的,由对项目的一窍不通到现在对它的流程以及相关的技术都有所了解,也让我深深体会到了沟通自学的重要性。

所以我们每一步都有要集中留意力,争取把每一步都做好。

刚开头我们做这个程序的时候,大家都比较盲目,只是负责人说了一下,我们就开头进行编了在这个过程之种我们吃了许多的苦,有时候凌晨三四点我们还在加班,可最终做出的作品是输入速度太慢,我们的主管于是带领我们到他们一楼的微机室是去看他们以前编写的程序;不看不知道,一看吓了我们一大跳,以前我们那有这样想过呀,只要能做出来,没有错误就行了,可是速度呢?人家一个小时输入的东西,我们的程序可能需要一个早晨,看完之后主管对我们说:这样的程序送你,你会用吗?那个打击呀,辛苦了几天几夜,最终却是这样的一个结果。

可打击归打击,我们又得重新来做!相对而言,我们这次要比以前有阅历了,一次比一次成熟起来了,在经受了又一个一天一夜的奋战,我们最终又有新希望了,可是心情刚好,那么又传来了消息,说他们的数据又发生的变动,有了新的调整,这在以前我们也想过这个问题,也想好好的做,可是我们又一想工厂不是要有用吗?这方面变化的可能性很小,于是为了方期间我将有变量写进了代码之中,这一变,无疑宣布我要失败了。

和我在一起的几个同事也是这种状况,所以我们这些没有开发过软件的充当软件高手的新手们又得重新面对新的问题了。

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

程序设计综合实践报告姓名梁琨学号201301050817班级信息13-1项目名称飞机大战游戏设计与实现实习地点科技园实习时间2015-10-26至2015-11-6 实习成绩指导教师签字数学与系统科学学院2015年11月6日目录1. 概述 (1)2. 相关技术 (1)2.1 数据链表 (1)2.2 双缓冲 (1)3. 总体设计与详细设计 (2)3.1 系统模块划分 (2)3.2 主要功能模块 (2)4. 编码实现 (12)5. 实训中遇到的主要问题及解决方法 (20)6. 实训体会 (20)1. 概述项目:飞机大战主要功能:本款基于MFC平台所制作的游戏,具有极大的休闲娱乐功能。

玩家通过操纵我机,通过发射子弹机会敌机来积分,分数越高说明了玩家坚持的越长。

游戏开始界面向玩家进行了游戏按键的功能说明,游戏中设置暂停按键,可以方便玩家继续游戏。

游戏还自带无敌模式,以及我机大招,极大地提高了游戏的可玩性。

2. 相关技术本程序主要运用了链表和双缓冲的技术。

链表的应用方便了对数据成员的访问和处理,简化了代码,支持插入和移除表中任意位置上的节点;双缓冲主要用于图像的处理,在内存中重新绘图后复制到前台,同时禁止背景刷新,避免因图像刷新过于频繁导致画面出现闪烁现象。

2.1 数据链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。

使用链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。

由于常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的存取往往要在不同的排列顺序中转换,因此链表最大的优点是允许插入和移除表上任意位置上的节点。

在程序运行过程中,根据游戏对象的种类划分不同的链表,每个链表单一的存储一类数据,在进行处理、绘图时,通过对链表的遍历,实现对数据的访问,再根据所要实现的功能,对不同的对象做出不同的处理,对数据成员的插入和移除也变得轻松了许多。

2.2 双缓冲在图形图象处理编程过程中,双缓冲是一种基本的技术。

窗体在响应WM_PAINT消息的时候要进行复杂的图形处理,那么窗体在重绘时由于过频的刷新会引起闪烁现象。

解决这一问题的有效方法就是双缓冲技术。

因为窗体在刷新时,总要有一个擦除原来图象的过程OnEraseBkgnd,它利用背景色填充窗体绘图区,然后在调用新的绘图代码进行重绘,这样一擦一写造成了图象颜色的反差。

当WM_PAINT的响应很频繁的时候,这种反差也就越发明显。

于是我们就看到了闪烁现象。

双缓冲我们会很自然的想到,避免背景色的填充是最直接的办法。

但是那样的话,窗体上会变的一团糟。

因为每次绘制图象的时候都没有将原来的图象清除,造成了图象的残留,于是窗体重绘时,画面往往会变的乱七八糟。

所以单纯的禁止背景重绘是不够的。

我们还要进行重新绘图,但要求速度很快,于是我们想到了使用BitBlt函数。

它可以支持图形块的复制,速度很快。

我们可以先在内存中作图,然后用此函数将做好的图复制到前台,同时禁止背景刷新,这样就消除了闪烁。

以上也就是双缓冲绘图的基本的思路。

3. 总体设计与详细设计3.1 系统模块划分3.2 主要功能模块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);}//随机产生小敌机static int nCreator = rand() % 5 + 10;if (nCreator <= 0){nCreator = rand() % 5 + 10;m_ObjList[enEnemy].AddTail(new CEnemy);}nCreator--;// 产生大敌机if (m_pMe != NULL&&score >= 1000 && Booswait<=0){CGameObject* pObj;//PlaySound((LPCTSTR)IDR_WAVE5, AfxGetInstanceHandle(),SND_RESOURCE | SND_ASYNC);m_ObjList[enBOSS].AddTail(new BOSS);Booswait = rand() % 300+10 ;}Booswait--;//产生战机导弹PlaneGameif(GetKey(VK_SPACE)==1)//按下了空格键{if(m_pMe!=NULL && m_pMe->Fired()){//PlaySound((LPCTSTR)IDR_WAVE3, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);CPoint pt = m_pMe->GetPoint();m_ObjList[enBomb].AddTail(new CBomb(pt.x , pt.y -10,3));m_ObjList[enBomb].AddTail(new CBomb(pt.x+15,pt.y-10,3));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 22, pt.y -40,0));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 37, pt.y - 40, 0));m_ObjList[enBomb].AddTail(new CBomb(pt.x+45,pt.y-10,-3));m_ObjList[enBomb].AddTail(new CBomb(pt.x + 60, pt.y -10,-3));}}//无敌模式if (GetKey('A') == 1){wd++;}//小敌机发射子弹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){m_ObjList[enBall].AddTail(newCBall(ePt.x+10,ePt.y+10,pEnemy->GetMontion()));}}//小敌机子弹炸掉战机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 (wd % 2 == 0){life -= 5;}//删除子弹m_ObjList[enBall].RemoveAt(bPos2);delete pBall;//添加爆炸效果m_ObjList[enExplosion].AddTail(new CExplosion(mRect.left, mRect.top));if (life <= 0){//添加爆炸效果m_ObjList[enExplosion].AddTail(new CExplosion(mRect.left, mRect.top));//删除战机delete m_pMe;m_pMe = NULL;break;}}}//我机与小敌机相遇互相摧毁POSITION coPos1 = NULL, coPos2 = NULL;for (coPos1 = m_ObjList[enEnemy].GetHeadPosition(); (coPos2 = coPos1) != NULL;){CEnemy* pEnemy = (CEnemy*)m_ObjList[enEnemy].GetNext(coPos1);CRect eRect = pEnemy->GetRect();CRect tmpRect;if (tmpRect.IntersectRect(&eRect, mRect)){if (wd % 2 == 0){life -= 10;}energy += 5;//添加爆炸效果m_ObjList[enExplosion].AddTail(new CExplosion(eRect.left, eRect.top));//删除敌机m_ObjList[enEnemy].RemoveAt(coPos2);delete pEnemy;PlaySound((LPCTSTR)IDR_WAVE2, AfxGetInstanceHandle(),SND_RESOURCE | SND_ASYNC );if (life <= 0){//添加爆炸效果m_ObjList[enExplosion].AddTail(new CExplosion(mRect.left, mRect.top));//删除战机delete m_pMe;m_pMe = NULL;break;}}}//我机导弹炸掉敌机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 eRect = pEnemy->GetRect();CRect tmpRect;if(tmpRect.IntersectRect(&bRect,eRect)){//添加爆炸效果m_ObjList[enExplosion].AddTail(new CExplosion(eRect.left,eRect.top));pEnemy->Setlife(-pBomb->Gethurt());if (pEnemy->Getlife() <= 0){static int a = 0;a++;if (a % 10 == 0)life += 1;if (life>100)life = 100;//删除敌机m_ObjList[enEnemy].RemoveAt(ePos2);score += 10;energy += 5;delete pEnemy;PlaySound((LPCTSTR)IDR_WAVE2, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);}//删除导弹m_ObjList[enBomb].RemoveAt(mPos2);delete pBomb;break;}}}//== == == = =====添加爆炸效果,大敌机与战机相撞 == == == == == == == POSITION pPos1 = NULL, pPos2 = NULL;for (pPos1 = m_ObjList[enBOSS].GetHeadPosition(); (pPos2 = pPos1) != NULL;){BOSS* pBboss = (BOSS*)m_ObjList[enBOSS].GetNext(pPos1);CRect bRect = pBboss->GetRect();CRect tmpRect;if (tmpRect.IntersectRect(&bRect, mRect)){//添加爆炸效果m_ObjList[enExplosion].AddTail(new CExplosion(mRect.left, mRect.top));if (wd % 2 == 0){life --;}if (pBboss->get_life() != 0) { pBboss->set_life(-1); }//删除大Bossif (pBboss->get_life() == 0){m_ObjList[enExplosion].AddTail(newCExplosion(mRect.left + 30, mRect.top + 30));m_ObjList[enExplosion].AddTail(newCExplosion(mRect.left + 70, mRect.top + 30));m_ObjList[enExplosion].AddTail(newCExplosion(mRect.left + 50, mRect.top + 50));m_ObjList[enExplosion].AddTail(newCExplosion(mRect.left + 30, mRect.top + 70));m_ObjList[enExplosion].AddTail(newCExplosion(mRect.left + 70, mRect.top + 70));//PlaySound((LPCTSTR)IDR_WAVE2,AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);m_ObjList[enBOSS].RemoveAt(pPos2);score += 100;energy += 10;delete pBboss;pBboss = NULL;break;}if (life <= 0)life = 1;}}//==================添加爆炸效果,我机导弹打中大Boss============ 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[enBOSS].GetHeadPosition(); (ePos2 = ePos1) != NULL;){BOSS* pEnemy = (BOSS*)m_ObjList[enBOSS].GetNext(ePos1);CRect eRect = pEnemy->GetRect();CRect tmpRect;if (tmpRect.IntersectRect(&bRect, eRect)){//添加爆炸效果m_ObjList[enExplosion].AddTail(newCExplosion(eRect.left, eRect.top));if (pEnemy->get_life() != 0) { pEnemy->set_life(-3); }//删除大Bossif (pEnemy->get_life() <= 0){m_ObjList[enExplosion].AddTail(newCExplosion(eRect.left + 30, eRect.top + 30));m_ObjList[enExplosion].AddTail(newCExplosion(eRect.left + 70, eRect.top + 30));m_ObjList[enExplosion].AddTail(newCExplosion(eRect.left + 50, eRect.top + 50));m_ObjList[enExplosion].AddTail(newCExplosion(eRect.left + 30, eRect.top + 70));m_ObjList[enExplosion].AddTail(newCExplosion(eRect.left + 70, eRect.top + 70));//PlaySound((LPCTSTR)IDR_WAVE2, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);m_ObjList[enBOSS].RemoveAt(ePos2);score += 100;energy += 10;delete pEnemy;pEnemy = NULL;break;}//删除导弹m_ObjList[enBomb].RemoveAt(mPos2);delete pBomb;break;}}}//==================== 大敌机发射子弹============================ for (POSITION bPos = m_ObjList[enBOSS].GetHeadPosition(); bPos != NULL;){BOSS* pBboss = (BOSS*)m_ObjList[enBOSS].GetNext(bPos);if (!pBboss->Fired())continue;CPoint BPt = pBboss->GetPoint();BOOL by = FALSE;//敌机在战机前面if (BPt.y<PlanePt.y)by = TRUE;if (by && BPt.x >= PlanePt.x && BPt.x<PlanePt.x + CMyPlane::PLANE_WIDTH){m_ObjList[enBball].AddTail(new Bball(BPt.x + 40, BPt.y + 40, 1));}}//========================大敌机子弹炸掉战机===================POSITION BbPos1 = NULL, BbPos2 = NULL;for (BbPos1 = m_ObjList[enBball].GetHeadPosition(); (BbPos2 = BbPos1) != NULL;){Bball* pBball = (Bball*)m_ObjList[enBball].GetNext(BbPos1);CRect bRect = pBball->GetRect();CRect tmpRect;if (tmpRect.IntersectRect(&bRect, mRect)){if (wd % 2 == 0){life -= 30;}//删除子弹m_ObjList[enBball].RemoveAt(BbPos2);delete pBball;//添加爆炸效果m_ObjList[enExplosion].AddTail(new CExplosion(mRect.left, mRect.top));if (life <= 0){//添加爆炸效果m_ObjList[enExplosion].AddTail(new CExplosion(mRect.left, mRect.top));//删除战机delete m_pMe;m_pMe = NULL;break;}}if (energy > 100){energy = 100;}//=============================游戏结束弹窗====================== if (m_pMe == NULL){KillTimer(1);CString str;str.Format(_T("游戏结束,您的得分为%d"), score);AfxMessageBox(str);if (AfxMessageBox(L"游戏结束,是否重新开始", MB_YESNO) == 6){//清空敌机m_ObjList[enEnemy].RemoveAll();//清空战机链表//m_ObjList[enpMe].RemoveAll();//清空战机子弹链表m_ObjList[enBall].RemoveAll();//清空敌机炸弹链表m_ObjList[enBomb].RemoveAll();//清空爆炸链表m_ObjList[enExplosion].RemoveAll();//清空大敌机链表m_ObjList[enBOSS].RemoveAll();//清空大敌机子弹链表m_ObjList[enBball].RemoveAll();//添加新的战机对象m_pMe = new CMyPlane;CPen p1(PS_SOLID, 2, RGB(0, 0, 0));//定义一个画笔类对象p1m_pMemDC->SelectObject(&p1);//选定该对象CBrush b1(RGB(255, 0, 0));//选定一个画刷类对象b1m_pMemDC->SelectObject(&b1);//选定该对象m_pMemDC->Rectangle(300, 20, 300 + life * 40, 10);//画一个矩形life = 100;score = 0;energy = 100;SetTimer(1, 30, NULL);SetTimer(2, 300, NULL);SetTimer(3, 500, NULL);}//if4.编码实现(注:红色加粗部分为新加代码)// PlaneGameView.cpp : CPlaneGameView 类的实现#include"stdafx.h"#include"PlaneGame.h"#include"background.h"#include"BOSS.h"#include"PlaneGameDoc.h"#include"PlaneGameView.h"#include"MyPlane.h"#include"Enemy.h"#include"Bomb.h"#include"Ball.h"#include "Bball.h"#include"Explosion.h"#include <atlimage.h>#include"GameObject.h"// 加声音#include<mmsystem.h>#pragma comment(lib, "WINMM.LIB")#include <MMSYSTEM.H>#ifdef_DEBUG#define new DEBUG_NEW#endif#pragma oncestatic int score=0;static int life=100;static int energy = 100;static int p = 1;static int Booswait;static int wd=0;IMPLEMENT_DYNCREATE(CPlaneGameView, CView)BEGIN_MESSAGE_MAP(CPlaneGameView, CView)// 标准打印命令ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview) ON_WM_TIMER()ON_WM_DESTROY()ON_WM_KEYDOWN()END_MESSAGE_MAP()// CPlaneGameView 构造/析构CPlaneGameView::CPlaneGameView():m_pMe(NULL){// TODO: 在此处添加构造代码}CPlaneGameView::~CPlaneGameView(){}BOOL CPlaneGameView::PreCreateWindow(CREATESTRUCT& cs){// TODO: 在此处通过修改// CREATESTRUCT cs 来修改窗口类或样式return CView::PreCreateWindow(cs);}// CPlaneGameView 绘制void CPlaneGameView::OnDraw(CDC* pDC){CPlaneGameDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;// TODO: 在此处为本机数据添加绘制代码}BOOL CPlaneGameView::OnPreparePrinting(CPrintInfo* pInfo){// 默认准备return DoPreparePrinting(pInfo);}void CPlaneGameView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {// TODO: 添加额外的打印前进行的初始化过程}void CPlaneGameView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {// TODO: 添加打印后进行的清理过程}#ifdef_DEBUGvoid CPlaneGameView::AssertValid() const{CView::AssertValid();}void CPlaneGameView::Dump(CDumpContext& dc) const{CView::Dump(dc);}CPlaneGameDoc* CPlaneGameView::GetDocument() const// 非调试版本是内联的{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPlaneGameDoc)));return (CPlaneGameDoc*)m_pDocument;}#endif//_DEBUG// CPlaneGameView 消息处理程序void CPlaneGameView::OnInitialUpdate(){CView::OnInitialUpdate();// TODO: 在此添加专用代码和/或调用基类//初始化游戏InitGame();}void CPlaneGameView::StopGame(){delete m_pMe;delete m_pMemDC;delete m_pDC;delete m_pMemBitmap;}BOOL CPlaneGameView::InitGame(){CRect rc;GetClientRect(rc);//产生随机数种子srand( (unsigned)time( NULL ) );//建立设备DCm_pDC = new CClientDC(this);//建立内存DCm_pMemDC = new CDC;m_pMemDC->CreateCompatibleDC(m_pDC);//建立内存位图m_pMemBitmap = new CBitmap;m_pMemBitmap->CreateCompatibleBitmap(m_pDC,GAME_WIDTH,GAME_HEIGHT);//将位图选入内存DCm_pMemDC->SelectObject(m_pMemBitmap);CMyPlane::LoadImage();CEnemy::LoadImage();CBomb::LoadImage();CBall::LoadImage();Bball::LoadImage();CExplosion::LoadImage();BOSS::LoadImage();//产生主角(战机)m_pMe = new CMyPlane;//启动游戏SetTimer(1,30,NULL);//添加背景音mciSendString(_T("Open res\\bgm1.mp3 alias bgm1"), NULL, 0, NULL);mciSendString(_T("Play bgm1 repeat"), NULL, 0, NULL);return TRUE;}void CPlaneGameView::UpdateFrame(CDC* pMemDC){CPlaneGameDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;//========================绘制=====================================//绘制背景if (pDoc->bg[0].y == -GAME_HEIGHT || pDoc->bg[0].y == GAME_HEIGHT)pDoc->bg[0].y = 0;pDoc->bg[0].draw(pMemDC);pDoc->bg[0].y += 1;pDoc->bg[1].draw(pMemDC);pDoc->bg[1].y += 1;if (pDoc->bg[1].y > 0) { pDoc->bg[1].y += -GAME_HEIGHT; }//绘制我方战机if(m_pMe!=NULL){m_pMe->Draw(m_pMemDC,FALSE);//无敌if (wd % 2 != 0){m_pMemDC->TextOutW(20, 60, L"无敌模式:开启", 7);}else{m_pMemDC->TextOutW(20, 60, L"无敌模式:关闭", 7);}//底色条CBrush brush;brush.CreateSolidBrush(RGB(0, 0, 0));//pMemDC->SelectObject(&brush);// pMemDC->Rectangle(0, 640, 250, 670);brush.DeleteObject();//绘制底色brush.CreateSolidBrush(RGB(0, 0, 0));//设置画刷颜色:黑pMemDC->SelectObject(&brush);pMemDC->Rectangle(GAME_WIDTH / 2 - 150, 20, GAME_WIDTH / 2 + 150, 30); brush.DeleteObject();brush.CreateSolidBrush(RGB(255, 255, 255));//设置画刷颜色:白pMemDC->SelectObject(&brush);pMemDC->Rectangle(GAME_WIDTH / 2 - 150, 40, GAME_WIDTH / 2 + 150, 50);brush.DeleteObject();//分数CString strs, strl, strb;strs.Format(_T("%d"), score);strl.Format(_T("%d"), life);strb.Format(_T("%d"), energy);m_pMemDC->SetTextColor(RGB(255, 0, 0));//文字颜色m_pMemDC->SetBkMode(TRANSPARENT);m_pMemDC->TextOutW(20, 380, L"得分:", 3);m_pMemDC->TextOutW(100, 380, strs);m_pMemDC->TextOutW(GAME_WIDTH / 2 - 220, 16, L"生命值:", 4);m_pMemDC->TextOutW(GAME_WIDTH / 2 - 220, 35, L"能量值:", 4);//能量m_pMemDC->SetTextColor(RGB(0, 0, 255));//颜色m_pMemDC->TextOutW(GAME_WIDTH / 2 - 173, 35, strb);//血条CBrush b1(RGB(255, 0, 0));//选定一个画刷类对象b1m_pMemDC->SelectObject(&b1);//选定该对象m_pMemDC->Rectangle(GAME_WIDTH / 2 - 150, 20, GAME_WIDTH / 2 - 150 + life * 3, 30);//画一个矩形brush.DeleteObject();//能量CBrush b2(RGB(0, 0, 255));//选定一个画刷类对象b1m_pMemDC->SelectObject(&b2);//选定该对象m_pMemDC->Rectangle(GAME_WIDTH / 2 - 150, 40, GAME_WIDTH / 2 - 150 + energy * 3, 50);//画一个矩形m_pMemDC->SetTextColor(RGB(255, 0, 0));//颜色if (life > 40){m_pMemDC->SetTextColor(RGB(0, 255, 0));//文字颜色m_pMemDC->TextOutW(GAME_WIDTH / 2 - 170, 16, strl);}m_pMemDC->TextOutW(GAME_WIDTH / 2 - 170, 16, strl);}//========================绘制导弹、爆炸、敌机1,2、子弹1,2======================= for(int i=0;i<6;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;}}}//复制内存DC到设备DCm_pDC->BitBlt(0,0,GAME_WIDTH,GAME_HEIGHT,m_pMemDC,0,0,SRCCOPY);}//=========================AI()================================////========================省略=================================//void CPlaneGameView::OnTimer(UINT_PTR nIDEvent){CPlaneGameDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;if (!pDoc->Get_havewel()){//开始界面CRect rc;GetClientRect(rc);//建立设备DCm_pDC = new CClientDC(this);//建立内存DCCDC mDC;mDC.CreateCompatibleDC(NULL);CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP6);//载入开始界面mDC.SelectObject(bmp);m_pDC->TransparentBlt(0, 0, 500, 700, &mDC, 0, 0, 500, 700, RGB(200, 200, 200));//深灰if (GetKey(VK_RETURN))pDoc->Set_havewel(TRUE);}else{UpdateFrame(m_pMemDC);AI();if (GetKey('P'))pDoc->Set_havewel(FALSE);//P暂停游戏画面的刷新}CView::OnTimer(nIDEvent);}void CPlaneGameView::OnDestroy(){CView::OnDestroy();this->StopGame();// TODO: 在此处添加消息处理程序代码}void CPlaneGameView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags){// TODO: 在此添加消息处理程序代码和/或调用默认值switch (nChar){case'X':if (energy == 100){for (int i = 0; i<4; i++){if (m_ObjList[i].IsEmpty()) continue;POSITION pos1, pos2;for (pos1 = m_ObjList[i].GetHeadPosition(); (pos2 = pos1) != NULL;){CGameObject* pObj = (CGameObject*)m_ObjList[i].GetNext(pos1);m_ObjList[enExplosion].AddTail(new CExplosion(pObj->GetPoint().x, pObj->GetPoint().y));//删除m_ObjList[i].RemoveAt(pos2);delete pObj;}}energy = 0;}break;}CView::OnKeyDown(nChar, nRepCnt, nFlags);}5. 实训中遇到的主要问题及解决方法a.游戏开始前的欢迎界面贴图不成功。

相关文档
最新文档