計(jì)算機(jī)實(shí)習(xí)報(bào)告貪吃蛇游戲編程_第1頁(yè)
計(jì)算機(jī)實(shí)習(xí)報(bào)告貪吃蛇游戲編程_第2頁(yè)
計(jì)算機(jī)實(shí)習(xí)報(bào)告貪吃蛇游戲編程_第3頁(yè)
計(jì)算機(jī)實(shí)習(xí)報(bào)告貪吃蛇游戲編程_第4頁(yè)
計(jì)算機(jī)實(shí)習(xí)報(bào)告貪吃蛇游戲編程_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

計(jì)算機(jī)實(shí)習(xí)匯報(bào)題目:貪吃蛇試驗(yàn)匯報(bào)郵箱:貪吃蛇試驗(yàn)匯報(bào)一.功能闡明1.1總體功能闡明游戲分單人和雙人兩種。單人游戲中有一條小蛇,不停地在屏幕上游走,“吃”掉界面上隨即出現(xiàn)的果子,每吃一種果子,蛇的身體長(zhǎng)度就增長(zhǎng)一種單位。當(dāng)吃下的果子積累到一定程度時(shí),蛇的運(yùn)動(dòng)速度會(huì)對(duì)應(yīng)地增長(zhǎng),等級(jí)也提高了。伴隨蛇的長(zhǎng)度的增長(zhǎng),游戲界面會(huì)出現(xiàn)隨機(jī)產(chǎn)生的毒刺“★”,毒刺固定不動(dòng)。只要蛇頭碰到屏幕四面,或者碰到自己的身子,或者碰到毒刺,活著小蛇就立即斃命,游戲結(jié)束。在雙人游戲中,有兩條蛇頭分別為紅色和黃色的小蛇,爭(zhēng)吃果子,比比誰(shuí)吃的果子多。只要任意一條蛇的蛇頭碰到屏幕四面,或者碰到自己的身子(碰到對(duì)方的身體沒(méi)關(guān)系),或者任一條蛇碰到毒刺,游戲就會(huì)結(jié)束。該游戲的特色是:一、添加了障礙“毒刺”,同步增長(zhǎng)游戲等級(jí)這一項(xiàng),讓蛇的運(yùn)動(dòng)速度隨分?jǐn)?shù)的增長(zhǎng)而合適增長(zhǎng),相比老式的貪吃蛇游戲增長(zhǎng)了難度;二、增長(zhǎng)雙人游戲,使其具有競(jìng)賽性,讓玩家在與他人競(jìng)賽中獲得樂(lè)趣。三、游戲的背景畫(huà)面更為細(xì)膩。1.2顧客界面游戲開(kāi)始和退出菜單選擇單人、雙人游戲的菜單1.3使用措施在單人游戲中,用小寫(xiě)的w、s、a、d四個(gè)按鍵分別控制蛇頭上下左右四個(gè)方向的轉(zhuǎn)向。雙人游戲中,w、s、a、d按鍵控制紅蛇的方向,上下左右四個(gè)方向鍵控制黃蛇的方向。二.程序設(shè)計(jì)闡明2.1總體設(shè)計(jì)框架[包括程序執(zhí)行流程,模塊劃分等,需要有文字闡明和框圖表達(dá)]游戲開(kāi)始游戲開(kāi)始選擇開(kāi)始或退出游戲退出游戲開(kāi)始游戲開(kāi)始單人游戲開(kāi)始雙人游戲開(kāi)始游戲程序播放背景音樂(lè)游戲程序播放背景音樂(lè)游戲程序顯示游戲界面、邊框、背景等蛇的移動(dòng)、增長(zhǎng)、獲取按鍵信息判斷與否產(chǎn)生毒刺計(jì)算并顯示分?jǐn)?shù)和等級(jí)判斷游戲與否結(jié)束蛇頭移動(dòng)若蛇頭吃下果子,則產(chǎn)生新的果子且增長(zhǎng)蛇的長(zhǎng)度。蛇的身體跟進(jìn)若符合對(duì)應(yīng)條件,在屏幕中顯示毒刺若符合條件,顯示結(jié)束畫(huà)面,退出游戲。2.2關(guān)鍵算法描述算法1:[算法輸入?yún)?shù)和輸出參數(shù),算法功能,使用什么存儲(chǔ)構(gòu)造,在主程序中起什么作用,可以使用框圖或偽代碼表達(dá)。算法1:蛇身運(yùn)動(dòng)函數(shù)算法1:if(snake.direct[0]==97) { textout(handle,--(--snake.s_x[0]),snake.s_y[0],wColors+10,1,"◆"); Sleep(speed); PRODUCT_FRUIT(snake.s_x,snake.s_y,&snake.length,&fruit.f_x,&fruit.f_y,wColors,handle); MOVE(snake.s_x,snake.s_y,snake.length,wColors+2,handle);這是蛇的運(yùn)動(dòng)算法,以單人游戲中的向上運(yùn)動(dòng)為例。當(dāng)蛇的構(gòu)造中的方向變量為97(即“w”)時(shí),蛇頭的縱坐標(biāo)增長(zhǎng)一種單位,并延時(shí)一定期間。接著運(yùn)行進(jìn)行PRODUCT_FRUIT函數(shù),該函數(shù)的作用是判斷蛇頭坐標(biāo)與否與果子坐標(biāo)重疊,若是,則生成新的果子,且蛇的長(zhǎng)度加一。接著再運(yùn)行move函數(shù),該函數(shù)的作用為令蛇身最終一格處顯示背景顏色,蛇身的其他部分隨蛇頭向前移動(dòng)一位,整體上看就像是蛇向前移動(dòng)了一格。算法2:voidRE_POISON_FRUIT(intpfoodx[],intpfoody[],int*foodx,int*foody,int*length,intsnakex[],intsnakey[]){ while(1) { srand((unsigned)time(NULL)*(unsigned)time(NULL)); int poison_x=2*(rand()%28+2); intpoison_y=rand()%37; if(poison_x>=4&&poison_y>=2) { for(q=0;q<*length;q++) { if((snakex[q]==poison_x)&&(snakey[q]==poison_y)) break; } if(q==*length) { for(i=0;i<100;i++) { if(pfoodx[i]==*foodx&&pfoody[i]==*foody) break; } if(i==100) { pfoodx[num]=poison_x; pfoody[num]=poison_y; num++; break; } } } }}隨機(jī)產(chǎn)生毒果的函數(shù)。產(chǎn)生兩個(gè)隨機(jī)數(shù),分別是毒刺的橫縱坐標(biāo),若該坐標(biāo)不與蛇的身體的任一節(jié)重疊,也不與目前顯示的果子重疊,則該坐標(biāo)符合規(guī)定。算法3:intDEAD(intsnakex[],intsnakey[],intlen,intpfoodx[],intpfoody[],HANDLEhandle){ inttemp; for(inti=2;i<=len;i++) { if((snakex[0]<4||snakex[0]>60||snakey[0]<2||snakey[0]>40)||(snakex[0]==snakex[i]&&snakey[0]==snakey[i])) { temp=1; break; } } for(intb=0;b<=num;b++) { if((snakex[0]==pfoodx[b])&&(snakey[0]==pfoody[b])) { temp=1; break; } } if(temp==1) return1; else return0;}判斷游戲與否結(jié)束的函數(shù),以單人游戲?yàn)槔J紫扔胒or循環(huán)判斷蛇頭的橫縱坐標(biāo)與否在規(guī)定的范圍內(nèi)以及蛇頭與否碰到蛇身,接著再用一種for循環(huán)判斷與否碰到毒刺,以上條件符合一種,該函數(shù)就返回整數(shù)1,若兩者都不返回,則返回0。在主函數(shù)中,用一種if語(yǔ)句,用此函數(shù)返回的值作為判斷條件,若值為1,則執(zhí)行退出游戲,顯示結(jié)束畫(huà)面的語(yǔ)句。算法4:intstop(chardir){r=!r; s=!s;if(!s){so=dir;return98;}else {intr=int(so);returnr;}}暫停函數(shù),以單人游戲?yàn)槔?。在主函?shù)所在的源文獻(xiàn)設(shè)置一種bool類(lèi)型的全局變量s,初始化為真。玩家在游戲中按下回車(chē)鍵時(shí),執(zhí)行暫停函數(shù),執(zhí)行語(yǔ)句s=!s,最終函數(shù)返回一種值。將暫停函數(shù)的返回值賦值給蛇的運(yùn)動(dòng)方向變量,使蛇不再運(yùn)動(dòng)。在雙人游戲中,設(shè)置了兩個(gè)暫停函數(shù),分別控制兩條蛇的停止與運(yùn)動(dòng)。算法五: DIR=_getch(); switch(DIR) { case97: if(snake.direct[0]!=100) snake.direct[0]=97; break; case100: if(snake.direct[0]!=97) snake.direct[0]=100; break; case119: if(snake.direct[0]!=115) snake.direct[0]=119; break; case115: if(snake.direct[0]!=119) snake.direct[0]=115; break;case13:snake.direct[0]=stop(snake.direct[0]); break; default: break;換取按鍵信息,以單人游戲?yàn)槔S胹with判斷語(yǔ)句對(duì)不一樣的按鍵信息,另設(shè)做出上移、下移、左移、右移、暫停/開(kāi)始等動(dòng)作。算法六: c=(score/10)%5; b=(score/10)/5; if(speed!=75) {if(c==0&&b==m+1) {speed-=25; level++; m++;} }charbu[10]; itoa(level,bu,10);textout(handle,72,8,wColors,1,bu);增長(zhǎng)蛇的移動(dòng)速度及顯示等級(jí)的算法,以單人游戲?yàn)槔n?lèi)似毒刺產(chǎn)生的原理,設(shè)置兩個(gè)全局變量,當(dāng)這兩個(gè)變量滿足一定條件時(shí),游戲等級(jí)增長(zhǎng)一種單位,對(duì)應(yīng)地蛇的速度增長(zhǎng)。等級(jí)的最高程度為五級(jí),防止貪吃蛇運(yùn)動(dòng)過(guò)快。2.3程序設(shè)計(jì)的難點(diǎn)和要點(diǎn)一、在游戲運(yùn)行的同步,播放背景音樂(lè),運(yùn)用到多線程的知識(shí)。二、在雙人游戲中,分別編寫(xiě)兩條蛇的運(yùn)動(dòng)算法,但兩條蛇需要同步獲取按鍵信息,這樣兩者才能同步運(yùn)動(dòng)。三、設(shè)置蛇移動(dòng)的算法時(shí),讓后一種點(diǎn)跟隨前一種點(diǎn)的運(yùn)動(dòng)軌跡,本來(lái)最終一種點(diǎn)的位置就顯示背景顏色,使得蛇在整體上看上去一偶那個(gè)了一格。四、蛇的得分增長(zhǎng)一定程度2.4調(diào)試的措施[過(guò)程中出現(xiàn)的問(wèn)題和處理措施]在編該游戲的過(guò)程中,出現(xiàn)了多種問(wèn)題和錯(cuò)誤,后來(lái)都一一處理了。一、開(kāi)始設(shè)置游戲等級(jí)時(shí),當(dāng)蛇滿足一種升級(jí)的條件時(shí),蛇卻停止了運(yùn)動(dòng),而不是像預(yù)想的那樣加緊運(yùn)動(dòng)速度。后來(lái)發(fā)現(xiàn)本來(lái)是由于我用的if判斷語(yǔ)句的判斷條件出現(xiàn)問(wèn)題,導(dǎo)致蛇的速度會(huì)一直減小直到零。我借鑒產(chǎn)生毒刺的算法,設(shè)置判斷條件,使得蛇每次增長(zhǎng)速度都都能繼續(xù)穩(wěn)定運(yùn)行。二、開(kāi)始加入背景音樂(lè)時(shí),貪吃蛇死亡后,不顯示游戲結(jié)束的畫(huà)面,而是停留在原畫(huà)面中繼續(xù)播放音樂(lè)。后來(lái)我設(shè)置了一種bool類(lèi)型的全局變量r,把本來(lái)背景音樂(lè)函數(shù)中的無(wú)限循環(huán)的判斷條件“1”換成r,當(dāng)游戲結(jié)束時(shí)r變?yōu)榧伲挂魳?lè)不再播放。三、剛設(shè)置雙人游戲時(shí),幾乎需要把單人游戲中的每一種功能對(duì)應(yīng)的函數(shù)再設(shè)置一種新的,以適應(yīng)雙人游戲的規(guī)定。若不仔細(xì)檢查,其中微小的錯(cuò)誤在程序編譯時(shí)無(wú)法發(fā)現(xiàn),但運(yùn)行游戲卻會(huì)出現(xiàn)問(wèn)題。因此將單人游戲改成雙人也需要極大的耐心和細(xì)致。四、在增長(zhǎng)毒刺和游戲等級(jí)的算法中,采用了類(lèi)似的程序,都是設(shè)置兩個(gè)變量,當(dāng)這兩個(gè)變量分別滿足整除和取余的對(duì)應(yīng)條件時(shí),才執(zhí)行添加毒刺或增長(zhǎng)等級(jí)的算法。2.5程序性能評(píng)價(jià)從運(yùn)行效果上進(jìn)行分析:長(zhǎng)處:添加背景顏色和背景音樂(lè),使游戲畫(huà)面更細(xì)膩絢麗。同步增長(zhǎng)了規(guī)避毒刺、等級(jí)上升、雙人游戲等功能,更具娛樂(lè)性。局限性:背景音樂(lè)單一,雙人游戲的蛇頭部分閃爍不一樣步。從程序設(shè)計(jì)上進(jìn)行分析:長(zhǎng)處:運(yùn)用多種功能函數(shù),且單人游戲與雙人游戲分別對(duì)應(yīng),條例清晰。局限性:程序的設(shè)計(jì)沒(méi)有運(yùn)用到類(lèi)的知識(shí)。三.心得體會(huì)通過(guò)這次小學(xué)期的編程,使我很好地復(fù)習(xí)回憶了一遍C++的有關(guān)知識(shí),同步對(duì)編程有了更為深刻的理解。編譯一種好的游戲,首先要考慮游戲的界面和操作與否友好以便,另一方面要盡量精簡(jiǎn)程序,增長(zhǎng)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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)論