欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    汇编语言课程设计.docx

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

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

    汇编语言课程设计.docx

    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

    13、itMask dd ? ;被击中的老鼠Mask的DChBmpHit dd ?hBmpHitMask dd ?gLastX dd ?;老鼠出现的X坐标gLastY dd ?;老鼠出现的Y坐标hWinDlg dd ? ;对话框句柄szMsgBox db 256 dup(?) ;保存格式化文本消息hCursorMain dd ?;窗口主光标hCursorDown dd ?;按下锤子的光标;-;常量定义;- .constszClassName db ShrewMouse,0szCaptionMain db 捉老鼠游戏,0szText db 猫捉老鼠游戏开始咯!,0szScoreFmt db 当前命中率

    14、:%d/%d,0szTimeFmt db 游戏剩余时间:%d 秒,0szHitFN db miaowu1.wav,0szMissFN db miaowu2.wav,0szDlgTmFmt db %d 秒,0 szDlgFmt db %d,0 szDlgScrFmt db %d/%d,0lOffset dd 35aOffset dd 70tOffset dd 105;老鼠图片的长宽、草地的偏移坐标;- ;代码段;- .code;-;产生随机数=(随机种子 * 23 + 7) MOD (下限 上限 + 1) + 上限;-iRand proc uses ecx edx first,second in

    15、voke GetTickCount;取的随机种子 mov ecx,23; mul ecx add eax,7 mov ecx,second sub ecx,first ;ecx=上限-下限 inc ecx ;Z=ecx+1(得到了范围) xor edx,edx ;edx=0 div ecx ;eax=eax mod Z(余数在edx里面) add edx,first ;修正产生的随机数范围 mov eax,edx ;eax=Rand_Number retiRand endp;-;对话框回调函数;-_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wPar

    16、am,lParam mov eax,wMsg .if eax = WM_CLOSE invoke EndDialog,hWnd,NULL .elseif eax = WM_INITDIALOG;初始化对话框 invoke LoadIcon,hInstance,IDI_MAIN_ICON invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax;SendMessage函数其实就是给指定窗口发送消息,将对话框的图标设置成我们程序的图标 mov eax,hWnd mov hWinDlg,eax ;加载游戏数据 invoke wsprintf,addr szMsg

    17、Box,addr szDlgTmFmt,gTimerS;数字转换成字符 invoke SetDlgItemText,hWnd,IDC_PTIME,addr szMsgBox invoke wsprintf,addr szMsgBox,addr szDlgFmt,gHitCount invoke SetDlgItemText,hWnd,IDC_HITTIME,addr szMsgBox invoke SetDlgItemText,hWnd,IDC_SCORE,addr szMsgBox ;invoke wsprintf,addr szMsgBox,addr szDlgFmt,gMCount ;i

    18、nvoke SetDlgItemText,hWnd,IDC_SHOWTIME,addr szMsgBox invoke wsprintf,addr szMsgBox,addr szDlgScrFmt,gHitCount,gMCount invoke SetDlgItemText,hWnd,IDC_HITRATE,addr szMsgBox ;将格式化后的文本填到我们之前设置的编辑框里面 .elseif eax = WM_COMMAND ;菜单消息或按钮消息 mov eax,wParam .if ax = IDCANCEL ;ID 是系统预留的,不用声明能直接使用 invoke EndDialo

    19、g,hWnd,NULL invoke DestroyWindow,hWinMain invoke PostQuitMessage,NULL .elseif ax = IDOK mov eax,1 mov gGameStart,eax mov eax,60 mov gTimerS,eax mov eax,0 mov gHitCount,eax mov gMCount,eax mov gHitted,eax mov eax,2000 mov gMTime,eax invoke EndDialog,hWnd,NULL .endif .else mov eax,FALSE ret .endif mov

    20、 eax,TRUE ret_ProcDlgMain endp;-;弹出对话框;-_ShowDialog proc invoke DialogBoxParam,hInstance,IDD_SCORE, hWinMain,offset _ProcDlgMain,NULL ret_ShowDialog endp;-;创建老鼠图片;-_CreateMouse proc local hDC,hBmpMouse,hBmpHit,hBmpMouseMask,hBmpHitMask invoke GetDC,hWinMain mov hDC,eax invoke CreateCompatibleDC,hDC

    21、mov hDcMouse,eax invoke CreateCompatibleDC,hDC mov hDcHit,eax invoke CreateCompatibleDC,hDC mov hDcMouseMask,eax invoke CreateCompatibleDC,hDC mov hDcHitMask,eax invoke CreateCompatibleBitmap,hDC,70,70 mov hBmpMouse,eax invoke CreateCompatibleBitmap,hDC,70,70 mov hBmpHit,eax invoke CreateCompatibleB

    22、itmap,hDC,70,70 mov hBmpMouseMask,eax invoke CreateCompatibleBitmap,hDC,70,70 mov hBmpHitMask,eax invoke ReleaseDC,hWinMain,hDC invoke LoadBitmap,hInstance,IDB_MOUSE1 mov hBmpMouse,eax invoke LoadBitmap,hInstance,IDB_MOUSE2 mov hBmpHit,eax invoke LoadBitmap,hInstance,IDB_MOUSE1_MASK mov hBmpMouseMas

    23、k,eax invoke LoadBitmap,hInstance,IDB_MOUSE2_MASK mov hBmpHitMask,eax invoke SelectObject,hDcMouse,hBmpMouse invoke SelectObject,hDcHit,hBmpHit invoke SelectObject,hDcMouseMask,hBmpMouseMask invoke SelectObject,hDcHitMask,hBmpHitMask ;填充老鼠图形 invoke CreatePatternBrush,hBmpMouse push eax invoke Select

    24、Object,hDcMouse,eax invoke PatBlt,hDcMouse,0,0,70,70,PATCOPY pop eax invoke DeleteObject,eax invoke CreatePatternBrush,hBmpMouseMask push eax invoke SelectObject,hDcMouseMask,eax invoke PatBlt,hDcMouseMask,0,0,70,70,PATCOPY pop eax invoke DeleteObject,eax ;填充被击中的老鼠图形 invoke CreatePatternBrush,hBmpHi

    25、t push eax invoke SelectObject,hDcHit,eax invoke PatBlt,hDcHit,0,0,70,70,PATCOPY pop eax invoke DeleteObject,eax invoke CreatePatternBrush,hBmpHitMask push eax invoke SelectObject,hDcHitMask,eax invoke PatBlt,hDcHitMask,0,0,70,70,PATCOPY pop eax invoke DeleteObject,eax invoke DeleteObject,hBmpMouse invoke DeleteObject,hBmpHit invoke DeleteObject,hBmpMouseMask invoke DeleteObject,hBmpHitMask ret_CreateMouse endp;-;释放老鼠资源;-_DeleteMouse proc invoke DeleteDC,hDcMouse invoke DeleteDC,hDcHit invoke DeleteO


    注意事项

    本文(汇编语言课程设计.docx)为本站会员(风****)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922