汇编课程设计汇本打字游戏.docx

上传人:b****6 文档编号:11889901 上传时间:2023-06-03 格式:DOCX 页数:24 大小:108.59KB
下载 相关 举报
汇编课程设计汇本打字游戏.docx_第1页
第1页 / 共24页
汇编课程设计汇本打字游戏.docx_第2页
第2页 / 共24页
汇编课程设计汇本打字游戏.docx_第3页
第3页 / 共24页
汇编课程设计汇本打字游戏.docx_第4页
第4页 / 共24页
汇编课程设计汇本打字游戏.docx_第5页
第5页 / 共24页
汇编课程设计汇本打字游戏.docx_第6页
第6页 / 共24页
汇编课程设计汇本打字游戏.docx_第7页
第7页 / 共24页
汇编课程设计汇本打字游戏.docx_第8页
第8页 / 共24页
汇编课程设计汇本打字游戏.docx_第9页
第9页 / 共24页
汇编课程设计汇本打字游戏.docx_第10页
第10页 / 共24页
汇编课程设计汇本打字游戏.docx_第11页
第11页 / 共24页
汇编课程设计汇本打字游戏.docx_第12页
第12页 / 共24页
汇编课程设计汇本打字游戏.docx_第13页
第13页 / 共24页
汇编课程设计汇本打字游戏.docx_第14页
第14页 / 共24页
汇编课程设计汇本打字游戏.docx_第15页
第15页 / 共24页
汇编课程设计汇本打字游戏.docx_第16页
第16页 / 共24页
汇编课程设计汇本打字游戏.docx_第17页
第17页 / 共24页
汇编课程设计汇本打字游戏.docx_第18页
第18页 / 共24页
汇编课程设计汇本打字游戏.docx_第19页
第19页 / 共24页
汇编课程设计汇本打字游戏.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

汇编课程设计汇本打字游戏.docx

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

汇编课程设计汇本打字游戏.docx

汇编课程设计汇本打字游戏

 

华北科技学院

 

课程设计说明书

 

专业:

网络工程

课程名称:

汇编课程设计

设计题目:

打字游戏设计

设计时间:

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键退出程序。

 

退出程序的界面如下图:

 

5.总结与体会

当我拿到这次课程设计的题目选择时,有点无从下手的感觉,最后选择了这个打字游戏,因为我对游戏本来就有比较大的兴趣。

当是在写程序的过程中发现了很多很多的问题,比如最开始不知道该如何设计布局,设计游戏界面。

我上网找别人写好得程序,学习别人的布局方法,终于有了一点设计的思路,让我感觉有设计的想法了。

后来在设计游戏的时候发现不知道该如何产生下落的字母,起初是想使用一个产生随机数的模块,大体思路是调用系统的时间,然后再把它除上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

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

当前位置:首页 > 人文社科 > 法律资料

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

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