汇编课程设计打字游戏.docx
- 文档编号:27597437
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:24
- 大小:111.64KB
汇编课程设计打字游戏.docx
《汇编课程设计打字游戏.docx》由会员分享,可在线阅读,更多相关《汇编课程设计打字游戏.docx(24页珍藏版)》请在冰豆网上搜索。
汇编课程设计打字游戏
华北科技学院
课程设计说明书
专业:
网络工程
课程名称:
汇编课程设计
设计题目:
打字游戏设计
设计时间:
2011-12-05至2011-12-16
评语:
________________________________
_________________________________________
_________________________________________
_________________________________________
_________________________________________
_________________________________________
评阅成绩:
____评阅教师:
___
课程设计报告的要求
1、需求分析
描述问题。
简述课题要解决的问题是什么,有什么要求和限制条件。
2、总体设计(程序设计组成框图、流程图)
3、详细设计(模块功能说明(如函数功能、入口及出口参数说明,过程调用关系描述等))
4、调试与测试:
调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施
5、测试结果,用几组测试数据进行测试算法设计的正确性。
6、附录。
源程序清单和结果:
源程序要加注释。
结果要包括测试数据和运行结果。
《汇编语言》课程设计案例
一、问题陈述及其需求分析
要求:
利用汇编语言编写一个小的打字游戏
内容:
编写程序,在打开的菜单页面中选择游戏的难度。
难度选择包括以下5个选择
(1)veryslow
(2)slow
(3)normal
(4)fast
(5)veryfast
在编写过程中包括以下几个部分:
(1)初始化上部分的字母
(2)获得下落的字母
(3)字母下移,同时覆盖原来的字母
(4)判断是否有输入
(5)若无输入则下落到最后
(6)覆盖原来的字符
(7)重新进行循环
二、总体设计
主菜单流程图
这个菜单部分主要是为了给不同水平的玩家选择游戏的速度,菜单上有对不同难度的描述,有助于玩家的选择。
在选择过后会跳出一个提示界面,提示在游戏时的一些注意事项,之后键入任意键进入游戏,开始游戏。
三、详细设计
游戏程序框图
此部分是进入游戏以后的设定,先初始化边框,同时将屏幕上方的字母初始化,将屏幕下方添加代表“生命”的笑脸,当笑脸全部消失,则游戏失败,退出游戏。
在游戏过程中,键入ESC建,则直接退出游戏。
字母下落部分流程图
这个部分是游戏的核心部分。
主要的想法是在某个地方出现字母,然后延迟一段时间
(延迟时间由游戏速度控制),判断是否有输入字符,同时判断字符是否为空格或者正确的字符。
输入的字符正确,则用空格覆盖当前的字符,同时产生下一个字母,重复上面的过程。
若没有输入字符,则用空格覆盖当前字符,将当前字符在下一格处显示出来,不断的重复,直到最后笑脸处,将笑脸用空格覆盖,同时产生一个新的字母。
四、编码和测试
主菜单部分如下图所示:
选择时效果如下图所示
在输入的字符不是1~5或ESC键时,不会有任何反应,当多次键入1~5或ESC键时,按最后一次键入的有效,选择游戏难度后,键入ENTER键开始游戏。
进入游戏后提示信息如下图所示:
这里用了一个INT21H的中断,等待接收一个字符来继续程序。
同时给出了游戏过程中的一些提示。
游戏过程如下图所示:
提示:
在游戏过程中程序之识别大写字母,需要打开大写锁定进行游戏,否则不管输入正确与否,都不会有变化。
游戏失败时界面如下图:
输入ENTER键继续,输入其他键没有任何变化。
失败以后的提示画面如下:
键入ENTER键则返回主菜单,键入ESC键退出程序。
退出程序的界面如下图:
五.总结与体会
当我拿到这次课程设计的题目选择时,有点无从下手的感觉,最后选择了这个打字游戏,因为我对游戏本来就有比较大的兴趣。
当是在写程序的过程中发现了很多很多的问题,比如最开始不知道该如何设计布局,设计游戏界面。
我上网找别人写好得程序,学习别人的布局方法,终于有了一点设计的思路,让我感觉有设计的想法了。
后来在设计游戏的时候发现不知道该如何产生下落的字母,起初是想使用一个产生随机数的模块,大体思路是调用系统的时间,然后再把它除上26,求出它的余数。
但是在使用的过程中发现不知道该如何控制它为字母,在使用的时候会出现一些乱码,所以我就放弃了。
后来就定义了一个无顺序的字母串,让它代替产生随机的字母,但是因为不是随机产生的,所以有一定的顺序,这是这个程序不足的地方。
再之后我发现不懂得如何控制游戏的速度,我就上网搜索,看别人的程序,最后发现可以使用一个循环,占用系统的CPU时间但不做任何处理,这样就可以当做延迟使用。
同时设定不同的延迟时间,来控制游戏速度。
在写程序的过程中我发现了很多原来上课没有说到的中断调用,比如INT10H,
INT0AH等等,这些我们都没有见到过,但是在写程序的过程中又需要多次使用,这给我造成了很大的困扰。
我多次上网查找相关的资料和相关的实例,多次试验后终于初步了解了这些中断调用的用法。
这次的课程设计让我有很大的收获,不仅编写出了一个小游戏,还让我懂得应用一些原来课上没有机会用得一些知识。
但是编写的过程中还有很多的遗憾,比如无法产生随机数,或者计时出错等等问题。
在以后的学习中,要更注意。
附录:
程序主要代码
;**************************************
;宏部分
;**************************************
;宏名:
INIT_GAME
;功能描述:
初始化游戏,设置游戏的边框等
INIT_GAMEMACROOP1,OP2,OP3,OP4,OP5,OP6
MOVCX,00H
MOVDH,OP1
MOVDL,OP2
OP6:
MOVAH,02H
MOVBH,00H
INT10H
PUSHCX
MOVAH,0AH
MOVAL,OP3
MOVBH,00H
MOVCX,01H
INT10H
POPCX
INCCX
INCOP4
CMPCX,OP5
JNEOP6
ENDM
;功能描述:
初始化屏幕
;参数:
(OP1,OP2)为左上角坐标
;(OP3,OP4)为右下角坐标
CLEAR_SCREENMACROOP1,OP2,OP3,OP4
MOVAH,06H
MOVAL,00H
MOVBH,71H
MOVCH,OP1
MOVCL,OP2
MOVDH,OP3
MOVDL,OP4
INT10H
MOVAH,02H
MOVBH,00H
MOVDH,00H
MOVDL,00H
INT10H
ENDM
;菜单宏,用于布局
MENUMACROOP1,OP2,OP3
MOVAH,02H
MOVBH,00H
MOVDH,OP1
MOVDL,OP2
INT10H
MOVAH,09H
LEADX,OP3
INT21H
ENDM
;***************************************
;主程序部分
;***************************************
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVLETTER_COUNTER,00H
MOVPRESENT_POSITION,1
LEASI,POSITION_FLAG
MOVAH,00H
MOVCX,00H
INIT_POSTION_FLAG:
MOV[SI],AH
INCSI
INCCX
CMPCX,78D
JNEINIT_POSTION_FLAG
LEADI,LETTERS
LEASI,LETTERS_BAK
MOVCX,00H
INIT_LETTERS:
;循环把LETTERS_BAK给LETTERS
MOVAH,[SI]
MOV[DI],AH
INCSI
INCDI
INCCX
CMPCX,78D
JNEINIT_LETTERS
MOVAH,00H;循环把LIFE_FLAG赋值0
LEASI,LIFE_FLAG
MOVCX,00H
INIT_LIFE_FLAG:
MOV[SI],AH
INCSI
INCCX
CMPCX,78D
JNEINIT_LIFE_FLAG
MOVCX,00H
MOVAH,01H;设置光标大小
ORCH,00010000B
INT10H
CLEAR_SCREEN00D,00D,24D,79D
INIT_GAME00D,00D,04H,DL,80D,NEXTSIGN1;设置屏幕的边框,光标的位置
INIT_GAME24D,00D,04H,DL,80D,NEXTSIGN2
INIT_GAME00D,00D,04H,DH,25D,NEXTSIGN3
INIT_GAME00D,79D,04H,DH,25D,NEXTSIGN4
MENU01D,15D,MEG;菜单信息的宏展开
MENU01H,61D,LINJIANG
MENU03D,20D,MEG1
MENU03D,60D,NO
MENU05D,15D,MEG2
MENU07D,15D,MEG3
MENU09D,15D,MEG4
MENU11D,15D,MEG5
MENU13D,15D,MEG6
MENU15D,15D,MEG7
MENU17D,15D,MEG11
MENU19D,15D,MEG9
MENU22D,15D,MEG10
;**************************************
;选择界面
;**************************************
;选择菜单部分
INPUT:
MOVAH,02H
MOVBH,00H
MOVDH,22D
MOVDL,33D
INT10H
MOVAH,0AH;显示空字符
MOVAL,""
MOVBH,00H
MOVCX,01H
INT10H
MOVAH,01H
INT21H
RETRY:
CMPAL,"1";速度选择部分
JESPEED1
CMPAL,"2"
JESPEED2
CMPAL,"3"
JESPEED3
CMPAL,"4"
JESPEED4
CMPAL,"5"
JESPEED5
CMPAL,"6"
JESPEED6
CMPAL,1BH
JETO_OVER0
JMPINPUT
TO_OVER0:
JMPOVER
SPEED1:
MOVAH,01H
INT21H
CMPAL,0DH;比较是否为回车
JNEOTHERKEY
MOVAX,SPEED+2
MOVSPEED,AX
JMPBEGIN
SPEED2:
MOVAH,01H
INT21H
CMPAL,0DH
JNEOTHERKEY
MOVAX,SPEED+4
MOVSPEED,AX
JMPBEGIN
SPEED3:
MOVAH,01H
INT21H
CMPAL,0DH
JNEOTHERKEY
MOVAX,SPEED+6
MOVSPEED,AX
JMPBEGIN
SPEED4:
MOVAH,01H
INT21H
CMPAL,0DH
JNEOTHERKEY
MOVAX,SPEED+8
MOVSPEED,AX
JMPBEGIN
SPEED5:
MOVAH,01H
INT21H
CMPAL,0DH
JNEOTHERKEY
MOVAX,SPEED+10
MOVSPEED,AX
JMPBEGIN
SPEED6:
MOVAH,01H
INT21H
CMPAL,0DH
JNEOTHERKEY
MOVAX,SPEED+12
MOVSPEED,AX
JMPBEGIN
OTHERKEY:
;处理重复输入的代码段,多次输入则覆盖
PUSHAX
MOVAH,02H
MOVBH,00H
MOVDH,22D
MOVDL,34D
INT10H
MOVAH,0AH
MOVAL,""
MOVBH,00H
MOVCX,01H
INT10H
MOVAH,02H
MOVBH,00H
MOVDH,22D
MOVDL,33D
INT10H
POPAX
MOVDX,AX
MOVAH,02H
INT21H
JMPRETRY
;******************************************
;字母下落的代码段部分
;******************************************
MOVAH,02H
MOVBH,00H
MOVDH,01H
INT10H
MOVCX,00H
NEXTROW:
PUSHCX;新的一行
MOVCX,00H
OUT_CYCLE:
;延迟
PUSHCX
MOVCX,00H
IN_CYCLE:
ADDCX,01H
CMPCX,50000D
JNEIN_CYCLE
PUSHDX
MOVAH,06H
MOVDL,0FFH
INT21H
POPDX
JZPASS;如果键盘缓冲区部分为空,则跳转
CMPAL,1BH;如果键入ESC,则返回主菜单
JETO_START1
CMPAL,"";如果键入SPACE,则游戏暂停
JEPAUSE
CMPAL,[DI];输入字母正确!
跳转!
JEDISAPPEAR
PASS:
POPCX
INCCX
CMPCX,SPEED
JEPRINT
JMPOUT_CYCLE
PAUSE:
PUSHDX;暂停处理
MOVAH,06H
MOVDL,0FFH
INT21H
POPDX
CMPAL,""
JNEPAUSE
JMPPASS
TO_START1:
;返回主菜单
JMPSTART
PRINT:
;当本行没有输入字符时,用空格覆盖原来字符,同时字符下移一位
MOVAH,0AH
MOVAL,""
MOVBH,00H
MOVCX,01H
INT10H
INCDH;行号加一,下移一行
MOVAH,02H
MOVBH,00H
INT10H
MOVAH,0AH
MOVAL,[DI]
MOVBH,00H
MOVCX,01H
INT10H
POPCX
INCCX
CMPCX,21D
JEPRINT_NEXT_LETTER;循环结束,跳入处理空格处
JMPNEXTROW;下一行,重新进行判定
DISAPPEAR:
;击中字母后的相关处理
POPCX
POPCX
MOVAH,0AH
MOVAL,""
MOVBH,00H
MOVCX,01H
INT10H;输入正确时用空格覆盖当前字符
;**************************************
;游戏失败后的相关处理
;**************************************
FAIL:
MOVAH,0AH
MOVAL,""
MOVCX,01H
INT10H
INCDH
MOVAH,02H
MOVBH,00H
INT10H
MOVAH,0AH
MOVAL,[DI]
MOVBH,00H
MOVCX,01H
INT10H
MOVAH,02H
MOVBH,00H
MOVDH,12D
MOVDL,17D
INT10H
PUSHDX
MOVAH,09H
LEADX,FAILMEG
INT21H
POPDX
ADDDH,2
MOVAH,02H
MOVBH,00H
INT10H
MOVAH,09H
LEADX,FAILMEG0
INT21H
RE:
MOVAH,07H
INT21H
CMPAL,0DH
JNERE
CLEAR_SCREEN01,01,23,78;清屏,留下四周花边
MOVAH,02H
MOVBH,00H
MOVDH,11D
MOVDL,20D
INT10H
PUSHDX
MOVAH,09H
LEADX,FAILMEG1;显示提示字符串
INT21H
POPDX
INCDH
INCDH
MOVAH,02H
MOVBH,00H
INT10H
MOVAH,09H
LEADX,FAILMEG2
INT21H
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 课程设计 打字 游戏