字母打字游戲(實(shí)驗(yàn)報(bào)告)_第1頁
字母打字游戲(實(shí)驗(yàn)報(bào)告)_第2頁
字母打字游戲(實(shí)驗(yàn)報(bào)告)_第3頁
字母打字游戲(實(shí)驗(yàn)報(bào)告)_第4頁
字母打字游戲(實(shí)驗(yàn)報(bào)告)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

科技學(xué)院綜合實(shí)驗(yàn)報(bào)告(2023--2023年度第1學(xué)期)名稱:軟件設(shè)計(jì)與實(shí)踐題目:院系:班級(jí):學(xué)號(hào):學(xué)生姓名:指導(dǎo)教師:設(shè)計(jì)周數(shù):2成績:日期:2023年9月2日課程設(shè)計(jì)(綜合實(shí)驗(yàn))的目的與要求1、本次課程設(shè)計(jì)的目的主要是將課堂上所學(xué)的知識(shí)學(xué)以致用,通過程序的制作過程學(xué)習(xí)課外的新知識(shí),并加強(qiáng)加深對(duì)舊知識(shí)的理解與掌握,增進(jìn)對(duì)匯編語言的認(rèn)識(shí),加強(qiáng)用匯編語言編程的能力,進(jìn)一步掌握屏幕輸出顯示的設(shè)計(jì)方法。2、要求設(shè)計(jì)的程序需包括:在游戲開始后,按回車鍵進(jìn)入打字游戲;按ESC鍵返回主界面;按空格暫停;按大寫字母E程序結(jié)束。26個(gè)字母中的任意一字母從屏幕落下,在下落的過程中鍵入落下的字母,如果正確,字母消失,分?jǐn)?shù)增加;如果不正確,字母繼續(xù)下落。接著繼續(xù)下落其他字母,如果不正確的字母數(shù)大于10個(gè),那么游戲結(jié)束并返回到成績界面進(jìn)入成績界面后顯示所得游戲分?jǐn)?shù),暫停大概2秒后返回到主菜單。設(shè)計(jì)〔實(shí)驗(yàn)〕正文1、整體設(shè)計(jì)思想:程序首先通過宏的定義以及調(diào)用宏來畫出游戲邊框,再通過定義一個(gè)函數(shù)并調(diào)用MOVAH,09INT21H來顯示字符串,DS:DX定義字符串位置。游戲主程序調(diào)用BIOSINT10的9號(hào)功能實(shí)現(xiàn)對(duì)目標(biāo)文本的顏色和定位。游戲主程序可以用MOVAH,00INT16H從鍵盤讀取輸入的字符再調(diào)用MOVAH,01INT21H讓鍵盤輸入顯示在屏幕中AL=輸入的字符,用CMP指令對(duì)輸入的文本和目標(biāo)文本進(jìn)行比擬,再利用選擇語句在打錯(cuò)字符后對(duì)wrong的基數(shù)加1,在打?qū)ψ址髮?duì)right的基數(shù)加1,并調(diào)用清屏函數(shù)clear將該字符消除。對(duì)于要求柱形圖實(shí)時(shí)顯示正確和錯(cuò)誤的數(shù)目,可以通過利用“*〞在豎向上疊加來實(shí)現(xiàn),字符串結(jié)束后直接退到dos環(huán)境。2、程序流程詳細(xì)說明首先運(yùn)行程序,進(jìn)入主界面,通過鍵盤輸入字符,先判斷是否是“E〞,是那么直接退出,如果不是“E〞,那么進(jìn)入下一步判斷是否為數(shù)字1,是就按速度1下落字母,否就進(jìn)入下一步判斷,是否為數(shù)字2,是就按速度2下落字母,否就進(jìn)入下一步判斷,是否為數(shù)字3,是就按速度3下落字母,否就返回重新輸入。字母隨機(jī)下落的過程中,檢查鍵盤是否輸入ESC,是就返回到主界面,否就繼續(xù)下落,接著判斷玩家輸入的字母跟下落的字母是否一樣,是就去除該字母,并使RIGHT的基數(shù)加1,否就使WRONG的基數(shù)加1,接著判斷WRONG是否大于10,否就又重新隨機(jī)下落一字母,是游戲就結(jié)束并顯示最終成績,接著就返回到主界面等待新的指令。3、重點(diǎn)子程序分析〔1〕隨機(jī)產(chǎn)生字母先初始定義一個(gè)由61個(gè)無序字母組成的字母列STRD,此字母列包含從A-Z26個(gè)字母,將STRD的偏移地址存在DI中,又將字母列的備份存在SI中,定義一個(gè)計(jì)數(shù)存放器CX,首先置CX為0,程序每產(chǎn)生一個(gè)隨機(jī)字母后CX自動(dòng)加1,并且比擬每次循環(huán)時(shí)CX是否已經(jīng)大于61,如果大于61那么對(duì)屏幕初始化置0,如果大于那么繼續(xù)隨機(jī)下落字母?!?〕字母的下落字母的下落是整個(gè)程序的核心局部,實(shí)現(xiàn)該功能的原理是讓字母在規(guī)定的時(shí)間間隔內(nèi)屢次顯示,字母每次下移1位,同時(shí)上一位自動(dòng)以空格代替,這樣在視覺上就起到了字母自動(dòng)下落的效果,下落的速度由我們自己決定,本程序中設(shè)置了三種速度。4、源程序及其說明DISMACROSTRING,XMOVAL,3MOVAH,0INT10H;讀取光標(biāo)信息MOVBP,SEGSTRINGMOVES,BPMOVBP,OFFSETSTRING;讀取字符串的地址MOVCX,15MOVDH,X;行位置MOVDL,29;列位置MOVBL,74H;顯示字符串的屬性74hMOVAL,1MOVAH,13HINT10H;INT10H是由BIOS對(duì)屏幕及顯示器所提供的效勞程序ENDMDIS4MACROSTRING,X,Y;在指定位置以紅底藍(lán)字顯示字符串dis2MOVAL,3MOVAH,0INT10HMOVBP,SEGSTRINGMOVES,BPMOVBP,OFFSETSTRINGMOVCX,Y;顯示字符串的長度MOVDH,X;行位置MOVDL,29;列位置MOVBL,74H;顯示字符串的屬性74hMOVAL,1;40×2516色文本MOVAH,13H;在Teletype模式下顯示字符串INT10HDIS3DIS5ENDMDIS1MACROSTRING1,Y,M;在指定位置處顯示字符串MOVAH,2;置光標(biāo)位置MOVBH,0MOVDH,Y;行標(biāo)MOVDL,M;列標(biāo)INT10HMOVAH,09H;顯示字符串str1MOVDX,SEGSTRING1MOVDS,DXMOVDX,OFFSETSTRING1;讀取字符串的地址INT21H;中斷保存斷點(diǎn)ENDMDIS2MACRO;宏進(jìn)棧,每次執(zhí)行PUSH操作時(shí),先修改SP的值,使SP<-P-2PUSHAXPUSHBXPUSHCXPUSHDXENDMDIS3MACRO;宏出棧,每執(zhí)行一次出棧操作,SP<-P+2,即SP向高地址方向移動(dòng),指向新的棧頂POPDXPOPCXPOPBXPOPAXENDMDIS5MACROS1,S2;給主界面添加綠色背景DIS2MOVAH,6DMOVAL,0MOVAL,25DMOVBH,10100100B;01111111bMOVCH,0MOVCL,0MOVDH,0MOVDL,80INT10HDIS3ENDMDIS6MACROZ1,Z2,Z3,Z4;畫橫向邊框的宏LOCALC5DIS2MOVCX,Z1;循環(huán)次數(shù)MOVDL,Z2;列C5:MOVAH,2;置光標(biāo)位置MOVBH,Z3;頁號(hào)MOVDH,Z4;行INT10HPUSHDXMOVDL,2AHINT21HPOPDXINCDLLOOPC5DIS3ENDMDIS7MACROQ1,Q2,Q3,Q4;畫豎邊框的宏LOCALF1DIS2MOVCX,Q4MOVDH,Q1F1:MOVAH,2;置光標(biāo)位置MOVBH,Q2MOVDL,Q3INT10HMOVDL,2AHINT21HINCDHLOOPF1DIS3ENDMDATASSEGMENTSTR1DB'Welcometoplaychars',0AH,0DH,'$'STR2DB'MadebyLiaoXiaohu',0AH,0DH,'$'STR3DB'2023/27/8',0AH,0DH,'$'STR4DB'Pleasechoosespeeding',0AH,0DH,'$'STR5DB'PleasepressEntertocintinue...',0AH,0DH,'$'STR7DB'speed1',0AH,0DH,'$'STR8DB'speed2',0AH,0DH,'$'STR9DB'speed3',0AH,0DH,'$'STR0DB'Selectthenumberamong1-3',0AH,0DH,'$'STRADB'<------Pleasechoose----->',0AH,0DH,'$'STRBDB'score:','i',0AH,0DH,'$'STRCDB'Youchoose:',0AH,0DH,'$'STRDDB'hqfuvodepfdjygnhtrwgaerjrklubgsnyrsbntrsbngtrdjykuahtrgregfytjgfjytjktru','$'STREDB'RIGHT:','$'ST1DB'RIGHT:Pause',0AH,0DH,'$'ST2DB'E:Quit',0AH,0DH,'$'ST8DB'Esc:Back',0AH,0DH,'$'ST3DB'FunctionMeun',0AH,0DH,'$'ST4DB'pleaseinput...',0AH,0DH,'$'ST5DB'SPACE:Continue',0AH,0DH,'$'ST6DB'Quitting...',0AH,0DH,'$'ST7DB'Pressanykeytocontinue',0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,'$'LENTHEQU$-STRD;STRD的長度RDB1MDB0NDB?ADB0;速度1選擇標(biāo)志BDB0;速度2選擇標(biāo)志VDB0;速度3選擇標(biāo)志DATASENDSSTACK1SEGMENTDB100DUP(?);分配空間STACK1ENDSCODESSEGMENTMAINPROCFARASSUMECS:CODES,DS:DATAS,SS:STACK1START:MOVAX,DATASMOVDS,AXCALLCLEAR;調(diào)用清屏函數(shù),去除dos界面CALLDISPLAY1;顯示主歡送界面AG:MOVA,0;只相應(yīng)的速度標(biāo)志為0MOVB,0MOVV,0TH2:MOVAH,7;無回顯輸入字符INT21HCMPAL,0DH;如果是回車,那么繼續(xù)JNETH2;否那么繼續(xù)輸入TH1:CALLCLEAR;調(diào)用清屏函數(shù)DIS680,0,0,0;宏調(diào)用畫上邊框DIS70,0,79,24;宏調(diào)用畫右3邊框DIS70,0,0,25;宏調(diào)用畫左1邊框DIS679,0,0,24;宏調(diào)用畫下邊框DIS1STR4,10,25;宏調(diào)用顯示歡送界面及速度選擇項(xiàng)DIS1STR7,12,30DIS1STR8,14,30DIS1STR9,16,30DIS1STR0,20,16THD:MOVAH,7;鍵盤等待輸入相應(yīng)的速度選項(xiàng)INT21HCMPAL,31H;判斷是否為1JNEMODIFYAJMPTHB;是那么轉(zhuǎn),JMP實(shí)現(xiàn)間接跳轉(zhuǎn)MODIFYA:CMPAL,32H;判斷是否為2JNEMODIFYBJMPTHC;是那么轉(zhuǎn)MODIFYB:CMPAL,33H;判斷是否為3JNETHD;不是那么轉(zhuǎn)DIS4STR9,12,10;速度3高亮度顯示DIS1STRC,12,14MOVV,1;速度3被選中的標(biāo)志JMPTHATHB:DIS4STR7,12,10;速度1高亮度顯示DIS1STRC,12,14MOVA,1;速度1被選中的標(biāo)志JMPTHATHC:DIS4STR8,12,10;速度2高亮度顯示DIS1STRC,12,14MOVB,1;速度2被選中的標(biāo)志THA:DIS680,0,0,0;宏調(diào)用畫上邊框DIS70,0,79,24;宏調(diào)用畫右3邊框DIS70,0,0,25;宏調(diào)用畫左1邊框DIS679,0,0,24;宏調(diào)用畫下邊框MOVAH,7;鍵盤等待確定輸入INT21HCMPAL,0DH;判斷是否是回車確定JNETHA;不是那么繼續(xù)等待CALLSLEEP2;屏幕暫停緩沖CALLCLEAR;調(diào)用清屏函數(shù)CALLPAINT;調(diào)用函數(shù)畫游戲邊框CALLGOAL;調(diào)用函數(shù)顯示得分CALLFALL;調(diào)用下落函數(shù)CMPN,1;是否確定退出JETH9;是那么轉(zhuǎn)JMPAG;不是繼續(xù)TH9:MOVAH,4CH;返回dos界面INT21HMAINENDP;顯示功能菜單函數(shù)DISPLAY1PROCNEARDIS1STR1,10,25DIS1STR2,13,29DIS1STR3,16,31DIS1STR5,21,19DIS680,0,0,0DIS679,0,0,24DIS70,0,0,25DIS70,0,79,24RETDISPLAY1ENDP;清屏函數(shù),去除整個(gè)屏幕CLEARPROCNEARPUSHAXPUSHBXPUSHCXPUSHDXMOVAH,6MOVAL,0MOVBH,7MOVCH,0MOVCL,0MOVDH,24MOVDL,79INT10HMOVDX,0MOVAH,2INT10HDIS525D,10100100BDIS3RETCLEARENDP;下落函數(shù),核心子函數(shù)FALLPROCNEARLEASI,STRD;傳遞將要下落的字母子串T1:INCSI;加1以便尋找下一個(gè)字母DIS2MOVAH,6D;置主游戲屏界面顏色MOVAL,0MOVAL,23DMOVBH,01101110BMOVCH,1;從左上第1行MOVCL,26;從左上第26列MOVDH,1;從右上第1行MOVDL,54;從右上第54列INT10HDIS3CALLRANDOMMOVDL,AH;獲得隨機(jī)數(shù),保存至dl中dl為字母下落的y坐標(biāo)ADDDL,26;基數(shù)為26,使其在范圍之內(nèi)MOVDH,RMOVCX,23AGA:MOVAH,2;置光標(biāo)位置,MOVBH,0INT10HMOVAL,[SI];取下落字符PUSHDXMOVDL,ALMOVAH,02HINT21HPOPDXPUSHAX;AX,CX進(jìn)棧,以防干擾PUSHCXMOVCX,0;隱藏字母后面的光標(biāo)MOVAH,1ORCH,00010000BINT10HPOPCXPOPAXCALLSP_ADJMOVAH,2;置光標(biāo)位置MOVBH,0INT10HPUSHDXMOVDL,'';顯示空格MOVAH,02HINT21HINT10HPOPDXSUBAL,ALPUSHCXMOVCX,50000DL2:LOOPDL2;字幕下落循環(huán)POPCXPUSHDXMOVAH,6MOVDL,0FFHINT21HPOPDXCMPAL,0;判斷是否輸入JZT0;沒有CMPAL,[SI];判斷是否等于下落的字母JET7;等于下落的字母,那么下落下一個(gè)字母JNEX1T7:INCMCALLPOINTCALLBELLJMPT1X1:CMPAL,20HJETAJNET3TA:CALLPAUSET3:CMPAL,45HJNET0CALLEXITCMPN,1JET4T0:CMPAL,1BHJNET12CALLCLEARCALLDISPLAY1JMPT4T12:INCDHSUBCX,1JZMODIFYCJMPAGAMODIFYC:JMPT1T4:RETFALLENDP;時(shí)間延遲函數(shù)及速度1函數(shù)SLEEP1PROCPUSHCXMOVCX,550DLOOP1:PUSHCXMOVCX,550DLOOP2:PUSHCXMOVCX,550DLOOP3:NOPNOPLOOPLOOP3POPCXLOOPLOOP2POPCXLOOPLOOP1POPCXRETSLEEP1ENDP;時(shí)間延遲函數(shù)及速度2函數(shù)SLEEP2PROCPUSHCXMOVCX,400DLOOP4:PUSHCXMOVCX,400DLOOP5:PUSHCXMOVCX,400DLOOP6:NOPNOPLOOPLOOP6POPCXLOOPLOOP5POPCXLOOPLOOP4POPCXRETSLEEP2ENDP;時(shí)間延遲函數(shù)及速度3函數(shù)SLEEP3PROCPUSHCXMOVCX,280DLOOP7:PUSHCXMOVCX,280DLOOP8:PUSHCXMOVCX,280DLOOP9:NOP;主要用于精確定時(shí)或者延時(shí)NOPLOOPLOOP9POPCXLOOPLOOP8POPCXLOOPLOOP7POPCXRETSLEEP3ENDP;時(shí)間延遲函數(shù)及速度3函數(shù)SP_ADJPROCCMPA,1JES1CMPB,1JES2CMPV,1CALLSLEEP3JMPS3S1:CALLSLEEP1JMPS3S2:CALLSLEEP2S3:RETSP_ADJENDP;畫游戲邊框PAINTPROCNEARDIS2DIS680,0,0,0;宏調(diào)用畫上邊框DIS70,0,55,25;宏調(diào)用畫右1邊框DIS70,0,56,25;宏調(diào)用畫右2邊框DIS70,0,79,24;宏調(diào)用畫右3邊框DIS70,0,0,25;宏調(diào)用畫左1邊框DIS70,0,24,25;宏調(diào)用畫左2邊框DIS70,0,25,25;宏調(diào)用畫左3邊框DIS679,0,0,24;宏調(diào)用畫下邊框DIS1ST3,6,3DIS1ST1,9,5DIS1ST5,11,5;宏調(diào)用顯示界面菜單DIS1ST2,13,5DIS1ST4,17,3DIS1ST8,15,5DIS3RETPAINTENDP;分?jǐn)?shù)字符串顯示函數(shù)GOALPROCNEARDIS2MOVAH,2;置光標(biāo)位置MOVBH,0MOVDH,11MOVDL,60INT10HMOVAH,09H;顯示str1MOVDX,SEGSTREMOVDS,DXMOVDX,OFFSETSTREINT21HDIS3RETGOALENDP;打印實(shí)際得分POINTPROCNEARDIS2MOVAH,2;置光標(biāo)位置MOVBH,0MOVDH,11MOVDL,67INT10HMOVAL,MCMPAL,10JAEX9ADDAL,30HMOVDL,ALMOVAH,02H;顯示得分,顯示輸出INT21HJMPX10X9:MOVAL,MMOVAH,0MOVDL,10DIVDLPUSHAXMOVAH,2MOVBH,0MOVDH,11MOVDL,67INT10H;打印十位ADDAL,'0'MOVDL,ALINT21HPOPAXMOVAL,AHMOVAH,2MOVDH,11MOVDL,68INT10HADDAL,'0'MOVDL,ALINT21HX10:DIS3RETPOINTENDP;暫停函數(shù)PAUSEPROCNEARDIS2P1:MOVAH,07H;無顯示輸入INT21HCMPAL,20H;判斷是否是繼續(xù)的空格JNEP1;不是那么跳轉(zhuǎn)DIS3;調(diào)用dis3控制暫停RETPAUSEENDP;退出函數(shù)EXITPROCNEARDIS2CALLCLEAR;調(diào)用清屏函數(shù)DIS1ST6,12,28DIS1ST7,14,20;調(diào)用DIS1可以退出打字界面

溫馨提示

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

評(píng)論

0/150

提交評(píng)論