一、题目及要求。
捉老鼠游戏》,在限定的一分钟时间内用鼠标打击界面上出现的老鼠,击中后得一分,否则可以继续击中。游戏结束弹出对话框,显示游戏得分和击中率,并询问是否要继续游戏。
二、 程序设计分析。
程序采用win32模式下的汇编语言编写,开发环境是masm32,ultraedit,radasm。
程序有两个窗口,一个是游戏主界面,采用消息循环完成填充背景和绘制老鼠,并通过接收鼠标消息检测老鼠是否被打中。程序采用两个计时器,一个使老鼠出现的速度加快,一个控制游戏时间,时间用完退出游戏并显示结果。第二个窗体是一个对话框,显示得分信息和游戏时间,同时可以选择游戏开始还是结束。
游戏的开始与停止采用了一个标志变量控制。变量为0表示未开始,变量为1表示正在进行。游戏运行参数保存在全局变量中。
游戏开始,将背景画在窗口上,然后根据老鼠出现的相对坐标换算成像素坐标,在相应位置画出老鼠的图像。老鼠的状态用一个变量标识,变量为0,没有打中,画上正常的老鼠,打中了画上***的老鼠。
游戏只在需要更新的地方才重画窗口,包括窗口叠加时造成的系统的wm_paint消息时,计时器控制新的地鼠出现的时候,用户击中地鼠的时候,以及更新时间的时候。
三、 程序流程图。
四、 核心模块功能介绍。
procwinmain是窗口的**函数,用于处理消息。在各消息处理中完成游戏执行。
1. wm_create消息:处理游戏的初始化操作。
消息,绘制图形,实现游戏画面。
3. wm_lbuttondown,鼠标单击事件,分两部分进行:第一改变光标变成打下去的图案;第二判断是否打中老鼠,重绘画面,发出声音。
4. wm_lbuttonup,将窗口光标恢复打老鼠之前的状态:
5. wm_timer,定时器消息,根据定时器的标识id来进行不同的操作。如果是计时定时器,判断时间是否用尽,是则结束游戏,否则游戏时间减1s,并重绘屏幕;如果是鼠标定时器,随机生成老鼠鼠标,在指定位置画出老鼠,并将时间剪短20.
6. wm_close消息:退出游戏消息,释放各种资源。
五、程序运行步骤。
双击exe文件,弹出对话框,此时游戏状态为空,得分为0。选择“开始游戏(s)”,进入游戏界面,通过鼠标来打老鼠,打中一个老鼠发出惨叫,并***,得一分。若没有打中,可以继续点击敲打。
老鼠出现的速度会越来越快。游戏时间为1分钟,1分钟后退出游戏界面,并显示得分和命中率,玩家可以继续选择进行游戏或者退出游戏。
五、 设计过程遇到的主要技术难点。
因为这是我第一次接触windows下的编程,跟汇编思想,语法结构很不一样,周一周二网上找了本《windows环境下32位汇编语言程序设计》仔细阅读,并找了周金辉学长之前编写的打地鼠游戏进行学习参考。周二下午开始编写,一开始错误很多,因为我不知道调用的函数大小写必须正确,所以错了一大堆。而且调用invoke函数时需要写明函数的参数,一开始我没意识到后来慢慢调试,对照着《windows api》找出适用的函数并正确写出参数。
这样才慢慢把**写出来。
另外一个就是**的问题。导入背景**到资源管理器,并在界面上画上背景没有问题。但是画老鼠**时,我以为和c++一样,直接把位图加载到内存,然后调用画图函数复制到窗口上就可以了,但是运行时一直是白色的边框,而不是背景的颜色。
我又仔细看了一下书,原来这涉及到块传送操作,需要进行像素的运算。于是我按照书上的思路,修改了**:先用patblt函数填充整个**,然后用photoshopcs5把老鼠的**重新制作,一个是白色背景黑色图像mousemask**,一个是黑色背景正常图像mouse。
将mousemask**作为遮掩**用srcand(and操作)操作码绘制到背景上,再用mouse**和已镂空的背景进行srcpaint(or操作),就得到了一个在游戏界面上正常显示的**。
最后就是我一开始不知道对话框边缘上的**必须要是ico格式,鼠标图像必须是cur格式,所以一开始总是出不来效果。后来网上查阅,**了一个制作ico和鼠标**的软件artcursor,成功的制作了**并加入资源文件在游戏界面上显示出来。
六、 个人体会。
这次的小学期是又痛苦又兴奋。痛苦的是我采用了以前从没学过的语言编程序,从一开始什么都不会,到可以做出一个游戏,收获了很多。首先是学会了要在短时间内有快速自学的能力,另外就要用不怕麻烦和挫折的精神。
因为一开始不知道资源文件的格式和大小,我中途一遍遍修改。很多函数不知道怎么用,不知道怎么实现功能,就要一遍遍看书,网上看别人是怎么调用的,然后对自己的**修改。
这次课程设计带给我很多,同时我也对windows下的编程更感兴趣了。我也有很多不足,比如,我写程序分模块写的,但是每一块写的时候没想到和其他块的联系,所以到后面都是边写这部分的内容,边往前面写的模块里面添加内容。这样很容易漏东西,还需要在以后的学习中改掉这些习惯。
七、 参考文献。
windows环境下32位汇编语言程序设计》
windows api大全》
windows界面编程第五篇静态控件背景透明化》
八、 程序清单。
model flat,stdcall
option casemap:none
include 文件定义。
equ定义
idi_main_icon equ 5
idb_background equ 106
idd_scoreequ 107
idb_mouse1equ 108
idb_mouse2equ 109
idc_cat1equ 134
idc_cat2equ 133
idb_mouse1_mask equ 130
idb_mouse2_mask equ 132
idc_ptimeequ 1000;游戏时间。
idc_hittime equ 1001;捉住次数。
idc_hitrate equ 1002;命中率。
idc_scoreequ 1003;得分。
background_width equ 630
background_height equ 490
idt_timerequ 1
汇编语言课程设计
微机原理实践 课程设计报告。题目 汇编语言课程设计。专业 网络工程 班级 班 学号 姓名 指导教师 完成日期 2013年 1 月 6 日。一 课程设计目的。1 加深对汇编语言理论和基本知识的理解,掌握dos和bios系统功能调用,掌握运用汇编语言设计具有一定功能的软件的基本方法。2 通过编写一定规模...
汇编语言课程设计
学号 01211103402 18 课程设计。打字游戏的设计与实现。一 设计内容 1 功能菜单由 开始 速度调整 统计成绩 和 结束 等组成。2 游戏开始后,出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失,并得分 按esc键返回主界面 按空格键暂停 按...
汇编语言课程设计
汇。编。语。言。课。程。设。计。姓名 学号 专业班级 计科一班。指导老师 袁全清。一 课程题目。数字时钟,与计算机的时间同步显示。二 设计思想。程序原理 程序先调用系统时间,然后将返回的二进制数转化成ascii码,再通过dos显示功能显示出来,并通过循环不断刷新显示的时间。在二进制转化成ascii码...