課程設(shè)計(jì)打字游戲_第1頁(yè)
課程設(shè)計(jì)打字游戲_第2頁(yè)
課程設(shè)計(jì)打字游戲_第3頁(yè)
課程設(shè)計(jì)打字游戲_第4頁(yè)
課程設(shè)計(jì)打字游戲_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

PAGEPAGE2匯編語(yǔ)言課程設(shè)計(jì)設(shè)計(jì)題目:指法練習(xí)班級(jí):計(jì)算機(jī)04-4班學(xué)號(hào):20042390作者:王豐指導(dǎo)老師:鄭利平日期:2007.1.5匯編語(yǔ)言課程設(shè)計(jì)報(bào)告<打字游戲>課程設(shè)計(jì)目的課程設(shè)計(jì)使學(xué)生更進(jìn)一步理解和掌握匯編語(yǔ)言知識(shí)、程序設(shè)計(jì)的方法和技巧,使學(xué)生能夠使用匯編語(yǔ)言分析、設(shè)計(jì)中小型程序的能力。通過(guò)課程設(shè)計(jì),有助于學(xué)生更好的了解整個(gè)課程的知識(shí)體系,鍛煉學(xué)生運(yùn)用本課程的知識(shí)解決更復(fù)雜的實(shí)際問(wèn)題的能力,從而為后續(xù)課程的學(xué)習(xí)、畢業(yè)設(shè)計(jì)以及將來(lái)的實(shí)際工作打好堅(jiān)實(shí)的基礎(chǔ)。二、設(shè)計(jì)題目指法練習(xí)設(shè)計(jì)要求1、從屏幕上方以一定的時(shí)間間隔隨機(jī)落下可顯示字符,字符的出現(xiàn)位置亦是隨機(jī)的;2、在多個(gè)字符下落的過(guò)程中可輸入任意鍵,若鍵入與其中的任意一個(gè)字符相匹配的鍵,則該字符高亮顯示并發(fā)出蜂鳴聲,同時(shí)計(jì)分;3、按ESC鍵結(jié)束練習(xí)并顯示命中率;4、再次按ESC鍵退出。四、設(shè)計(jì)環(huán)境硬件:PC機(jī),軟件:masm5.0設(shè)計(jì)分析指法練習(xí),是在屏幕上以一定的時(shí)間間隔隨機(jī)的下落一寫(xiě)字符,我在程序中的設(shè)計(jì)方法是從屏幕的第一行開(kāi)始顯示一個(gè)字符,然后在用一個(gè)時(shí)間延時(shí)函數(shù)延時(shí)一段時(shí)間,再在此位置顯示空格字符,延時(shí)后在同一列的下一行顯示原字符,如此循環(huán),中間如果有輸入正確的字符,則,循環(huán)停止,并同時(shí)將此字符高亮顯示,方法是改變此字符的屬性,并將score加1,然后光標(biāo)移到第一行還是新的循環(huán).若輸入中間字符不正確,循環(huán)到21行時(shí),則揚(yáng)聲器發(fā)出蜂鳴聲,同時(shí)life減1.設(shè)計(jì)中要求每次下落的字符是隨機(jī)的,我在程序中的設(shè)計(jì)方法是取系統(tǒng)時(shí)間1/100秒,然后將此時(shí)間模取26,將得到余數(shù)加上61,將此作為輸出字符的ASCLL碼,如此循環(huán)78次,將這些字符存入letter緩沖區(qū),并在屏幕最上方顯示出來(lái).開(kāi)始下落的字母的位置也是隨機(jī)的,同樣取系統(tǒng)時(shí)間,,由于一行最多只能有78個(gè)字符,所以當(dāng)取的時(shí)間大于等于78時(shí),應(yīng)減去78,將得到的結(jié)果作為取字符的位置,此種隨機(jī)雖然不是很?chē)?yán)謹(jǐn),但用在此程序中還是很不錯(cuò)的.題目中還要求計(jì)算命中率,由于在游戲開(kāi)始的同時(shí)開(kāi)始了記分,所以在結(jié)束游戲時(shí),將得分和錯(cuò)誤統(tǒng)計(jì)出來(lái),很容易計(jì)算出命中率,這里就不做多余的敘述.在題目的要求的基礎(chǔ)上,我還給游戲增加了幾個(gè)難度,其實(shí)也很簡(jiǎn)單,就是控制字母下落的速度,方法是改變每次字符顯示的時(shí)間間隔,這樣從屏幕上看,字母下落就會(huì)有快慢.程序的模塊程序設(shè)計(jì)時(shí),我沒(méi)有分模塊,只有實(shí)現(xiàn)個(gè)別功能的幾個(gè)子程序,分別是發(fā)聲程序,延時(shí)程序,和命中率計(jì)算與顯示程序,這在原代碼中均有注釋,在此就不在詳細(xì)敘述.課程設(shè)計(jì)心得由于課程設(shè)計(jì)開(kāi)始的比較早,所以有時(shí)間去準(zhǔn)備.開(kāi)始時(shí)在網(wǎng)上看了一些資料和例子,搞清楚了程序設(shè)計(jì)的基本原理.最開(kāi)始不明白的地方就是如何讓字符下落,后來(lái)發(fā)現(xiàn)就是不停的在屏幕的不同位置顯示該字符,加以延時(shí),看起來(lái)就像是字符不斷的從上面掉下來(lái).隨機(jī)問(wèn)題也是本程序的一個(gè)難點(diǎn),看過(guò)資料后知道匯編中沒(méi)有現(xiàn)成的完美的隨機(jī)函數(shù).所以我就想到取系統(tǒng)時(shí)間來(lái)制造隨機(jī)數(shù),因?yàn)闀r(shí)間時(shí)刻都在變化,而且打字的時(shí)間也不一定,結(jié)果游戲的隨機(jī)性還不錯(cuò),呵呵這學(xué)期匯編的學(xué)習(xí),自己感覺(jué)還不錯(cuò),平時(shí)也練習(xí)了不少.從匯編程序的學(xué)習(xí)中,我覺(jué)得自己突然一下子明白了一般程序設(shè)計(jì)的原理,看程序時(shí),不再感覺(jué)茫然,自己寫(xiě)點(diǎn)小程序時(shí),也知道該如何下手.算法上也學(xué)到了不少新的東西,總算勞有所獲吧!本打算把程序的運(yùn)行流程圖畫(huà)出來(lái),無(wú)奈,最近考試太多,時(shí)間實(shí)在不夠啊,只有在程序中直接注釋了,其實(shí)程序的思路很清晰,相信大家多能看懂最后,感謝鄭利平老師一學(xué)期來(lái)指導(dǎo)和幫助,也感謝我們班的桑磊同學(xué)在課程設(shè)計(jì)中給我解答疑問(wèn)!八、源程序如下:;=======================================================================;打字游戲程序;=======================================================================init_gamemacroop1,op2,op3,op4,op5,op6;循環(huán)輸出,用于初始化界面movcx,0movdh,op1;起行movdl,op2;起列op6:movah,02hmovbh,00hint10hpushcxmovah,0ahmoval,op3;要顯示的字符movcx,01hmovbh,00hint10hpopcxinccxincop4;指出循環(huán)輸出的是行還是列cmpcx,op5;循環(huán)次數(shù)jneop6endm;=======================================================cleanmacroop1,op2,op3,op4;用于清屏,分別是起止的行和列movah,6movbh,00010111bmoval,0movch,op1movcl,op2movdh,op3movdl,op4int10hmovah,2movbh,0movdh,0movdl,0int10hendm;======================================================menumacroop1,op2,op3;用于屏幕上文字的輸出movcx,0movah,02hmovbh,00hmovdh,op1movdl,op2int10hleadx,op3movah,9int21hendm;=======================================================datasegmentfgfdb'===============================================$';分隔符menu1db'1.startgame$'menu2db'2.selectlevel$';主界面上顯示的內(nèi)容menu3db'3.exit$'menu4db'selectnumberofmenu:$'menu5db'author:wangfeng$'menu6db'NO.:20042390$'menu7db'1.veryeasy$'menu8db'2.normal$';難度的選擇menu9db'3.hard$'menu10db'4.return$'menu11db'data:2006.12.24$'meg1db'pressanykeytostartthegame...$';游戲開(kāi)始之前的提示meg2db'pressesckeyreturnmainmenu$'meg3db'pressspacekeyforpause$'meg4db'whenthegamewaspaused,pressesetoquit!$'meg5db'life:$';生命數(shù)meg6db'score:$';分?jǐn)?shù)meg7db'hittheletternum:$'meg8db'missletternum:$'meg9db'theshootingis:$'madb0mbdb0sped1dw0speeddw3000d;游戲的速度,也決定了游戲的難度lettersdb78dup(0);上方顯示的字母lifedb39hpositiondb1;上方字母的位置用于控制落下的字母time_mdb0time_sdb0xmuldb13ndb26score1db0leveldb1hangdb0linedb0fen1db0fen2db0fen3db0fen4db0fen5db0stringdb'100%$'errordb0dataends;============================================codesegmentassumecs:code,ds:data;,ss:stackstart:movax,datamovds,ax;這里是幾個(gè)數(shù)據(jù)的初始化movposition,1movspeed,3000movlevel,1movsped1,50000moverror,0movscore1,0jiemian:movah,01hmovcx,00horch,00010000bint10h;置光標(biāo)類(lèi)型,用于隱藏光標(biāo)clean0,0,24,79;下面這些是游戲的初始化init_game0,0,08h,dl,80,sk1init_game24,0,08h,dl,80,sk2init_game0,0,08h,dh,25,sk3init_game0,79,08h,dh,25,sk4menu5,15,fgfmenu7,25,menu1;界面顯示menu9,25,menu2menu11,25,menu3menu13,15,fgfmenu15,25,menu4menu17,55,menu5menu19,55,menu6menu21,55,menu11movah,2movbh,0movdh,15movdl,47int10h;把光標(biāo)放在合適的位置movah,0ahmoval,''movbh,00hmovcx,01hint10h;在選擇時(shí)屏蔽其他的按鍵,使之不出現(xiàn)在屏幕上movah,1int21hinput:cmpal,'1'jebegin;當(dāng)輸入字符是1時(shí),;跳轉(zhuǎn)到begin開(kāi)始游戲cmpal,'2'jeto_speed_c;當(dāng)輸入字符是2時(shí),跳轉(zhuǎn),;由于不能直接跳轉(zhuǎn)到;speed_c故用了個(gè)轉(zhuǎn)移cmpal,'3'jeto_exitcmpal,1bhjeto_exit_dto_otherkey:jmpotherkeyto_exit:movah,1int21hcmpal,0dhjneto_otherkeyjmpexitto_speed_c:jmpspeed_cto_exit_d:jmpexit;===================================begin:movah,1int21hcmpal,0dhjneto_otherkeyclean1,1,23,78play_message:;顯示有關(guān)游戲提示menu10,18,meg1menu12,18,meg2menu14,18,meg3menu16,18,meg4movah,07hint21hcmpal,1bh;按任意鍵繼續(xù),;不把輸入的字符顯示在屏幕上jeto_jmjmpplayto_jm:jmpjiemianplay:clean1,1,23,78movlife,39hmovah,2movbh,0movdh,1movdl,1int10hmovbx,0leasi,lettersoutput_letters:;顯示上方字母movah,2chint21hmoval,dlmovah,0divnmovdl,ahadddl,61hmov[si],dlmovah,2int21hmovcx,14987callwaitfincsiincbxcmpbx,78jenextjmpoutput_lettersnext:menu23,70,meg5menu23,30,meg6;生命數(shù)的相關(guān)顯示pushdxmovah,2movbh,0movdh,23movdl,76int10hmovah,0ahmoval,lifemovbh,0movcx,1int10hmovah,2movbh,0movdh,23movdl,43int10hmovah,0ahmoval,score1moval,30hmovbh,0movcx,1int10hpopdxjmpgamesub_p:subposition,78cmpposition,0jnenext3incpositionnext3:jmpgame_nextgame:leasi,lettersmovah,2ch;偽隨機(jī)算法,方法是讀取1/100秒,int21hmoval,dlmovposition,alcmpposition,0jnenext2incpositionnext2:cmpposition,78;和78比較,大于則減去78jasub_pgame_next:addsi,wordptrpositiondecsimovdl,position;position就代表的是列movah,02hmovdh,1movbh,0int10h;置光標(biāo)位置movbl,12htemp:movcx,0nextrow:pushcxmovcx,0yanchi:;延遲pushcxmovcx,0yanchi1:addcx,1cmpcx,sped1;延遲jneyanchi1pushdxmovah,06hmovdl,0ffhint21hpopdxjzpass;不輸入則跳轉(zhuǎn)passcmpal,""jepause1;空格,暫停jmpskip1pause1:jmppauseskip1:cmpal,1bhjedisplay;esc,返回到開(kāi)始時(shí)的界面cmpal,[si]jeto_disappear;正確輸入,字母消失pass:popcxinccxcmpcx,speed;speed,字母下落速度jeprint1jmpyanchiprint1:jmpprintto_disappear:movbh,0movah,3int10hmovhang,dhmovline,dlmovbh,0movah,9movcx,1movbl,1chint10hmovah,2movbh,0movdh,hangmovdl,lineint10hmovdl,[si]movah,2int21hcalldelay0jmpdisappear;跳到記分段display:clean1,1,23,78calldispmovah,1int21cmpal,1bhjeto_start1to_start1:jmpstartto_exit1:jmpexitpause:pushdxmovah,06hmovdl,0ffhint21hpopdxcmpal,1bh;暫停時(shí)輸入大寫(xiě)的q,則退出游戲jedisplaycmpal,"";再次按空格,游戲繼續(xù)jnepausejmppassprint:;在字母處輸入空格填movah,0ahmovbh,0moval,""movcx,1int10hmovah,02hmovbh,0incdhint10h;光標(biāo)下移一行movah,09hmoval,[si]movbh,0movcx,1int10h;輸出字母popcxinccxcmpcx,21;如果落到第21行還沒(méi)有消失,;則life減一,字母消失jeto_print_nextjmpnextrow;如果沒(méi)到21行,繼續(xù)下落to_print_next:pushaxmoval,errorincalmoverror,alpopaxcallsound1jmpprint_next;change_0:;jmpprint_nextdisappear:;正確輸入后字母消失popcxpopcxmovah,0ahmovbh,0moval,""movcx,1int10hincscore1;此處代碼是為了同步輸出得分;和當(dāng)前l(fā)ife的剩余值pushaxpushbxmoval,score1movah,0movbl,10divblmovfen1,almovfen2,ahpopbxpopaxmovah,2movbh,0movdh,23movdl,43int10hmovah,0ahmovbh,0moval,""movcx,1int10hmovah,0ahmoval,fen1addal,30hmovbh,0movcx,1int10hmovah,2movbh,0movdh,23movdl,44int10hmovah,0ahmovbh,0moval,""movcx,1int10hmovah,0ahmoval,fen2addal,30hmovbh,0movcx,1int10hmovdh,hang;輸入正確后,;將該字符在原位置高亮顯示movdl,linemovbh,0movah,2int10hmovah,9movbh,0moval,''movcx,1movbl,17hint10hjmphitto_over:jmpstartprint_next:;life減為0時(shí),游戲結(jié)束sublife,1cmplife,30hjeto_overmovah,0ahmoval,""movbh,0movcx,1int10hmovah,02hmovdh,23movdl,76movbh,0int10h;更新lifemovah,0ahmoval,lifemovbh,0movcx,1int10hhit:;重新把光標(biāo)移到頂端movah,02hmovbh,0movdh,1movdl,positionint10hmovah,2chint21hmoval,dlmovah,0divnaddah,61hmov[si],ah;重新在空格處設(shè)置一個(gè)字母movah,0ahmovbh,0movcx,1moval,[si]int10hjmpgamespeed_c:;速度選擇movah,1int21hcmpal,0dhjneotherkeyjmpspeed_jmotherkey:;隱藏非法的字符pushaxmovah,2movbh,0movdh,15movdl,48int10hmovah,0ahmoval,""movbh,00hmovcx,01hint10hmovah,2movbh,0movdh,15movdl,47int10hpopaxmovdx,axmovah,2int21hjmpinputspeed_jm:;難度選擇的界面clean1,1,23,78menu6,15,fgfmenu8,30,menu7menu10,30,menu8menu12,30,menu9menu14,30,menu10menu16,15,fgfmenu18,25,menu4choose_speed:movah,2movbh,0movdh,18movdl,47int10hmovah,1int21hchoose_next:cmpal,'1'jespeed1_1jmpspe2speed1_1:jmpspeed1spe2:cmpal,'2'jespeed2_2jmpspe3speed2_2:jmpspeed2spe3:cmpal,'3'jespeed3_3jmpspe4speed3_3:jmpspeed3spe4:cmpal,'4'jeh_jmcmpal,1bhjeh_jm_dh_jm:movah,1int21hcmpal,0dhjneotherkey1jmpjiemianh_jm_d:jmpjiemianspeed1:movsped1,50000djmpbeginspeed2:movsped1,40000djmpbeginspeed3:movsped1,20000djmpbeginotherkey1:pushaxmovah,2movbh,0movdh,20movah,2movbh,0movdh,15movdl,46int10hexit:;退出游戲movah,6movbh,7moval,0movch,0movcl,0movdh,24movdl,80int10hmovah,2movbh,0movdh,0movdl,0int10h;清屏movah,4chint21hwaitfprocnearpushaxwaitf1:inal,61handal,10hcmpal,ahjewaitf1movah,alloopwaitf1popaxretwaitfendpsound1proc;一個(gè)揚(yáng)聲器實(shí)驗(yàn)代碼直接抄過(guò)來(lái)的呵呵pushcxpushaxmovcx,1000hinal,61handal,11111100bout61h,alagain:xoral,2out61h,alpushcxmovcx,0ffffhcontinue:noploopcontinuepopcxloopagainpopaxpopcxsound1endpretdelay0procpushcxpushaxmovcx,0ffffhdelay1:nopmovax,1000hdelay2:decaxjnzdelay2loopdelay1popaxpopcxretdelay0endpdispprocnear;這一段代碼是為了顯示打字結(jié)果的menu5,15,fgfmenu7,25,meg7menu9,25,meg8menu11,25,meg9menu13,15,fgfpushaxpushbxmoval,score1movah,0movbl,10divblmovfen3,almovfen4,ahpopbxpopaxpushaxpushdxmovah,2movbh,0;顯示正確的得分movdl,45

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論