您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 微机原理总汇编语言之猜数字游戏
实用文档标准猜数字游戏设计文档(源代码是上传文档加上去的,见最后面)一、需求分析首先,用户输入猜测次数,游戏开始循环。数字有四位,格式为:1234每次用户输入一个数字,游戏都会显示四个字符:A代表数字和位置都正确B代表数字正确,但是位置不对?代表没有这个数字比如:假如要猜的数字是4321,用户输入4321,程序显示AAAA,用户获胜!假如要猜的数字是4321,用户输入1234,程序显示BBBB假如要猜的数字是4321,用户输入5674,程序显示???B假如要猜的数字是4321,用户输入5678,程序显示????如果在给定次数内,用户猜对,则用户胜利,游戏结束;如果在给定的次数里,用户没有猜到,则用户失败,游戏结束。二、概要设计采用封装函数的思想,将生成随机数、比较用户输入结果分别封装成函数游戏分成四个功能模块1.生成四个随机数2.用户输入猜测次数3.用户猜数4.显示猜测结果戏总体流程图:生成随机数输入游戏次数开始游戏实用文档标准NNfailNsuccessY输入数字游戏次数是否用完判断数字输出判断结果判断游戏是否成功输出结果游戏结束实用文档标准生成随机数流程图:重复不重复NY生成1个随机数判断是否跟已有随机数重复将随机数保存到S3判断是否生成4个随机数实用文档标准比较输入结果流程图:NYNYNY判断一个字符是否在系统生成的置‘?‘判断是否在对应下标置‘B’置‘A’判断4个字符是否比较完实用文档标准三、详细设计1.输入数字,游戏次数使用DOS功能调用来实现键盘输入。输入单个字符(游戏次数)用1号功能,输入字符串(数字)用9号功能。2.生成随机数读取时钟数值,进行运算得到随机数。3.比较结果首先将输入的数字和生成的四位随机数进行比较,按照要求输出判断结果;然后,判断游戏次数是否用完。输出结果按照要求输出结果,分游戏成功和游戏失败两种情况。四、运行调试实用文档标准源代码:DATASEGMENTS3DB4DUP(30H),':IStherandomnumber.',0AH,0DH,'$';产生的4个数NUMDB5,0,5DUP(?),0AH,0DH,'$';输入缓冲区RESULTDB'AAAA',0AH,0DH,'$'GUSDB4DUP(30H),0AH,0DH,'$';用户输入的4个数S1DB'Pleaseinputtimesfrom1to9',0AH,0DH,'$'S2DB'Pleaseinputrandomnumber',0AH,0DH,'$'S4DB'Yourinputiswrong',0AH,0DH,'$'FAILDB'Youhavenotime,Youlostthegame!',0AH,0DH,'$'WINDB'Congratulations!Yousucceed!',0AH,0DH,'$'DATAENDSSTACK1SEGMENTPARASTACKDB10DUP(0)STACK1ENDSCOSEGSEGMENTASSUMECS:COSEG,DS:DATA实用文档标准START:MOVAX,DATAMOVDS,AXMOVES,AXLEASI,S3CALLRANDOM;调用封装的函数RANDOM产生随机数;-------显示系统生成的4个随机数--------;MOVDX,OFFSETS3;MOVAH,09H;INT21H;-------提示输入猜测次数,并保存在BL--------MOVDX,OFFSETS1MOVAH,09HINT21HMOVAH,01H;输入次数INT21HSUBAL,30HMOVBX,0MOVBL,AL;猜测次数入BLMOVAH,02H;回车换行MOVDL,0DHINT21HMOVAH,02HMOVDL,0AHINT21H;--------------用户猜测---------------GUESS:PUSHBXCALLCOMPARE;调用封装函数,将比较结果保存在GUSPOPBXLEADX,GUS;显示猜测结果MOVAH,09HINT21HLEASI,RESULT;判断是否完全相同LEADI,GUSMOVCX,4REPZCMPSB实用文档标准JEOUT1;完全相同,转OUT1DECBL;猜错,则猜测次数减1JNZOUT2LEADX,FAIL;次数为0,失败信息MOVAH,09HINT21HJMPOVEROUT1:;输出获胜信息LEADX,WINMOVAH,09HINT21HJMPOVEROUT2:;提示重新输入随机数MOVDX,OFFSETS4MOVAH,09HINT21HJMPGUESSOVER:MOVAH,4CHINT21H;----------封装函数RANDOM,产生4个不同随机数,并保存在S3----------RANDOMPROCPUSHCXPUSHDXPUSHAXSTIMOVBH,4RAND:;产生一个随机数MOVAH,0INT1AH;读时钟计数器值,16位放在DXMOVAX,DXMOVBL,73MULBLANDAH,9;清高6位MOVDL,10DIVDL;除10,产生0~9余数ADDAH,30HMOVBL,AH;余数存BX,作随机数实用文档标准JMPX1X1:;使生成的随机数不重复MOVCL,4LEADI,S3MOVAL,BLCLD;清DF,每次扫描后指针增量REPNZSCASB;直到找到相同随机数或CX=0JZRAND;若找到相同的,则重新生成随机数JMPX2;没找到X2:;随机数入字符串MOV[SI],BLINCSIDECBHJNZRANDPOPAXPOPDXPOPCXRETRANDOMENDP;-----封装的函数COMPARE,根据用户输入的随机数,把比较结果保存在GUS中--------COMPAREPROCPUSHCXPUSHDXPUSHAXSTI;猜数初始化MOVDX,OFFSETS2;提示用户输入4个数MOVAH,09HINT21HLEADX,NUM;用户输入4个数MOVAH,0AHINT21HLEASI,NUM+2;缓冲区随机数入GUSLEADI,GUSMOVCX,4REPMOVSBMOVAH,02H;回车换行实用文档标准MOVDL,0DHINT21HMOVAH,02HMOVDL,0AHINT21HLEASI,GUSMOVBX,SIMOVDL,4;DL为当前未比较的随机数个数FOUND1:;判断一个随机数是否在S3中,不在则置‘?’MOVCX,4LEADI,S3;每次循环都会重置MOVAL,[SI];一个随机数送ALCLDREPNZSCASB;扫描字符串S3,直到找到随机数或CX=0JZFOUND2;在S3中,转FOUND2MOVAL,'?'MOV[SI],ALJMPTEMPFOUND2:;判断关键字是否在对应下标位置,不在则置‘B’MOVCX,SISUBCX,BXLEABP,S3DECDISUBDI,BPCMPDI,CXJZFOUND3;在对应位置,转FOUND3MOVAL,'B';不在对应位置MOV[SI],ALJMPTEMPFOUND3:;置AMOVAL,'A'MOV[SI],ALJMPTEMPTEMP:;猜测循环判断和输出猜测结果INCSIDECDL实用文档标准CMPDL,0JNZFOUND1;若4个随机数未比较完,转FOUND1POPAXPOPDXPOPCXRETCOMPAREENDPCOSEGENDSENDSTART
本文标题:微机原理总汇编语言之猜数字游戏
链接地址:https://www.777doc.com/doc-6130894 .html