课程设计打字游戏.doc

上传人:b**** 文档编号:14743303 上传时间:2023-06-26 格式:DOC 页数:15 大小:141KB
下载 相关 举报
课程设计打字游戏.doc_第1页
第1页 / 共15页
课程设计打字游戏.doc_第2页
第2页 / 共15页
课程设计打字游戏.doc_第3页
第3页 / 共15页
课程设计打字游戏.doc_第4页
第4页 / 共15页
课程设计打字游戏.doc_第5页
第5页 / 共15页
课程设计打字游戏.doc_第6页
第6页 / 共15页
课程设计打字游戏.doc_第7页
第7页 / 共15页
课程设计打字游戏.doc_第8页
第8页 / 共15页
课程设计打字游戏.doc_第9页
第9页 / 共15页
课程设计打字游戏.doc_第10页
第10页 / 共15页
课程设计打字游戏.doc_第11页
第11页 / 共15页
课程设计打字游戏.doc_第12页
第12页 / 共15页
课程设计打字游戏.doc_第13页
第13页 / 共15页
课程设计打字游戏.doc_第14页
第14页 / 共15页
课程设计打字游戏.doc_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

课程设计打字游戏.doc

《课程设计打字游戏.doc》由会员分享,可在线阅读,更多相关《课程设计打字游戏.doc(15页珍藏版)》请在冰点文库上搜索。

课程设计打字游戏.doc

汇编语言课程设计

设计题目:

指法练习

班级:

计算机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_gamemacroop1,op2,op3,op4,op5,op6;循环输出,用于初始化界面

movcx,0

movdh,op1;起行

movdl,op2;起列

op6:

movah,02h

movbh,00h

int10h

pushcx

movah,0ah

moval,op3;要显示的字符

movcx,01h

movbh,00h

int10h

popcx

inccx

incop4;指出循环输出的是行还是列

cmpcx,op5;循环次数

jneop6

endm

;=======================================================

cleanmacroop1,op2,op3,op4;用于清屏,分别是起止的行和列

movah,6

movbh,00010111b

moval,0

movch,op1

movcl,op2

movdh,op3

movdl,op4

int10h

movah,2

movbh,0

movdh,0

movdl,0

int10h

endm

;======================================================

menumacroop1,op2,op3;用于屏幕上文字的输出

movcx,0

movah,02h

movbh,00h

movdh,op1

movdl,op2

int10h

leadx,op3

movah,9

int21h

endm

;=======================================================

datasegment

fgfdb'===============================================$';分隔符

menu1db'1.startgame$'

menu2db'2.selectlevel$';主界面上显示的内容

menu3db'3.exit$'

menu4db'selectnumberofmenu:

$'

menu5db'author:

wangfeng$'

menu6db'NO.:

20042390$'

menu7db'1.veryeasy$'

menu8db'2.normal$';难度的选择

menu9db'3.hard$'

menu10db'4.return$'

menu11db'data:

2006.12.24$'

meg1db'pressanykeytostartthegame...$';游戏开始之前的提示

meg2db'pressesckeyreturnmainmenu$'

meg3db'pressspacekeyforpause$'

meg4db'whenthegamewaspaused,pressesetoquit!

$'

meg5db'life:

$';生命数

meg6db'score:

$';分数

meg7db'hittheletternum:

$'

meg8db'missletternum:

$'

meg9db'theshootingis:

$'

madb0

mbdb0

sped1dw0

speeddw3000d;游戏的速度,也决定了游戏的难度

lettersdb78dup(0);上方显示的字母

lifedb39h

positiondb1;上方字母的位置用于控制落下的字母

time_mdb0

time_sdb0

xmuldb13

ndb26

score1db0

leveldb1

hangdb0

linedb0

fen1db0

fen2db0

fen3db0

fen4db0

fen5db0

stringdb'100%$'

errordb0

dataends

;============================================

codesegment

assumecs:

code,ds:

data;,ss:

stack

15

start:

movax,data

movds,ax

;这里是几个数据的初始化

movposition,1

movspeed,3000

movlevel,1

movsped1,50000

moverror,0

movscore1,0

jiemian:

movah,01h

movcx,00h

orch,00010000b

int10h

;置光标类型,用于隐藏光标

clean0,0,24,79

;下面这些是游戏的初始化

init_game0,0,08h,dl,80,sk1

init_game24,0,08h,dl,80,sk2

init_game0,0,08h,dh,25,sk3

init_game0,79,08h,dh,25,sk4

menu5,15,fgf

menu7,25,menu1

;界面显示

menu9,25,menu2

menu11,25,menu3

menu13,15,fgf

menu15,25,menu4

menu17,55,menu5

menu19,55,menu6

menu21,55,menu11

movah,2

movbh,0

movdh,15

movdl,47

int10h

;把光标放在合适的位置

movah,0ah

moval,''

movbh,00h

movcx,01h

int10h

;在选择时屏蔽其他的按键,使之不出现在屏幕上

movah,1

int21h

input:

cmpal,'1'

jebegin

;当输入字符是1时,

;跳转到begin开始游戏

cmpal,'2'

jeto_speed_c

;当输入字符是2时,跳转,

;由于不能直接跳转到

;speed_c故用了个转移

cmpal,'3'

jeto_exit

cmpal,1bh

jeto_exit_d

to_otherkey:

jmpotherkey

to_exit:

movah,1

int21h

cmpal,0dh

jneto_otherkey

jmpexit

to_speed_c:

jmpspeed_c

to_exit_d:

jmpexit

;===================================

begin:

movah,1

int21h

cmpal,0dh

jneto_otherkey

clean1,1,23,78

play_message:

;显示有关游戏提示

menu10,18,meg1

menu12,18,meg2

menu14,18,meg3

menu16,18,meg4

movah,07h

int21h

cmpal,1bh

;按任意键继续,

;不把输入的字符显示在屏幕上

jeto_jm

jmpplay

to_jm:

jmpjiemian

play:

clean1,1,23,78

movlife,39h

movah,2

movbh,0

movdh,1

movdl,1

int10h

movbx,0

leasi,letters

output_letters:

;显示上方字母

movah,2ch

int21h

moval,dl

movah,0

divn

movdl,ah

adddl,61h

mov[si],dl

movah,2

int21h

movcx,14987

callwaitf

incsi

incbx

cmpbx,78

jenext

jmpoutput_letters

next:

menu23,70,meg5

menu23,30,meg6

;生命数的相关显示

pushdx

movah,2

movbh,0

movdh,23

movdl,76

int10h

movah,0ah

moval,life

movbh,0

movcx,1

int10h

movah,2

movbh,0

movdh,23

movdl,43

int10h

movah,0ah

moval,score1

moval,30h

movbh,0

movcx,1

int10h

popdx

jmpgame

sub_p:

subposition,78

cmpposition,0

jnenext3

incposition

next3:

jmpgame_next

game:

leasi,letters

movah,2ch

;伪随机算法,方法是读取1/100秒,

int21h

moval,dl

movposition,al

cmpposition,0

jnenext2

incposition

next2:

cmpposition,78

;和78比较,大于则减去78

jasub_p

game_next:

addsi,wordptrposition

decsi

movdl,position

;position就代表的是列

movah,02h

movdh,1

movbh,0

int10h

;置光标位置

movbl,12h

temp:

movcx,0

nextrow:

pushcx

movcx,0

yanchi:

;延迟

pushcx

movcx,0

yanchi1:

addcx,1

cmpcx,sped1

;延迟

jneyanchi1

pushdx

movah,06h

movdl,0ffh

int21h

popdx

jzpass

;不输入则跳转pass

cmpal,""

jepause1;空格,暂停

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2