387.A匯編課程設(shè)計猜數(shù)字游戲的設(shè)計與實現(xiàn) 課程設(shè)計正文_第1頁
387.A匯編課程設(shè)計猜數(shù)字游戲的設(shè)計與實現(xiàn) 課程設(shè)計正文_第2頁
387.A匯編課程設(shè)計猜數(shù)字游戲的設(shè)計與實現(xiàn) 課程設(shè)計正文_第3頁
387.A匯編課程設(shè)計猜數(shù)字游戲的設(shè)計與實現(xiàn) 課程設(shè)計正文_第4頁
387.A匯編課程設(shè)計猜數(shù)字游戲的設(shè)計與實現(xiàn) 課程設(shè)計正文_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、課 程 設(shè) 計題 目猜數(shù)字游戲的設(shè)計與實現(xiàn)學(xué) 院計算機科學(xué)與技術(shù)學(xué)院專 業(yè)計算機科學(xué)與技術(shù)班 級計算機 班姓 名 指導(dǎo)教師 2010年1月14日 猜數(shù)字游戲的設(shè)計與實現(xiàn)1. 問題描述 設(shè)計一個猜數(shù)字的游戲,程序運行后自動產(chǎn)生一個1100之間的隨機整數(shù)。游戲開始后,程序根據(jù)游戲者輸入的數(shù)字與所需猜測數(shù)字進(jìn)行比較并給出響應(yīng),游戲者根據(jù)程序給出的響應(yīng)再次猜數(shù)字,最后得到正確數(shù)字。程序應(yīng)有相應(yīng)的操作、輸入和輸出提示,用戶界面要求友好,最好是菜單式的界面。2.簡要的分析與概要設(shè)計 此程序的關(guān)鍵問題是如何產(chǎn)生一個1100之間的隨機整數(shù)(本程序中所涉及的數(shù)均指整數(shù),以下不再贅述)。我們可以調(diào)用bios的功能

2、調(diào)用1ah號中斷(mov ah,0 int 1ah)或者調(diào)用dos系統(tǒng)功能調(diào)用21h號中斷(mov ah,2ch int 21h)取系統(tǒng)時間,dh:dl=秒:1/100秒。將dx中的內(nèi)容賦給ax,并將ax的高六位清零,然后ax除以100,則會產(chǎn)生099之間的余數(shù),余數(shù)保存在ah中,再將ah加1,則可得到一個1100之間的隨機數(shù)。 本程序共分為六個模塊: main -程序的入口點,程序運行后在dos屏幕上顯示主菜單,給出相關(guān)的操作提示,并調(diào)用ran、guess、crlf等子程序。 ran -調(diào)用相關(guān)的中斷,取系統(tǒng)時間,產(chǎn)生一個1100之間的隨機數(shù)。 guess -本程序的重要模塊,調(diào)用input

3、、print、crlf等子程序。 input -用于玩家輸入其所猜之?dāng)?shù),并給出相關(guān)的輸入提示。 print -用于游戲結(jié)束時輸入系統(tǒng)所產(chǎn)生的隨機數(shù)。 crlf -用于回車換行 crlf guessranmain 各模塊之間的調(diào)度關(guān)系如下: guess printcrlf input crlf crlf3.詳細(xì)的算法描述 3.1 main的主要算法 main proc far assume cs:code,ds:data begin: push ds sub ax,ax push ax mov ax,data mov ds,ax call near ptr crlf mov ah,09h lea

4、 dx,title1 int 21h mov dx,offset menu int 21h lea dx,mess10 int 21h mov ah,01h int 21h call near ptr crlf ml1: cmp al,s jne ml3 ml2: mov count,0 mov ah,09h lea dx,mess1 int 21h call near ptr crlf call near ptr ran call near ptr guess mov ah,09h lea dx,mess10 int 21h mov ah,01h int 21h call near ptr

5、crlf ml3:cmp al,r je ml2 ml4:cmp al,e je exit ml5:cmp al,h jne ml6 mov ah,09h mov dx,offset help int 21h lea dx,mess10 int 21h mov ah,01h int 21h call near ptr crlf jmp ml1 ml6:mov ah,09h lea dx,mess9 int 21h mov ah,01h int 21h call near ptr crlf jmp ml1 exit:call near ptr crlf mov ah,4ch int 21h re

6、tmain endp3.2 ran的主要算法 ran proc near push ax push dx mov ah,0 ;讀時鐘計數(shù)器值 int 1ah mov ax,dx and ah,3 ;將高6位清零 mov dl,100 ;除以100,產(chǎn)生099余數(shù),余數(shù)在ah中 div dl add ah,1 ;ah加1,產(chǎn)生1100之間的數(shù) mov al,ah mov ah,0 mov random,ax ;將隨機數(shù)保存于random中 mov ah,09h lea dx,mess2 int 21h call near ptr crlf pop dx pop ax retran endp3.3

7、 guess的主要算法 guess proc near mov ah,09h lea dx,mess3 int 21h add count,1 gl:call near ptr input mov ax,innum mov bx,random cmp ax,bx ja gl1 jb gl2 call near ptr crlf mov ah,09h lea dx,mess6 int 21h call near ptr crlf lea dx,mess7 int 21h call near ptr print jmp gexit1 gl1:cmp count,06h ja gexit2 call

8、 near ptr crlf mov ah,09h lea dx,mess4 int 21h add count,1 jmp gl gl2:cmp count,06h ja gexit2 call near ptr crlf mov ah,09h lea dx,mess5 int 21h add count,1 jmp glgexit1: call near ptr crlf call near ptr crlf retgexit2: call near ptr crlf mov ah,09h lea dx,mess8 int 21h call near ptr crlf lea dx,mes

9、s7 int 21h call near ptr print call near ptr crlf call near ptr crlf retguess endp3.4 input的主要算法 input proc near mov bx,0 inl1:mov ah,01h int 21h cmp al,0dh jz inexit cmp al,30h jae inl2 cmp al,08h je inl1 call near ptr crlf mov ah,09h lea dx,mess9 int 21h inl2:cmp al,39h jbe inl3 call near ptr crlf

10、 mov ah,09h lea dx,mess9 int 21h jmp inl1 inl3:and al,0fh mov ah,0 xchg bx,ax mov cx,10 mul cx add bx,ax jmp inl1inexit: mov innum,bx retinput endp3.5 print的主要算法 print proc near mov ax,random mov bl,100 div bl mov bl,ah cmp al,0 je pl1 mov dl,al or dl,30h mov ah,02h int 21h pl1:mov al,bl mov ah,0 mo

11、v bl,10 div bl mov bl,ah cmp al,0 je pl2 mov dl,al or dl,30h mov ah,02h int 21h pl2:mov dl,bl or dl,30h mov ah,02h int 21h retprint endp3.6 crlf的主要算法crlf proc near push ax push dx mov ah,02h mov dl,0dh int 21h mov dl,0ah int 21h pop dx pop ax retcrlf endp3.7 數(shù)據(jù)段的定義 data segment random dw ? ;用于保存產(chǎn)生的隨

12、機數(shù) innum dw ? ;用于保存玩家輸入的數(shù) count dw 0 ;用于保存玩家猜數(shù)的次數(shù) menu ;主菜單db 0dh,0ah,* db 0dh,0ah,* * db 0dh,0ah,* main menu * db 0dh,0ah,* * db 0dh,0ah,* s. start the game * db 0dh,0ah,* * db 0dh,0ah,* r.replay the game * db 0dh,0ah,* * db 0dh,0ah,* e. exit the game * db 0dh,0ah,* * db 0dh,0ah,* h. ask for help *

13、 db 0dh,0ah,* * db 0dh,0ah,* db 0dh,0ah,$ help ;幫助信息 db 0dh,0ah,* db 0dh,0ah,* * db 0dh,0ah,* helpinformation: * db 0dh,0ah,* * db 0dh,0ah,* 1.if you want to start the game,please press key s.* db 0dh,0ah,* * db 0dh,0ah,* 2.if you want to replay,please press key r. * db 0dh,0ah,* * db 0dh,0ah,* 3.if

14、 you want to exit,please key e. * db 0dh,0ah,* * db 0dh,0ah,* 4.when you play,you have only 7 chances at one time. * db 0dh,0ah,* * db 0dh,0ah,* db 0dh,0ah,$ title1 db 0dh,0ah, number-guessing game,0dh,0ah,$ mess1 db 0dh,0ah,number-guessing game begins.$ mess2 db 0dh,0ah,the random number has been g

15、enerated.$ mess3 db 0dh,0ah,please input the number you guess(decimal,betweem 1 and 100):$ mess4 db 0dh,0ah,the number you guess is bigger ,please reguess:$: mess5 db 0dh,0ah,the number you guess is smaller,please reguess:$ mess6 db 0dh,0ah,congratulations,you guessed!$ mess7 db 0dh,0ah,the random n

16、umber is $ mess8 db 0dh,0ah,you have guessed too many times,game over!$ mess9 db 0dh,0ah,the input is incorrect,please reinput:$ mess10 db 0dh,0ah,please input your choice:$data ends4.程序的測試與運行結(jié)果4.1 調(diào)試過程中出現(xiàn)的問題 在masm5中調(diào)試出現(xiàn)以下問題: (1)suiji.asm:error a2009:symbol not defined:ml1suiji.asm:error a2009:symbo

17、l not defined:ml1(2)suiji.asm:error a4031:operand types must match suiji.asm:error a4031:operand types must match (3)suiji.asm:warning a4085:end of file, no end directive end of file encountered on input file (4)suiji.asm:error a2061:improper use of segment register (5)suiji.asm:warning a4016:reserv

18、ed word used as symbol: cl 4.2 運行結(jié)果 調(diào)試成功后運行如下: a.主菜單: b.幫助信息:c.7次以內(nèi)猜對的結(jié)果: d.7次以內(nèi)猜不對的結(jié)果:5.使用說明 1.程序經(jīng)過匯編、連接、運行后,屏幕上將顯示猜數(shù)字游戲的主菜單。如下所示: main menu s. start the game r. replay the game e. exit the game h. ask for help 玩家在鍵盤上敲擊 s 鍵時,游戲開始;敲擊e鍵時,退出游戲。如果玩家需要幫助,則可以敲擊h鍵。 2一次游戲中,玩家最多只能猜數(shù)字7次。如果玩家在7次內(nèi)猜中,程序會給出提示信息“

19、congratulations,you guessed!” ;如果沒猜中,則游戲給出提示信息“you have guessed too many times,game over!”。 3.如果玩家在一次游戲后想接著玩,則可以敲擊r鍵時,游戲重新開始;如果不想接著玩,則可以敲擊e鍵退出游戲。6.總結(jié) 6.1設(shè)計的特點 該課程設(shè)計的特點在于程序運行后產(chǎn)生隨機數(shù)的過程比較巧妙。它是調(diào)用了bios功能調(diào)用的1ah號中斷,讀取系統(tǒng)時鐘。然后進(jìn)行除法運算得到余數(shù),再進(jìn)行加法運算得到符合要求的隨機數(shù)。 此課程設(shè)計的另外一個特點是定義了多個子程序,將各功能模塊化,便于在調(diào)試過程中查找錯誤和修改,不會影響其他模

20、塊。6.2設(shè)計的不足 設(shè)計的不足之處在于,在猜數(shù)字游戲的程序中沒有時間計時器去限制玩家猜一次數(shù)的時間,因而在游戲中也就沒有暫停和繼續(xù)兩個功能。不能符合現(xiàn)實。6.3收獲與體會 一周的匯編語言課程設(shè)計結(jié)束了,我的收獲可以說是很大。通過這次的課程設(shè)計和對編程過程中遇到的問題的思考,有效地提高了我對匯編語言的認(rèn)識和理解,切實地提高了我的編程能力,彌補了我的不足。通過這次課程設(shè)計,我對課本上和老師講過的知識有了更深入的理解和體會,能用匯編語言熟練地運用順序、選擇、循環(huán)三大結(jié)構(gòu)進(jìn)一步掌握常用指令的功能。我進(jìn)一步掌握了子程序的定義和調(diào)用及debug指令的運用。在整個程序的編寫過程中,調(diào)試占了很大一部分的時間

21、。要想寫好程序,弄懂程序,必須認(rèn)真地對待每一個細(xì)節(jié),熟練地掌握相關(guān)的命令。總之,通過這次的課程設(shè)計,我進(jìn)一步熟悉了匯編語言的結(jié)構(gòu)和使用方法,基本達(dá)到了能獨立閱讀、編制和調(diào)試一定規(guī)模的匯編語言程序的水平,并進(jìn)一步培養(yǎng)了自己的實際動手能力。6.4展望 正如我在設(shè)計的不足中所提及的,由于自身的能力有限,所以在猜數(shù)字游戲的程序中沒有時間計時器去限制玩家猜一次數(shù)的時間,因而在游戲中也就沒有暫停和繼續(xù)兩個功能,不能符合現(xiàn)實。如果有可能,我將會在程序中增加時間計時器,限制玩家猜一次數(shù)的時間,并將在主菜單中增加“p.pause(暫停游戲)”和“c.continue(繼續(xù)游戲)”兩個選擇項。7.參考文獻(xiàn) 1 沈

22、美明、溫冬嬋等.ibm-pc 匯編語言程序設(shè)計(第2版).清華大學(xué)出版社.2001年8月 2 何友鳴、蘇光奎、石曙東、徐愛蕓等.匯編語言程序設(shè)計(第1版).武漢大學(xué)出版社.2006年3月 3 金漢軍、金洋等.匯編語言程序設(shè)計(第1版).武漢大學(xué)出版社.2007年9月 4 楊季文等.80x86匯編語言程序設(shè)計教程.清華大學(xué)出版社.1999年3月 5 羅省賢、洪志全等.匯編語言程序設(shè)計教程.電子工業(yè)出版社.2004年1月源程序:data segment random dw ? ;用于保存產(chǎn)生的隨機數(shù) innum dw ? ;用于保存玩家輸入的數(shù) count dw 0 ;用于保存玩家猜數(shù)的次數(shù) me

23、nu db 0dh,0ah,* db 0dh,0ah,* * db 0dh,0ah,* main menu * db 0dh,0ah,* * db 0dh,0ah,* s. start the game * db 0dh,0ah,* * db 0dh,0ah,* r. replay the game * db 0dh,0ah,* * db 0dh,0ah,* e. exit the game * db 0dh,0ah,* * db 0dh,0ah,* h. ask for help * db 0dh,0ah,* * db 0dh,0ah,* db 0dh,0ah,$ help db 0dh,0

24、ah,* db 0dh,0ah,* * db 0dh,0ah,*help information: * db 0dh,0ah,* * db 0dh,0ah,* 1.if you want to start the game,please press key s.* db 0dh,0ah,* * db 0dh,0ah,* 2.if you want to replay,please press key r. * db 0dh,0ah,* * db 0dh,0ah,* 3.if you want to exit,please key e. * db 0dh,0ah,* * db 0dh,0ah,*

25、 4.when you play,you have only 7 chances at one time. * db 0dh,0ah,* * db 0dh,0ah,* db 0dh,0ah,$ title1 db 0dh,0ah, number-guessing game,0dh,0ah,$ mess1 db 0dh,0ah,number-guessing game begins.$ mess2 db 0dh,0ah,the random number has been generated.$ mess3 db 0dh,0ah,please input the number you guess

26、(decimal,betweem 1 and 100):$ mess4 db 0dh,0ah,the number you guess is bigger ,please reguess:$: mess5 db 0dh,0ah,the number you guess is smaller,please reguess:$ mess6 db 0dh,0ah,congratulations,you guessed!$ mess7 db 0dh,0ah,the random number is $ mess8 db 0dh,0ah,you have guessed too many times,g

27、ame over!$ mess9 db 0dh,0ah,the input is incorrect,please reinput:$ mess10 db 0dh,0ah,please input your choice:$data endscode segmentmain proc far assume cs:code,ds:data begin: push ds sub ax,ax push ax mov ax,data mov ds,ax call near ptr crlf mov ah,09h lea dx,title1 int 21h mov dx,offset menu int

28、21h lea dx,mess10 int 21h mov ah,01h int 21h call near ptr crlf ml1: cmp al,s jne ml3 ml2: mov count,0 mov ah,09h lea dx,mess1 int 21h call near ptr crlf call near ptr ran call near ptr guess mov ah,09h lea dx,mess10 int 21h mov ah,01h int 21h call near ptr crlf ml3:cmp al,r je ml2 ml4:cmp al,e je e

29、xit ml5:cmp al,h jne ml6 mov ah,09h mov dx,offset help int 21h lea dx,mess10 int 21h mov ah,01h int 21h call near ptr crlf jmp ml1 ml6:mov ah,09h lea dx,mess9 int 21h mov ah,01h int 21h call near ptr crlf jmp ml1 exit:call near ptr crlf mov ah,4ch int 21h retmain endpran proc near push ax push dx mo

30、v ah,0 ;讀時鐘計數(shù)器值 int 1ah mov ax,dx ;將高6位清零 and ah,3 mov dl,100 ;除以100,產(chǎn)生099余數(shù),余數(shù)在ah中 div dl add ah,1 ;ah加1,產(chǎn)生1100之間的數(shù) mov al,ah mov ah,0 mov random,ax ;將隨機數(shù)保存于random中 mov ah,09h lea dx,mess2 int 21h call near ptr crlf pop dx pop ax retran endpguess proc near mov ah,09h lea dx,mess3 int 21h add count,

31、1 gl:call near ptr input mov ax,innum mov bx,random cmp ax,bx ja gl1 jb gl2 call near ptr crlf mov ah,09h lea dx,mess6 int 21h call near ptr crlf lea dx,mess7 int 21h call near ptr print jmp gexit1 gl1:cmp count,06h ja gexit2 call near ptr crlf mov ah,09h lea dx,mess4 int 21h add count,1 jmp gl gl2:cmp count,06h ja gexit2 c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論