盐城工学院程序设计实践报告段佳雯学院信息工程专业计算机科学与技术班级Z111学号1160704108学生姓名段佳雯课程成绩完成日期2014-1-16C++程序设计课程设计(2014)II目录1引言.............................................................................................................................................................11.1课程设计目的......................................................................................................................................11.2开发工具的介绍..................................................................................................................................12概要设计.....................................................................................................................................................22.1系统总体分析.....................................................................................................................................22.2主模块涉及的基本概念及说明.........................................................................................................23详细设计.....................................................................................................................................................73.1主要的函数和定义说明.....................................................................................................................73.1调试成果及讲解...............................................................................................................................165心得体会...................................................................................................................................................20参考文献.......................................................................................................................................................21附录…………………………………………………………………………………………………………22C++程序设计课程设计(2014)1打地鼠游戏程序设计1引言本程序设计实践是采用C++语言,在VC平台下设计。本课程设计提供了独立实践的机会,将课本上的理论知识和实际有机的结合起来,充分的锻炼分析解决实际问题的能力。提高了适应实际,实践编程的能力。1.1课程设计目的程序设计实践主要是培养学生利用系统综合C++语言进行程序设计的能力。(1)进一步巩固和复习C++程序设计的基础知识。(2)培养结构化程序、模块化程序设计的方法和能力。(3)了解软件的编制过程及各环节的具体内容。(4)提高程序调试技巧、软件设计能力和代码规范化等素质。(5)提高分析问题、解决问题以及实际运用能力。(6)功能要求:基本要求:设计的系统界面要美观大方,操作合理,有必要的提示。创新要求:在基本要求达到后,进行创新设计。对系统进行功能模块分析、控制流程分析正确。系统设计要实用,编程简练,可用,功能全面,并有一定的容错能力。说明书、流程图要清楚。要求程序设计合理,用户界面良好,如采用菜单工作方式。1.2开发工具的介绍关于VisualC++VisualC++6.0是Microsoft公司在1998年推出的基于Windows9X和WindowsNT的优秀集成开发环境。该环境为用户提供了良好的可视化编程环境,程序员可以里利用该开发环境轻松地访问C++源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。VisualC++6.0不仅包括编译器,而且它还包括许多有用组件,通过这些组件的协同工作,可以在VisualC++6.0集成环境中轻松地完成创建源文件,编辑资源,以及对程序的编译,连接和调试等各项工作。VC++6.0是Windows95/98、XP或WindowsNT下的一个应用程序,本身对软硬件没有特殊要求。就是说它对环境的要求与Windows95/98、WindowsNT要求是一致的。硬件要求:一般在586以上的处理器、16MB以上内存、100MB以上的硬盘。软件要求:Windows95/98或WindowsNT3.51以上版本。VC++6.0系统可以在一张CD盘上,也可以在“VisualStudio(VisualC++、VisualC++程序设计课程设计(2014)2Foxpro)”等产品的第一张CD盘上。一般都有一个VC的自动安装程序,也可以执行VC6目录下的setup.exe,在安装包的提示下进行,对初学者可采用“典型安装”方式。在安装好VC6.0系统后,有时根据需要添加或删除某些部件,可插入CD盘重新执行setup.exe安装程序,安装程序会检测当前系统安装VC6的足件,用户单击“添加/删除”按钮后,在“安装维护”对话框中选定要添加的部件或撤消选定要删除的部件。与一般的应用软件一样,有以下两种启动方式:(1)通过“开始”按钮,选择“程序”菜单,然后打开“MicrosoftVisualstudio6.0中文版”子菜单中的“MicrosoftVisualC++6.0中文版”程序。(2)用户也可以使用命令行启动VC。单击“开始”按钮后选择“运行”命令,在“运行”对话框中输入c:\ProgramFiles\MicrosoftVisualStudio\VC98\VC6.exe(按默认盘符和路径安装)即可。1.3功能说明:打地鼠是一种非常有趣的益智游戏。游戏进行时,地鼠会不断从洞口探出头来再缩回去,地鼠头在洞外时,可以通过案件的方式打击地鼠,时间到时游戏结束,打中地鼠次数越多分数越高,打中红色地鼠会减分,灰色地鼠分数比棕色地鼠分数低。打破记录可以刷新成绩。点击鼠标左键可以打击地鼠。2概要设计2.1系统总体分析开发环境:MicrosoftWindowsXPTASM2.2主模块涉及的基本概念及说明2.2.1Message消息机制在Windows中发生的一切都可以用消息来表示,消息用于告诉操作系统发生了什么,所有的Windows应用程序都是消息驱动的。一个消息是由消息的名称(UINT)和两个参数(WPARAM,LPARAM)组成。消息的参数中包含有重要的信息。主要包括程序核心,输入焦点,消息分类,消息队列,消息循环,消息分类。一个消息由一个消息名称(UINT),和两个参数(WPARAM,LPARAM)组成。本设计中主要用Msg来调用Messagebox里的消息。从而来实现鼠标点击实现功能的操作。例如对鼠标消息而言,LPARAM中一般包含鼠标的位置信息。Msg变量是型态为MSG的结构。当鼠标在某个窗口内移动时,Windows会不断地发出鼠标移动消息WM_MOUSEMOVE,并把鼠标的最新位置传给该窗口。如果在窗口的范围内按下鼠标左键,系统就会发出“按下左键”的WM_LBUTTONDOWN消息给该窗口,等到用户放开按键后,再发出“放开左键”的WM_LBUTTONUP消息给该窗口。消息可以看做是一个动作。操作系统把消息给封装成结构。C++程序设计课程设计(2014)3本设计中主要用WindowFunc函数来调用消息循环。Windows为当前执行的每个Windows程序维护一个消息队列。在发生输入事件之后,Windows将事件转换为一个消息并将消息放入程序的消息队列中。程序通过执行一块称之为消息循环的程序代码从消息队列中取出消息。本程序中在时钟运行里运用到了消息循环。例while(1){if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))//消息循环{if(!GetMessage(&msg,NULL,0,0))//接收消息{returnmsg.wParam;}TranslateMessage(&msg);//翻译消息DispatchMessage(&msg);//处理消息}elseif(bActive){UpdateFrame();}else{WaitMessage();}}KillTimer(hwnd,1);//时钟停止returnmsg.wParam;}消息循环的过程如图1—1所示:图1-1在程序的时钟里也运用到了消息队列的思想。消息队列就是Windows中有一个系统消息队列,对于每一个正在执行的Windows应用程序,系统为其建立一个“消息队列”,即应用程序队列,用来存放该程序可能创建的各种窗口的消息。应用程序中含有一段称作“消C++程序设计课程设计(2014)4息循环”的代码,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。在消息循环中没有消息的话就排队等待。没有消息就创建空传消息。2.2.2DirectDrawDirectDraw是通过基于COM的接口提供服务。在DirectX5.0版本中,这些接口分别是:IDirectDraw2、IDirectDrawSurface3、IDirectDrawPalette、IDirectDrawClipper和IDirectDrawVideoPort。DirectX的这些组件是向下兼容的,它们仍然支持旧版本中的所有功能。DirectDraw是DirectX中的关于视频输入输出的基本部分,使用DirectDraw可以方便地编制出高效的视频处理程序,只要用户的硬件支持DirectDraw,就能保证你的代码可以处理它们。与DirectX其它组件一样,只要可能,DirectDraw就会最高程度的利用硬件执行某特定功能,并且让那些该硬件还不支持的特性也能用软件仿真的方式加以实现。设备无关性通常是通过硬件抽象层(HAL:Hardwareabstractionlayer)实现的。DirectDraw主要提供了完成以下任务的工具:管理多页面,直接访问视频RAM,换页(Pageflipping),后台缓存(Backbuffering),管理调色板(Palette),裁剪(Clipping),视频端口(Videoport)。除此之外,DirectDraw允许开发者在应用程序