资源描述:
《微机原理汇编语言之猜数字游戏》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、猜数字游戏设计文档(源代码是上传文档加上去的,见最后面)一、需求分析首先,用户输入猜测次数,游戏开始循环。数字有四位,格式为:1234每次用户输入一个数字,游戏都会显示四个字符:A代表数字和位置都正确B代表数字正确,但是位置不对?代表没有这个数字比如:假如要猜的数字是4321,用户输入4321,程序显示AAAA,用户获胜!假如要猜的数字是4321,用户输入1234,程序显示BBBB假如要猜的数字是4321,用户输入5674,程序显示???B假如要猜的数字是4321,用户输入5678,程序显示????如果在给定次数内,用户猜对,则用户胜利,游戏结束;如果在给定的次数里,用户没有
2、猜到,则用户失败,游戏结束。二、概要设计采用封装函数的思想,将生成随机数、比较用户输入结果分别封装成函数游戏分成四个功能模块1.生成四个随机数2.用户输入猜测次数3.用户猜数4.显示猜测结果戏总体流程图:开始游戏生成随机数输入游戏次数输入数字判断数字N游戏次数是否用完输出判断结果N判断游戏是否成功failNsuccess输出结果Y游戏结束生成随机数流程图:生成1个随机数判断是否跟已有随机数重复重复不重复将随机数保存到S3判断是否生成4个随机数NY比较输入结果流程图:判断一个字符是否在系统生成的S3中N置‘?‘Y判断是否在对应下标N置‘B’Y置‘A’判断4个字符是否比较完NY一
3、、详细设计1.输入数字,游戏次数使用DOS功能调用来实现键盘输入。输入单个字符(游戏次数)用1号功能,输入字符串(数字)用9号功能。2.生成随机数读取时钟数值,进行运算得到随机数。3.比较结果首先将输入的数字和生成的四位随机数进行比较,按照要求输出判断结果;然后,判断游戏次数是否用完。输出结果按照要求输出结果,分游戏成功和游戏失败两种情况。二、运行调试源代码:DATASEGMENTS3DB4DUP(30H),':IStherandomnumber.',0AH,0DH,'$';产生的4个数NUMDB5,0,5DUP(?),0AH,0DH,'$';输入缓冲区RESULTDB'AA
4、AA',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,'$'DATAENDSSTACK1SEGMENTPARASTAC
5、KDB10DUP(0)STACK1ENDSCOSEGSEGMENTASSUMECS:COSEG,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AXLEASI,S3CALLRANDOM;调用封装的函数RANDOM产生随机数;-------显示系统生成的4个随机数--------;MOVDX,OFFSETS3;MOVAH,09H;INT21H;-------提示输入猜测次数,并保存在BL--------MOVDX,OFFSETS1MOVAH,09HINT21HMOVAH,01H;输入次数INT21HSUBAL,30HMOVBX,0MOVBL,AL;猜测
6、次数入BLMOVAH,02H;回车换行MOVDL,0DHINT21HMOVAH,02HMOVDL,0AHINT21H;--------------用户猜测---------------GUESS:PUSHBXCALLCOMPARE;调用封装函数,将比较结果保存在GUSPOPBXLEADX,GUS;显示猜测结果MOVAH,09HINT21HLEASI,RESULT;判断是否完全相同LEADI,GUSMOVCX,4REPZCMPSBJEOUT1;完全相同,转OUT1DECBL;猜错,则猜测次数减1JNZOUT2LEADX,FAIL;次数为0,失败信息MOVAH,09HINT21H
7、JMPOVEROUT1:;输出获胜信息LEADX,WINMOVAH,09HINT21HJMPOVEROUT2:;提示重新输入随机数MOVDX,OFFSETS4MOVAH,09HINT21HJMPGUESSOVER:MOVAH,4CHINT21H;----------封装函数RANDOM,产生4个不同随机数,并保存在S3----------RANDOMPROCPUSHCXPUSHDXPUSHAXSTIMOVBH,4RAND:;产生一个随机数MOVAH,0INT1AH;读时钟计数器值,16位放在DXMOVA