欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    盐城工学院-打地鼠课程设计报告-木槌打老鼠Word格式.doc

    • 资源ID:3729490       资源大小:458.50KB        全文页数:23页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    盐城工学院-打地鼠课程设计报告-木槌打老鼠Word格式.doc

    1、(5)提高分析问题、解决问题以及实际运用能力。 (6)功能要求:基本要求:设计的系统界面要美观大方,操作合理,有必要的提示。创新要求:在基本要求达到后,进行创新设计。对系统进行功能模块分析、控制流程分析正确。系统设计要实用,编程简练,可用,功能全面,并有一定的容错能力。说明书、流程图要清楚。要求程序设计合理,用户界面良好,如采用菜单工作方式。1.2开发工具的介绍关于Visual C+Visual C+6.0 是Microsoft公司在1998年推出的基于Windows 9X和Windows NT的优秀集成开发环境。该环境为用户提供了良好的可视化编程环境,程序员可以里利用该开发环境轻松地访问C+

    2、源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。Visual C+6.0不仅包括编译器,而且它还包括许多有用组件,通过这些组件的协同工作,可以在Visual C+6.0集成环境中轻松地完成创建源文件,编辑资源,以及对程序的编译,连接和调试等各项工作。VC+6.0是Windows 95/98、XP或Windows NT下的一个应用程序,本身对软硬件没有特殊要求。就是说它对环境的要求与Windows 95/98、Windows NT要求是一致的。硬件要求:一般在586以上的处理器、16MB以上内存、100MB以上的硬盘。软件要求:Windows 95/98或Windows NT3.

    3、51以上版本。VC+ 6.0系统可以在一张CD盘上,也可以在“Visual Studio( Visual C+、Visual Foxpro)”等产品的第一张CD盘上。一般都有一个VC的自动安装程序,也可以执行VC6目录下的setup.exe,在安装包的提示下进行,对初学者可采用“典型安装”方式。在安装好VC 6.0系统后,有时根据需要添加或删除某些部件,可插入CD盘重新执行setup.exe安装程序,安装程序会检测当前系统安装VC6的足件,用户单击“添加删除”按钮后,在“安装维护”对话框中选定要添加的部件或撤消选定要删除的部件。与一般的应用软件一样,有以下两种启动方式:(1)通过“开始”按钮,

    4、选择“程序”菜单,然后打开“Microsoft Visual studio 6.0中文版”子菜单中的“Microsoft Visual C+ 6.0 中文版”程序。(2)用户也可以使用命令行启动VC。单击“开始”按钮后选择“运行”命令,在“运行”对话框中输入c:Program FilesMicrosoft Visual StudioVC98VC6.exe(按默认盘符和路径安装)即可。1.3功能说明:打地鼠是一种非常有趣的益智游戏。游戏进行时,地鼠会不断从洞口探出头来再缩回去,地鼠头在洞外时,可以通过案件的方式打击地鼠,时间到时游戏结束,打中地鼠次数越多分数越高,打中红色地鼠会减分,灰色地鼠分数

    5、比棕色地鼠分数低。打破记录可以刷新成绩。点击鼠标左键可以打击地鼠。2 概要设计2.1 系统总体分析开发环境:Microsoft WindowsXP TASM2.2 主模块涉及的基本概念及说明2.2.1Message 消息机制在Windows中发生的一切都可以用消息来表示,消息用于告诉操作系统发生了什么,所有的Windows应用程序都是消息驱动的。 一个消息是由消息的名称(UINT)和两个参数(WPARAM, LPARAM)组成。消息的参数中包含有重要的信息。主要包括程序核心,输入焦点,消息分类,消息队列,消息循环,消息分类。一个消息由一个消息名称(UINT),和两个参数(WPARAM,LPAR

    6、AM)组成。本设计中主要用Msg 来调用Messagebox里的消息。从而来实现鼠标点击实现功能的操作。例如对鼠标消息而言,LPARAM中一般包含鼠标的位置信息。Msg变量是型态为MSG的结构。当鼠标在某个窗口内移动时,Windows会不断地发出鼠标移动消息WM_MOUSEMOVE,并把鼠标的最新位置传给该窗口。如果在窗口的范围内按下鼠标左键,系统就会发出“按下左键”的WM_LBUTTONDOWN消息给该窗口,等到用户放开按键后,再发出“放开左键”的WM_LBUTTONUP消息给该窗口。消息可以看做是一个动作。操作系统把消息给封装成结构。本设计中主要用WindowFunc函数来调用消息循环。W

    7、indows为当前执行的每个Windows程序维护一个消息队列。在发生输入事件之后,Windows将事件转换为一个消息并将消息放入程序的消息队列中。程序通过执行一块称之为消息循环的程序代码从消息队列中取出消息。本程序中在时钟运行里运用到了消息循环。例while(1)if( PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)/消息循环if (!GetMessage(&msg,NULL,0,0)/接收消息return msg.wParam;TranslateMessage(&msg);/翻译消息DispatchMessage(&/处理消息else if( bActive)

    8、UpdateFrame();elseWaitMessage();KillTimer(hwnd,1);/时钟停止return msg.wParam;消息循环的过程如图11所示:图1-1 在程序的时钟里也运用到了消息队列的思想。消息队列就是Windows中有一个系统消息队列,对于每一个正在执行的Windows应用程序,系统为其建立一个“消息队列”,即应用程序队列,用来存放该程序可能创建的各种窗口的消息。应用程序中含有一段称作“消息循环”的代码,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。在消息循环中没有消息的话就排队等待。没有消息就创建空传消息。2.2.2DirectDrawDir

    9、ectDraw是通过基于COM的接口提供服务。在DirectX 5.0版本中,这些接口分别是:IDirectDraw2、IDirectDrawSurface3、IDirectDrawPalette、IDirectDrawClipper和IDirectDrawVideoPort。DirectX的这些组件是向下兼容的,它们仍然支持旧版本中的所有功能。 DirectDraw是DirectX中的关于视频输入输出的基本部分,使用DirectDraw可以方便地编制出高效的视频处理程序,只要用户的硬件支持DirectDraw,就能保证你的代码可以处理它们。与DirectX其它组件一样,只要可能,Direct

    10、Draw就会最高程度的利用硬件执行某特定功能,并且让那些该硬件还不支持的特性也能用软件仿真的方式加以实现。设备无关性通常是通过硬件抽象层(HAL:Hardware abstraction layer)实现的。DirectDraw主要提供了完成以下任务的工具:管理多页面 ,直接访问视频RAM ,换页(Page flipping) ,后台缓存(Back buffering) ,管理调色板(Palette) ,裁剪(Clipping) ,视频端口(Video port)。除此之外,DirectDraw允许开发者在应用程序运行期测定显示硬件的特性,然后,充分利用主机硬件设备的加速特性为用户提供可能的最

    11、优的显示速度和效果。DirectDraw对象的创建和准备的每一步骤:1. 创建DirectDraw 对象:创建DirectDraw 对象的一个实例,应该用DirectDrawCreate API 函数,也可以用COM中的CoCreateInstance函数。DirectDrawCreate用一个全局统一标志符GUID(Globally Unique IDentifier)来表征显示设备,在大多数情况下GUID为NULL(使用系统的缺省显示设备,既“空设备”);指针指向DirectDraw对象的地址;第三个参数总是NULL(供将来扩展使用)。下述代码表明了如何创建一个DirectDraw对象,并

    12、且检验是否成功。2.设置显示模式:设置DirectDraw 应用程序的显示模式需要两步:首先调用IDirectDraw:SetCooperativeLevel方法来设定该模式下的要求,一旦确定了要求,再用IDirectDraw:SetDisplayMode 方法来选择显示分辨率。在改变显示分辨率之前,还必须通过IDirectDraw:SetCooperativeLevel方法来指定DDSCL_EXCLUSIVE和DDSCL_FULLSCREEN 标志。这样能使游戏程序完全控制显示设备,其它的应用程序不能同时共享显示设备。DDSCL_FULLSCREEN标志表示将程序设为全屏模式。使用IDire

    13、ctDraw:SetCooperativeLevel时,必须向窗口 (HWND)传送一个句柄,让窗口决定何时非正常地终止应用程序。例如,若发生了GP错误或GDI被翻转(flip)到了后台缓冲区,用户就无法访问当前屏幕。为了避免这种情况,DirectDraw有一个后台等待进程,它俘获所有发往该窗口的消息,用这些消息来确定应用程序何时终止。如果创建了新的窗口,必须确定该窗口为活动的,否则,就会有一系列的事件无法继续工作。3.改变显示模式一旦选择了应用程序的工作模式,就可以使用方法来改变显示模式。4.创建可翻转表面(Flippable Surface) :设定了显示模式后,必须创建放置应用程序的表面

    14、。5. 定义表面要求:创建可翻转表面的的第一步是在DDSURFACEDESC结构中定义表面的要求。6. 创建表面: 填完了DDSURFACEDESC结构,就可以使用该结构和lpDD了,lpDD是用DirectDrawCreate 方法创建的DirectDraw 对象的指针。7.取得后台缓冲区的指针: 使用IDirectDrawSurface:GetAttachedSurface 方法可以取得后台缓冲区的指针。8.着色表面: 创建了主表面和后台缓冲区后,DDEX1使用标准的WindowsGDI 函数将一些文本提交到主表面和后台缓冲区。一般来讲,当向表面写数据时,该表面就是后台缓冲区,然后将缓冲区

    15、翻转成主表面显示出来。在DDEX1中,第一次翻转表面之前有一个重要的延迟。于是DDEX1就将数据写入主缓冲区,避免开始显示时有太长的时间间隔。后面将会讲到,DDEX1只在 WM_TIMER期间向后台写数据。初始化函数或标题头可能会写入主缓冲区。应该注意的是,一旦使用IDirectDrawSurface:Unlock对表面解锁,指向表面的指针就变成无效,必须再次使用IDirectDrawSurface:Lock方法才能获取该表面内存的有效指针。9.写表面及翻转表面: 完成了初始化后,DDEX1开始处理消息循环。在消息循环的过程中,完成锁定后台缓冲区写入新的文本解锁后台缓冲区翻转表面的过程。WM_

    16、TIMER包含了写数据和翻转表面的大部分代码。 WM_TIMER消息的前半部分用于向后台缓冲区写数据,“phase”变量决定是写主缓冲区消息还是写后台缓冲区消息。如果phase为1,表示写主缓冲区的消息,然后将phase改变为0;若为0,表示写后台缓冲区的消息,然后将phase改变为1。注意,两种情况中的消息都是写向后台缓冲区。后台缓冲区写入了消息后,使用IDirectDrawSurface:ReleaseDC方法解锁。10. 释放DirectDraw 对象: 当按了F12后,DDEX1程序在退出之前先处理WM_DESTROY消息,该消息调用了finiObjects函数,而finiObject

    17、s函数包含了所有的IUnknown Release的调用。11. 将位图调入表面: 如DDEX1中一样,doInit函数是DDEX2的初始化函数,两者的实质一样。12.设置调色板,将位图调入后台缓冲区: 创建了调色板之后,可以通过调用IDirectDrawSurface:SetPalette 方法将DirectDrawPalette 对象的指针ddpal传送给主表面。13. 从屏外表面位块传输: DDEX2同DDEX1基本相同。DDEX2打开一个位图文件并将它送往后台缓冲区,然后翻转后台缓冲区和主表面。但这对显示位图并不特别理想,DDEX3扩展了DDEX2的功能,它加入了两个屏外缓冲区,每个缓

    18、冲区都存储一个位图。14. 将位图文件调入屏外表面: 创建了两个屏外表面后,DDEX3使用了InitSurfaces函数将位图从Frntback.bmp文件装入到两个表面。InitSurfaces函数使用了DDCopyBitmap函数调入两个位图。15. 将屏外表面位位块传输到后台缓冲区:WM_TIMER包含了写表面和翻转表面的代码。在DDEX3中,它选择适当的屏外表面,并将其位块传输到后台缓冲区。16. 创建动画: 1、Color Key和位图动画在DDEX3例中描述了将位图放入屏外缓冲区的一种主要方式。DDEX4则使用了将背景和一系列的精灵(sprite,本例中精灵是圆环)装入屏外表面的技

    19、术,然后使用, IDirectDrawSurface:BltFast方法将屏外表面的各部分拷贝到后台缓冲区。doInit函数除了具有前面例子中的功能外,还包括了为精灵设置Color key的代码。Color key是用于设置透明度的颜色值。当使用硬件块写方式时,矩型区域内除了设为 color key的像素,其它的像素都被块写,由此在表面上产生非矩型的精灵。17.动态改变调色板:DDEX5描述了任何在程序运行时动态地改变调色板,尽管在游戏中这并不总是用到。DirectDraw确实能很好地控制调色板。18. 替换调色板:DDEX5中的updateFrame函数同DDEX4中的基本相同,先将背景块写

    20、入后台缓冲区,再将3个红色圆环块写到前景。19. 使用覆盖表面(Overlay): 创建一个主表面要使用覆盖表面,必须先要初始化一个主表面,覆盖表面将显示在该主表面上。检测硬件对覆盖的支持 初始化DirectDraw后,需要检测设备是否支持覆盖表面。因为DirectDraw不能仿真覆盖,所以如果硬件不支持覆盖,就不能继续下面的工作。你可以用方法获取硬件设备驱动程序的能力检测覆盖支持。在调用该方法之后,查看DDCAPS结构中的dwFlags成员是否包含有DDCAPS_OVERLAY标志。若有就表明支持覆盖,否则就不支持。创建一个覆盖表面如果知道显示设备支持覆盖表面,就可以创建一个。因为没有指明设

    21、备怎样支持覆盖表面的标准,所以不能够期望创建任意大小的像素格式的表面。另外,也不要期望第一次创建覆盖表面就会成功。因此,必须作好准备进行多次创建的尝试,直到有一个能够工作为止。Mosquito程序在创建表面时遵循“best case to worst case”的原则,首先尝试创建一个三缓冲页翻转复杂覆盖表面。如果尝试失败,程序就改变方法尝试用其它通用的迅速格式来配置。显示覆盖表面创建了覆盖表面之后就可以显示它了。通常,硬件在用于显示覆盖的矩形的位置和像素格式上加上对齐约束。另外,还需要经常通过调整目的矩形的宽度来说明最小要求的拉伸因子以成功地显示覆盖表面。更新覆盖的显示位置显示覆盖表面之后,

    22、有时可能就不需要对覆盖做其它的操作了。但有些软件还需要重新放置覆盖,改变覆盖的显示位置。隐藏覆盖表面如果不再需要一个覆盖表面或只想不让覆盖可见。UpdateOverlay UpdateOverlay用于重新定位一个覆盖页面,或修改其视觉属性。这些页面在创建时必须提DDSCAPS_OVERLAY标志。3 详细设计3.1 主要的函数和定义说明3.1.1 WinMain函数主函数的入口。和我们以前的main()函数一样。本次设计中的具体定义:INT WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,i

    23、nt nMode)。3.1.2 WM_LBUTTONDOWN WM_LBUTTONDOWN消息当用户在window客户区域点击鼠标左键的时候发送。如果当前鼠标没有被捕捉,消息发送给鼠标下面的window窗体。否则,消息发送给当前捕捉鼠标消息的方法。3.1.3 WindowFun函数 窗口构造函数,注册函数,自动调用,处理消息循环。LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)。3.1.4 InitDDraw()函数运用了directdraw编程,初始化directdraw。主要作用是

    24、创建DirectDraw对象,设置协作级别为窗口模式,创建主页面,创建离屏页面,创建老鼠页面,创建木锤,创建火花,创建标题,创建背景,创建时间,创建分数页面,创建Clipper裁剪器。BOOL InitDDraw()DWORD dwFlags;DDSURFACEDESC ddsd;/创建DirectDraw对象DirectDrawCreate(NULL, &lpDD, NULL);/设置协作级别为窗口模式dwFlags = DDSCL_NORMAL;lpDD-SetCooperativeLevel(hwnd, dwFlags);/创建主页面ZeroMemory(&ddsd, sizeof(dd

    25、sd);ddsd.dwSize = sizeof(ddsd);ddsd.dwFlags = DDSD_CAPS;ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;CreateSurface(&ddsd, &lpDDSFront, NULL);/创建离屏页面ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;RECT rect;GetClientRect(hwnd, &rect);forewidth=rect.ri

    26、ght-rect.left;foreheight=rect.bottom-rect.top;GetRect(&backrect, 0, 0, 433,348);ddsd.dwWidth = backwidth=forewidth;ddsd.dwHeight = backheight=foreheight;CreateSurface( &lpDDSBack, NULL );/创建老鼠页面ddsd.dwWidth = 124;ddsd.dwHeight = 425;lpDDSMouse0, NULL );lpDDSMouse1, NULL );lpDDSMouse2, NULL );DDReLoa

    27、dBitmap(lpDDSMouse0, MOUSE00.BMP);DDReLoadBitmap(lpDDSMouse1, MOUSE01.BMPDDReLoadBitmap(lpDDSMouse2, MOUSE02.BMPDDSetColorKey(lpDDSMouse0,RGB(0,0,255);DDSetColorKey(lpDDSMouse1,RGB(0,0,255);DDSetColorKey(lpDDSMouse2,RGB(0,0,255);/创建木锤ddsd.dwWidth = 68;ddsd.dwHeight = 136;lpDDSHammer, NULL );DDReLoad

    28、Bitmap(lpDDSHammer, HAM.BMPDDSetColorKey(lpDDSHammer,RGB(0,0,255);/创建火花ddsd.dwHeight = 24;lpDDSBow, NULL );DDReLoadBitmap(lpDDSBow, Bow.BMPDDSetColorKey(lpDDSBow,RGB(255,0,127);/创建标题ddsd.dwWidth = 319;ddsd.dwHeight = 56;lpDDSLogo, NULL );DDReLoadBitmap(lpDDSLogo, logo.BMPDDSetColorKey(lpDDSLogo,RGB(0,0,255);/创建背景ddsd.dwWidth =


    注意事项

    本文(盐城工学院-打地鼠课程设计报告-木槌打老鼠Word格式.doc)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开