汇编语言课程设计.docx
《汇编语言课程设计.docx》由会员分享,可在线阅读,更多相关《汇编语言课程设计.docx(25页珍藏版)》请在沃文网上搜索。
1、汇编语言课程设计一、题目及要求捉老鼠游戏,在限定的一分钟时间内用鼠标打击界面上出现的老鼠,击中后得一分,否则可以继续击中。游戏结束弹出对话框,显示游戏得分和击中率,并询问是否要继续游戏。二、 程序设计分析程序采用win32模式下的汇编语言编写,开发环境是masm32,UltraEdit,RadASM。程序有两个窗口,一个是游戏主界面,采用消息循环完成填充背景和绘制老鼠,并通过接收鼠标消息检测老鼠是否被打中。程序采用两个计时器,一个使老鼠出现的速度加快,一个控制游戏时间,时间用完退出游戏并显示结果。第二个窗体是一个对话框,显示得分信息和游戏时间,同时可以选择游戏开始还是结束。游戏的开始与停止采用
2、了一个标志变量控制。变量为0表示未开始,变量为1表示正在进行。游戏运行参数保存在全局变量中。游戏开始,将背景画在窗口上,然后根据老鼠出现的相对坐标换算成像素坐标,在相应位置画出老鼠的图像。老鼠的状态用一个变量标识,变量为0,没有打中,画上正常的老鼠,打中了画上被打死的老鼠。游戏只在需要更新的地方才重画窗口,包括窗口叠加时造成的系统的WM_PAINT消息时,计时器控制新的地鼠出现的时候,用户击中地鼠的时候,以及更新时间的时候。三、 程序流程图主函数_WinMain 窗口回调函数_ProcWinMain消息循环WM_CLOSEWM_CREATEWM_TIMERWM_LBUTTONUPWM_LBUT
3、TONDOWN绘图消息WM_PAINTGame ends四、 核心模块功能介绍_ProcWinMain是窗口的回调函数,用于处理消息。在各消息处理中完成游戏执行。_CreateBack1. WM_CREATE消息:处理游戏的初始化操作初始化hWinMain=hWnd_CreateMouseWM_CREATECall _Init初始化游戏参数SetTimerSetTimerCall _ShowDialog显示游戏控制对话框2.WM_PAINT消息,绘制图形,实现游戏画面BeginPaint开始绘图 BitBlt,翻转绘图缓冲区WM_PAINTEndPaint,绘图过程结束3. WM_LBUTTO
4、NDOWN,鼠标单击事件,分两部分进行:第一改变光标变成打下去的图案;第二判断是否打中老鼠,重绘画面,发出声音。SetClassLong改变光标WM_LBUTTONDOWN_CheckHit判断是否打中老鼠4. WM_LBUTTONUP,将窗口光标恢复打老鼠之前的状态:WM_CLOSE消息:退出游戏消息,主要进行的设置就是释放各种资源SetClassLong恢复光标WM_LBUTTONUP5. WM_TIMER,定时器消息,根据定时器的标识ID来进行不同的操作。如果是计时定时器,判断时间是否用尽,是则结束游戏,否则游戏时间减1S,并重绘屏幕;如果是鼠标定时器,随机生成老鼠鼠标,在指定位置画出老
5、鼠,并将时间剪短20.IDT_SHOWMWM_TIMERWM_CLOSE消息:退出游戏消息,主要进行的设置就是释放各种资源IDT_TIMER6. WM_CLOSE消息:退出游戏消息,释放各种资源。_DeleteBack释放背景资源_DeleteMouse释放老鼠资源WM_CLOSEWM_CLOSE消息:退出游戏消息,主要进行的设置就是释放各种资源DestroyWindow,销毁窗口PostQuitMessage退出程序五、程序运行步骤双击EXE文件,弹出对话框,此时游戏状态为空,得分为0。选择“开始游戏(S)”,进入游戏界面,通过鼠标来打老鼠,打中一个老鼠发出惨叫,并被打死,得一分。若没有打中
6、,可以继续点击敲打。老鼠出现的速度会越来越快。游戏时间为1分钟,1分钟后退出游戏界面,并显示得分和命中率,玩家可以继续选择进行游戏或者退出游戏。五、 设计过程遇到的主要技术难点因为这是我第一次接触windows下的编程,跟汇编思想,语法结构很不一样,周一周二网上找了本Windows环境下32位汇编语言程序设计仔细阅读,并找了周金辉学长之前编写的打地鼠游戏进行学习参考。周二下午开始编写,一开始错误很多,因为我不知道调用的函数大小写必须正确,所以错了一大堆。而且调用invoke函数时需要写明函数的参数,一开始我没意识到后来慢慢调试,对照着windows API找出适用的函数并正确写出参数。这样才慢
7、慢把代码写出来。另外一个就是图片的问题。导入背景图片到资源管理器,并在界面上画上背景没有问题。但是画老鼠图片时,我以为和C+一样,直接把位图加载到内存,然后调用画图函数复制到窗口上就可以了,但是运行时一直是白色的边框,而不是背景的颜色。我又仔细看了一下书,原来这涉及到块传送操作,需要进行像素的运算。于是我按照书上的思路,修改了代码:先用PatBlt函数填充整个图片,然后用PhotoshopCS5把老鼠的图片重新制作,一个是白色背景黑色图像MouseMask图片,一个是黑色背景正常图像Mouse。将MouseMask图片作为遮掩图片用SRCAND(and操作)操作码绘制到背景上,再用Mouse图
8、片和已镂空的背景进行SRCPAINT(or操作),就得到了一个在游戏界面上正常显示的图片。最后就是我一开始不知道对话框边缘上的图片必须要是ico格式,鼠标图像必须是cur格式,所以一开始总是出不来效果。后来网上查阅,下载了一个制作ico和鼠标图片的软件ArtCursor,成功的制作了图片并加入资源文件在游戏界面上显示出来。 六、 个人体会这次的小学期是又痛苦又兴奋。痛苦的是我采用了以前从没学过的语言编程序,从一开始什么都不会,到可以做出一个游戏,收获了很多。首先是学会了要在短时间内有快速自学的能力,另外就要用不怕麻烦和挫折的精神。因为一开始不知道资源文件的格式和大小,我中途一遍遍修改。很多函数
9、不知道怎么用,不知道怎么实现功能,就要一遍遍看书,网上看别人是怎么调用的,然后对自己的代码修改。这次课程设计带给我很多,同时我也对windows下的编程更感兴趣了。我也有很多不足,比如,我写程序分模块写的,但是每一块写的时候没想到和其他块的联系,所以到后面都是边写这部分的内容,边往前面写的模块里面添加内容。这样很容易漏东西,还需要在以后的学习中改掉这些习惯。七、 参考文献Windows环境下32位汇编语言程序设计windows API大全Windows界面编程第五篇静态控件背景透明化八、 程序清单.386 .model flat,stdcall option casemap:none;-;in
10、clude 文件定义;-include windows.incinclude gdi32.incincludelib gdi32.libinclude user32.incincludelib user32.libinclude kernel32.incincludelib kernel32.libinclude winmm.incincludelib winmm.lib;-;equ定义 ;-IDI_MAIN_ICON equ 5IDB_BACKGROUND equ 106IDD_SCORE equ 107IDB_MOUSE1 equ 108IDB_MOUSE2 equ 109IDC_CAT1
11、 equ 134IDC_CAT2 equ 133IDB_MOUSE1_MASK equ 130IDB_MOUSE2_MASK equ 132IDC_PTIME equ 1000;游戏时间IDC_HITTIME equ 1001;捉住次数IDC_HITRATE equ 1002;命中率IDC_SCORE equ 1003;得分BACKGROUND_WIDTH equ 630BACKGROUND_HEIGHT equ 490IDT_TIMER equ 1 IDT_SHOWM equ 2;两个定时器;-;数据段;- .datagMCount dd 0 ;地鼠出现次数gHitCount dd 0;击中
12、次数 gTimerS dd 60;游戏时间:1mingHitted dd 0 ;表示是否被击中 gGameStart dd 0;表示当前是否正在游戏gMTime dd 2000;表示老鼠出现的时长;-;数据段;- .data?hInstance dd ?hWinMain dd ?hDcBack dd ? ;保存背景图片的DC hBmpBack dd ? ;保存位图的绘图区域hDcMouse dd ? ;老鼠未击中的DChDcMouseMask dd ? ;老鼠未击中Mask的DChBmpMouse dd ?hBmpMouseMask dd ?hDcHit dd ? ;被击中的老鼠的DChDcH
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 课程设计