课程设计打字游戏

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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$'

相关文档
最新文档