汇编课程设计打字游戏_第1页
汇编课程设计打字游戏_第2页
汇编课程设计打字游戏_第3页
汇编课程设计打字游戏_第4页
汇编课程设计打字游戏_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华北科技学院课程设计说明书专业:网络工程课程名称:汇编课程设计设计题目:打字游戏设计设计时间:2023-12-05至2023-12-16评语:_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________评阅成绩:____评阅教师:___课程设计报告的规定1、需求分析描述问题。简述课题要解决的问题是什么,有什么规定和限制条件。2、总体设计(程序设计组成框图、流程图)3、具体设计(模块功能说明(如函数功能、入口及出口参数说明,过程调用关系描述等))4、调试与测试:调试方法,测试结果的分析与讨论,测试过程中碰到的重要问题及采用的解决措施5、测试结果,用几组测试数据进行测试算法设计的对的性。6、附录。源程序清单和结果:源程序要加注释。结果要涉及测试数据和运营结果。《汇编语言》课程设计案例问题陈述及其需求分析规定:运用汇编语言编写一个小的打字游戏内容:编写程序,在打开的菜单页面中选择游戏的难度。难度选择涉及以下5个选择(1)veryslow(2)slow(3)normal(4)fast(5)veryfast在编写过程中涉及以下几个部分:初始化上部分的字母获得下落的字母字母下移,同时覆盖本来的字母判断是否有输入若无输入则下落到最后覆盖本来的字符重新进行循环二、总体设计主菜单流程图开始菜单选择开始菜单选择输入选择难度输入选择难度VeryfastfastnormalslowVeryfastfastnormalslowVeryslow开始游戏开始游戏游戏失败游戏失败结束结束这个菜单部分重要是为了给不同水平的玩家选择游戏的速度,菜单上有对不同难度的描述,有助于玩家的选择。在选择过后会跳出一个提醒界面,提醒在游戏时的一些注意事项,之后键入任意键进入游戏,开始游戏。三、具体设计游戏程序框图开始游戏开始游戏初始化屏幕上部的字母初始化屏幕上部的字母字母下落字母下落屏幕下部图像所有消失屏幕下部图像所有消失游戏结束游戏结束键入字符键入字符键入ESC?N键入回车?键入ESC?N键入回车?YYYY退出程序返回主菜单退出程序返回主菜单此部分是进入游戏以后的设定,先初始化边框,同时将屏幕上方的字母初始化,将屏幕下方添加代表“生命”的笑脸,当笑脸所有消失,则游戏失败,退出游戏。在游戏过程中,键入ESC建,则直接退出游戏。字母下落部分流程图字母下落字母下落是否有生命?是否有输入?是否有生命?是否有输入?YYYY空格覆盖当前字符N是SPACE?N输入对的?N空格覆盖当前字符N是SPACE?N输入对的?N字母下移YY字母下移YY暂停字母消失暂停字母消失NN是SPACE?Y是SPACE?Y游戏结束游戏结束这个部分是游戏的核心部分。重要的想法是在某个地方出现字母,然后延迟一段时间(延迟时间由游戏速度控制),判断是否有输入字符,同时判断字符是否为空格或者对的的字符。输入的字符对的,则用空格覆盖当前的字符,同时产生下一个字母,反复上面的过程。若没有输入字符,则用空格覆盖当前字符,将当前字符在下一格处显示出来,不断的反复,直到最后笑脸处,将笑脸用空格覆盖,同时产生一个新的字母。四、编码和测试主菜单部分如下图所示:选择时效果如下图所示在输入的字符不是1~5或ESC键时,不会有任何反映,当多次键入1~5或ESC键时,按最后一次键入的有效,选择游戏难度后,键入ENTER键开始游戏。进入游戏后提醒信息如下图所示:这里用了一个INT21H的中断,等待接受一个字符来继续程序。同时给出了游戏过程中的一些提醒。游戏过程如下图所示:提醒:在游戏过程中程序之辨认大写字母,需要打开大写锁定进行游戏,否则不管输入对的与否,都不会有变化。游戏失败时界面如下图:输入ENTER键继续,输入其他键没有任何变化。失败以后的提醒画面如下:键入ENTER键则返回主菜单,键入ESC键退出程序。退出程序的界面如下图: 总结与体会当我拿到这次课程设计的题目选择时,有点无从下手的感觉,最后选择了这个打字游戏,由于我对游戏本来就有比较大的爱好。当是在写程序的过程中发现了很多很多的问题,比如最开始不知道该如何设计布局,设计游戏界面。我上网找别人写好得程序,学习别人的布局方法,终于有了一点设计的思绪,让我感觉有设计的想法了。后来在设计游戏的时候发现不知道该如何产生下落的字母,起初是想使用一个产生随机数的模块,大体思绪是调用系统的时间,然后再把它除上26,求出它的余数。但是在使用的过程中发现不知道该如何控制它为字母,在使用的时候会出现一些乱码,所以我就放弃了。后来就定义了一个无顺序的字母串,让它代替产生随机的字母,但是由于不是随机产生的,所以有一定的顺序,这是这个程序局限性的地方。再之后我发现不懂得如何控制游戏的速度,我就上网搜索,看别人的程序,最后发现可以使用一个循环,占用系统的CPU时间但不做任何解决,这样就可以当做延迟使用。同时设定不同的延迟时间,来控制游戏速度。在写程序的过程中我发现了很多本来上课没有说到的中断调用,比如INT10H,INT0AH等等,这些我们都没有见到过,但是在写程序的过程中又需要多次使用,这给我导致了很大的困扰。我多次上网查找相关的资料和相关的实例,多次实验后终于初步了解了这些中断调用的用法。这次的课程设计让我有很大的收获,不仅编写出了一个小游戏,还让我懂得应用一些本来课上没有机会用得一些知识。但是编写的过程中尚有很多的遗憾,比如无法产生随机数,或者计时犯错等等问题。在以后的学习中,要更注意。附录:程序重要代码;**************************************;宏部分;**************************************;宏名:INIT_GAME;功能描述:初始化游戏,设立游戏的边框等INIT_GAMEMACROOP1,OP2,OP3,OP4,OP5,OP6MOVCX,00HMOVDH,OP1MOVDL,OP2OP6:MOVAH,02HMOVBH,00HINT10HPUSHCXMOVAH,0AHMOVAL,OP3MOVBH,00HMOVCX,01HINT10HPOPCXINCCXINCOP4CMPCX,OP5JNEOP6ENDM;功能描述:初始化屏幕;参数:(OP1,OP2)为左上角坐标;(OP3,OP4)为右下角坐标CLEAR_SCREENMACROOP1,OP2,OP3,OP4MOVAH,06HMOVAL,00HMOVBH,71HMOVCH,OP1MOVCL,OP2MOVDH,OP3MOVDL,OP4INT10HMOVAH,02HMOVBH,00HMOVDH,00HMOVDL,00HINT10HENDM;菜单宏,用于布局MENUMACROOP1,OP2,OP3MOVAH,02HMOVBH,00HMOVDH,OP1MOVDL,OP2INT10HMOVAH,09HLEADX,OP3INT21HENDM;***************************************;主程序部分;***************************************CODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVLETTER_COUNTER,00HMOVPRESENT_POSITION,1LEASI,POSITION_FLAGMOVAH,00HMOVCX,00HINIT_POSTION_FLAG:MOV[SI],AHINCSIINCCXCMPCX,78DJNEINIT_POSTION_FLAGLEADI,LETTERSLEASI,LETTERS_BAKMOVCX,00HINIT_LETTERS:;循环把LETTERS_BAK给LETTERSMOVAH,[SI]MOV[DI],AHINCSIINCDIINCCXCMPCX,78DJNEINIT_LETTERSMOVAH,00H;循环把LIFE_FLAG赋值0LEASI,LIFE_FLAGMOVCX,00HINIT_LIFE_FLAG:MOV[SI],AHINCSIINCCXCMPCX,78DJNEINIT_LIFE_FLAGMOVCX,00HMOVAH,01H;设立光标大小ORCH,00010000BINT10HCLEAR_SCREEN00D,00D,24D,79DINIT_GAME00D,00D,04H,DL,80D,NEXTSIGN1;设立屏幕的边框,光标的位置INIT_GAME24D,00D,04H,DL,80D,NEXTSIGN2INIT_GAME00D,00D,04H,DH,25D,NEXTSIGN3INIT_GAME00D,79D,04H,DH,25D,NEXTSIGN4MENU01D,15D,MEG;菜单信息的宏展开MENU01H,61D,LINJIANGMENU03D,20D,MEG1MENU03D,60D,NOMENU05D,15D,MEG2MENU07D,15D,MEG3MENU09D,15D,MEG4MENU11D,15D,MEG5MENU13D,15D,MEG6MENU15D,15D,MEG7MENU17D,15D,MEG11MENU19D,15D,MEG9MENU22D,15D,MEG10;**************************************;选择界面;**************************************;选择菜单部分INPUT:MOVAH,02HMOVBH,00HMOVDH,22DMOVDL,33DINT10HMOVAH,0AH;显示空字符MOVAL,""MOVBH,00HMOVCX,01HINT10HMOVAH,01HINT21HRETRY:CMPAL,"1";速度选择部分JESPEED1CMPAL,"2"JESPEED2CMPAL,"3"JESPEED3CMPAL,"4"JESPEED4CMPAL,"5"JESPEED5CMPAL,"6"JESPEED6CMPAL,1BHJETO_OVER0JMPINPUTTO_OVER0:JMPOVERSPEED1:MOVAH,01HINT21HCMPAL,0DH;比较是否为回车JNEOTHERKEYMOVAX,SPEED+2MOVSPEED,AXJMPBEGINSPEED2:MOVAH,01HINT21HCMPAL,0DHJNEOTHERKEYMOVAX,SPEED+4MOVSPEED,AXJMPBEGINSPEED3:MOVAH,01HINT21HCMPAL,0DHJNEOTHERKEYMOVAX,SPEED+6MOVSPEED,AXJMPBEGINSPEED4:MOVAH,01HINT21HCMPAL,0DHJNEOTHERKEYMOVAX,SPEED+8MOVSPEED,AXJMPBEGINSPEED5:MOVAH,01HINT21HCMPAL,0DHJNEOTHERKEYMOVAX,SPEED+10MOVSPEED,AXJMPBEGINSPEED6:MOVAH,01HINT21HCMPAL,0DHJNEOTHERKEYMOVAX,SPEED+12MOVSPEED,AXJMPBEGINOTHERKEY:;解决反复输入的代码段,多次输入则覆盖PUSHAXMOVAH,02HMOVBH,00HMOVDH,22DMOVDL,34DINT10HMOVAH,0AHMOVAL,""MOVBH,00HMOVCX,01HINT10HMOVAH,02HMOVBH,00HMOVDH,22DMOVDL,33DINT10HPOPAXMOVDX,AXMOVAH,02HINT21HJMPRETRY;******************************************;字母下落的代码段部分;******************************************MOVAH,02HMOVBH,00HMOVDH,01HINT10HMOVCX,00HNEXTROW:PUSHCX;新的一行MOVCX,00HOUT_CYCLE:;延迟PUSHCXMOVCX,00HIN_CYCLE:ADDCX,01HCMPCX,50000DJNEIN_CYCLEPUSHDXMOVAH,06HMOVDL,0FFHINT21HPOPDXJZPASS;假如键盘缓冲区部分为空,则跳转CMPAL,1BH;假如键入ESC,则返回主菜单JETO_START1CMPAL,"";假如键入SPACE,则游戏暂停JEPAUSECMPAL,[DI];输入字母对的!跳转!JEDISAPPEARPASS:POPCXINCCXCMPCX,SPEEDJEPRINTJMPOUT_CYCLEPAUSE:PUSHDX;暂停解决MOVAH,06HMOVDL,0FFHINT21HPOPDXCMPAL,""JNEPAUSEJMPPASSTO_START1:;返回主菜单JMPSTARTPRINT:;当本行没有输入字符时,用空格覆盖本来字符,同时字符下移一位MOVAH,0AHMOVAL,""MOVBH,00HMOVCX,01HINT10HINCDH;行号加一,下移一行MOVAH,02HMOVBH,00HINT10HMOVAH,0AHMOVAL,[DI]MOVBH,00HMOVCX,01HINT10HPOPCXINCCXCMPCX,21DJEPRINT_NEXT_LETTER;循环结束,跳入解决空格处JMPNEXTROW;下一行,重新进行鉴定DISAPPEAR:;击中字母后的相关解决POPCXPOPCXMOVAH,0AHMOVAL,""MOVBH,00HMOVCX,01HINT10H;输入对的时用空格覆

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论