课程设计打字游戏
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言课程设计
设计题目: 指法练习
班级: 计算机04-4班
学号: 20042390
作者: 王丰
指导老师: 郑利平
日期: 2007.1.5
汇编语言课程设计报告
-----<打字游戏>
一、课程设计目的
课程设计使学生更进一步理解和掌握汇编语言知识、程序设计的方法和技巧,使学生能够使用汇编语言分析、设计中小型程序的能力。
通过课程设计,有助于学生更好的了解整个课程的知识体系,锻炼学生运用本课程的知识解决更复杂的实际问题的能力,从而为后续课程的学习、毕业设计以及将来的实际工作打好坚实的基础。
二、设计题目
指法练习
三、设计要求
1、从屏幕上方以一定的时间间隔随机落下可显示字符,字符的出现位置亦是随机
的;
2、在多个字符下落的过程中可输入任意键,若键入与其中的任意一个字符相匹配
的键,则该字符高亮显示并发出蜂鸣声,同时计分;
3、按ESC键结束练习并显示命中率;
4、再次按ESC键退出。
四、设计环境
硬件:PC机,
软件: masm5.0
五、设计分析
指法练习,是在屏幕上以一定的时间间隔随机的下落一写字符,我在程序中的设计方法是从屏幕的第一行开始显示一个字符,然后在用一个时间延时函数延时一段
时间,再在此位置显示空格字符,延时后在同一列的下一行显示原字符,如此循环,中
间如果有输入正确的字符,则,循环停止, 并同时将此字符高亮显示,方法是改变此字
符的属性,并将score加1,然后光标移到第一行还是新的循环.若输入中间字符不正
确,循环到21行时,则扬声器发出蜂鸣声,同时life减1.
设计中要求每次下落的字符是随机的,我在程序中的设计方法是取系统时间1/100秒,然后将此时间模取26,将得到余数加上61,将此作为输出字符的ASCLL码,
如此循环78次,将这些字符存入letter缓冲区,并在屏幕最上方显示出来.开始下落的
字母的位置也是随机的,同样取系统时间,,由于一行最多只能有78个字符,所以当取
的时间大于等于78时,应减去78,将得到的结果作为取字符的位置,此种随机虽然不
是很严谨,但用在此程序中还是很不错的.
题目中还要求计算命中率,由于在游戏开始的同时开始了记分,所以在结束游戏时,将得分和错误统计出来,很容易计算出命中率,这里就不做多余的叙述.
在题目的要求的基础上,我还给游戏增加了几个难度,其实也很简单,就是控制字母下落的速度,方法是改变每次字符显示的时间间隔,这样从屏幕上看,字母下落
就会有快慢.
六、程序的模块
程序设计时,我没有分模块,只有实现个别功能的几个子程序,分别是发声程序,延时程序,和命中率计算与显示程序,这在原代码中均有注释,在此就不在详细叙述.
七、课程设计心得
由于课程设计开始的比较早,所以有时间去准备.开始时在网上看了一些资料和例子,搞清楚了程序设计的基本原理.最开始不明白的地方就是如何让字符下落,后
来发现就是不停的在屏幕的不同位置显示该字符,加以延时,看起来就像是字符不
断的从上面掉下来.
随机问题也是本程序的一个难点,看过资料后知道汇编中没有现成的完美的随机函数.所以我就想到取系统时间来制造随机数,因为时间时刻都在变化,而且打字
的时间也不一定,结果游戏的随机性还不错,呵呵
这学期汇编的学习,自己感觉还不错,平时也练习了不少.从汇编程序的学习中,我觉得自己突然一下子明白了一般程序设计的原理,看程序时,不再感觉茫然,自己
写点小程序时,也知道该如何下手.算法上也学到了不少新的东西,总算劳有所获
吧!
本打算把程序的运行流程图画出来,无奈,最近考试太多,时间实在不够啊,只有在程序中直接注释了,其实程序的思路很清晰,相信大家多能看懂
最后,感谢郑利平老师一学期来指导和帮助,也感谢我们班的桑磊同学在课程设计中给我解答疑问!
八、源程序如下:
;=======================================================================
;打字游戏程序
;=======================================================================
init_game macro op1,op2,op3,op4,op5,op6 ;循环输出,用于初始化界面
mov cx,0
mov dh,op1 ;起行
mov dl,op2 ;起列
op6:
mov ah,02h
mov bh,00h
int 10h
push cx
mov ah,0ah
mov al,op3 ;要显示的字符
mov cx,01h
mov bh,00h
int 10h
pop cx
inc cx
inc op4 ;指出循环输出的是行还是列
cmp cx,op5 ;循环次数
jne op6
endm
;=======================================================
clean macro op1,op2,op3,op4 ;用于清屏,分别是起止的行和列
mov ah,6
mov bh,00010111b
mov al,0
mov ch,op1
mov cl,op2
mov dh,op3
mov dl,op4
int 10h
mov ah,2
mov bh,0
mov dh,0
mov dl,0
int 10h
endm
;======================================================
menu macro op1,op2,op3 ;用于屏幕上文字的输出
mov cx,0
mov ah,02h
mov bh,00h
mov dh,op1
mov dl,op2
int 10h
lea dx,op3
mov ah,9
int 21h
endm
;=======================================================
data segment
fgf db '===============================================$' ;分隔符menu1 db '1.start game$'
menu2 db '2.select level$' ;主界面上显示的内容
menu3 db '3.exit$'
menu4 db 'select number of menu:$'
menu5 db 'author: wangfeng$'
menu6 db 'NO. : 20042390$'