微機(jī)原理匯編語(yǔ)言之猜數(shù)字游戲.doc
《微機(jī)原理匯編語(yǔ)言之猜數(shù)字游戲.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《微機(jī)原理匯編語(yǔ)言之猜數(shù)字游戲.doc(11頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
猜數(shù)字游戲設(shè)計(jì)文檔 (源代碼是上傳文檔加上去的,見(jiàn)最后面) 一、 需求分析 首先,用戶(hù)輸入猜測(cè)次數(shù), 游戲開(kāi)始循環(huán)。 數(shù)字有四位,格式為: 1234 每次用戶(hù)輸入一個(gè)數(shù)字,游戲都會(huì)顯示四個(gè)字符: A 代表數(shù)字和位置都正確 B 代表數(shù)字正確, 但是位置不對(duì) ?代表沒(méi)有這個(gè)數(shù)字 比如: 假如要猜的數(shù)字是4321, 用戶(hù)輸入4321, 程序顯示AAAA, 用戶(hù)獲勝! 假如要猜的數(shù)字是4321, 用戶(hù)輸入1234, 程序顯示BBBB 假如要猜的數(shù)字是4321, 用戶(hù)輸入5674, 程序顯示???B 假如要猜的數(shù)字是4321, 用戶(hù)輸入5678, 程序顯示???? 如果在給定次數(shù)內(nèi),用戶(hù)猜對(duì),則用戶(hù)勝利,游戲結(jié)束; 如果在給定的次數(shù)里, 用戶(hù)沒(méi)有猜到,則用戶(hù)失敗,游戲結(jié)束。 二、 概要設(shè)計(jì) 采用封裝函數(shù)的思想,將 生成隨機(jī)數(shù)、比較用戶(hù)輸入結(jié)果 分別封裝成函數(shù) 游戲分成四個(gè)功能模塊 1. 生成四個(gè)隨機(jī)數(shù) 2. 用戶(hù)輸入猜測(cè)次數(shù) 3. 用戶(hù)猜數(shù) 4. 顯示猜測(cè)結(jié)果戲 總體流程圖: 開(kāi)始游戲 生成隨機(jī)數(shù) 輸入游戲次數(shù) 輸入數(shù)字 判斷數(shù)字 N 游戲次數(shù)是否用完 輸出判斷結(jié)果 N 判斷游戲是否成功 fail N success 輸出結(jié)果 Y 游戲結(jié)束 生成隨機(jī)數(shù) 流程圖: 生成1個(gè)隨機(jī)數(shù) 判斷是否跟已有隨機(jī)數(shù)重復(fù) 重復(fù) 不重復(fù) 將隨機(jī)數(shù)保存到S3 判斷是否生成4個(gè)隨機(jī)數(shù) N Y 比較輸入結(jié)果 流程圖: 判斷一個(gè)字符是否在系統(tǒng)生成的S3中 N 置 ‘ ?‘ Y 判斷是否在對(duì)應(yīng)下標(biāo) N 置 ‘B’ Y 置 ‘A’ 判斷4個(gè)字符是否比較完 N Y 三、 詳細(xì)設(shè)計(jì) 1. 輸入數(shù)字,游戲次數(shù) 使用DOS功能調(diào)用來(lái)實(shí)現(xiàn)鍵盤(pán)輸入。輸入單個(gè)字符(游戲次數(shù))用1號(hào)功能,輸入字符串(數(shù)字)用9號(hào)功能。 2. 生成隨機(jī)數(shù) 讀取時(shí)鐘數(shù)值,進(jìn)行運(yùn)算得到隨機(jī)數(shù)。 3. 比較結(jié)果 首先將輸入的數(shù)字和生成的四位隨機(jī)數(shù)進(jìn)行比較,按照要求輸出判斷結(jié)果;然后,判斷游戲次數(shù)是否用完。 輸出結(jié)果 按照要求輸出結(jié)果,分游戲成功和游戲失敗兩種情況。 四、 運(yùn)行調(diào)試 源代碼: DATA SEGMENT S3 DB 4 DUP(30H), :IS the random number. ,0AH,0DH,$ ;產(chǎn)生的4個(gè)數(shù) NUM DB 5,0,5 DUP(?),0AH,0DH,$ ;輸入緩沖區(qū) RESULT DB AAAA,0AH,0DH,$ GUS DB 4 DUP(30H),0AH,0DH,$ ;用戶(hù)輸入的4個(gè)數(shù) S1 DB Please input times from 1 to 9,0AH,0DH,$ S2 DB Please input random number,0AH,0DH,$ S4 DB Your input is wrong,0AH,0DH,$ FAIL DB You have no time, You lost the game!,0AH,0DH,$ WIN DB Congratulations! You succeed!,0AH,0DH,$ DATA ENDS STACK1 SEGMENT PARA STACK DB 10 DUP(0) STACK1 ENDS COSEG SEGMENT ASSUME CS:COSEG, DS:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,S3 CALL RANDOM ;調(diào)用封裝的函數(shù)RANDOM產(chǎn)生隨機(jī)數(shù) ;-------顯示系統(tǒng)生成的4個(gè)隨機(jī)數(shù)-------- ;MOV DX,OFFSET S3 ;MOV AH,09H ;INT 21H ;-------提示輸入猜測(cè)次數(shù),并保存在BL-------- MOV DX,OFFSET S1 MOV AH,09H INT 21H MOV AH,01H ;輸入次數(shù) INT 21H SUB AL,30H MOV BX,0 MOV BL,AL ;猜測(cè)次數(shù)入BL MOV AH,02H ;回車(chē)換行 MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H ;--------------用戶(hù)猜測(cè)--------------- GUESS: PUSH BX CALL COMPARE ;調(diào)用封裝函數(shù),將比較結(jié)果保存在GUS POP BX LEA DX,GUS ;顯示猜測(cè)結(jié)果 MOV AH,09H INT 21H LEA SI,RESULT ;判斷是否完全相同 LEA DI,GUS MOV CX,4 REPZ CMPSB JE OUT1 ;完全相同,轉(zhuǎn)OUT1 DEC BL ;猜錯(cuò),則猜測(cè)次數(shù)減1 JNZ OUT2 LEA DX, FAIL ;次數(shù)為0,失敗信息 MOV AH,09H INT 21H JMP OVER OUT1: ;輸出獲勝信息 LEA DX,WIN MOV AH,09H INT 21H JMP OVER OUT2: ;提示重新輸入隨機(jī)數(shù) MOV DX,OFFSET S4 MOV AH,09H INT 21H JMP GUESS OVER:MOV AH,4CH INT 21H ;----------封裝函數(shù)RANDOM,產(chǎn)生4個(gè)不同隨機(jī)數(shù),并保存在S3---------- RANDOM PROC PUSH CX PUSH DX PUSH AX STI MOV BH,4 RAND: ;產(chǎn)生一個(gè)隨機(jī)數(shù) MOV AH,0 INT 1AH ;讀時(shí)鐘計(jì)數(shù)器值,16位放在DX MOV AX,DX MOV BL,73 MUL BL AND AH,9 ;清高6位 MOV DL,10 DIV DL ;除10,產(chǎn)生0~9余數(shù) ADD AH,30H MOV BL,AH ;余數(shù)存BX,作隨機(jī)數(shù) JMP X1 X1: ;使生成的隨機(jī)數(shù)不重復(fù) MOV CL,4 LEA DI,S3 MOV AL,BL CLD ;清DF,每次掃描后指針增量 REPNZ SCASB ;直到找到相同隨機(jī)數(shù)或CX=0 JZ RAND ;若找到相同的,則重新生成隨機(jī)數(shù) JMP X2 ;沒(méi)找到 X2: ;隨機(jī)數(shù)入字符串 MOV [SI],BL INC SI DEC BH JNZ RAND POP AX POP DX POP CX RET RANDOM ENDP ;-----封裝的函數(shù)COMPARE,根據(jù)用戶(hù)輸入的隨機(jī)數(shù),把比較結(jié)果保存在GUS中-------- COMPARE PROC PUSH CX PUSH DX PUSH AX STI ;猜數(shù)初始化 MOV DX,OFFSET S2 ;提示用戶(hù)輸入4個(gè)數(shù) MOV AH,09H INT 21H LEA DX,NUM ;用戶(hù)輸入4個(gè)數(shù) MOV AH,0AH INT 21H LEA SI,NUM+2 ;緩沖區(qū)隨機(jī)數(shù)入GUS LEA DI,GUS MOV CX,4 REP MOVSB MOV AH,02H ;回車(chē)換行 MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H LEA SI,GUS MOV BX,SI MOV DL,4 ;DL為當(dāng)前未比較的隨機(jī)數(shù)個(gè)數(shù) FOUND1: ;判斷一個(gè)隨機(jī)數(shù)是否在S3中,不在則置‘?’ MOV CX,4 LEA DI,S3 ;每次循環(huán)都會(huì)重置 MOV AL,[SI] ;一個(gè)隨機(jī)數(shù)送AL CLD REPNZ SCASB ;掃描字符串S3,直到找到隨機(jī)數(shù)或CX=0 JZ FOUND2 ;在S3中,轉(zhuǎn)FOUND2 MOV AL,? MOV [SI],AL JMP TEMP FOUND2: ;判斷關(guān)鍵字是否在對(duì)應(yīng)下標(biāo)位置,不在則置‘B’ MOV CX,SI SUB CX,BX LEA BP,S3 DEC DI SUB DI,BP CMP DI,CX JZ FOUND3 ;在對(duì)應(yīng)位置,轉(zhuǎn)FOUND3 MOV AL,B ;不在對(duì)應(yīng)位置 MOV [SI],AL JMP TEMP FOUND3: ;置A MOV AL,A MOV [SI],AL JMP TEMP TEMP: ;猜測(cè)循環(huán)判斷和輸出猜測(cè)結(jié)果 INC SI DEC DL CMP DL,0 JNZ FOUND1 ;若4個(gè)隨機(jī)數(shù)未比較完,轉(zhuǎn)FOUND1 POP AX POP DX POP CX RET COMPARE ENDP COSEG ENDS END START- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 微機(jī) 原理 匯編語(yǔ)言 數(shù)字 游戲
鏈接地址:http://www.820124.com/p-6604891.html