版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)說(shuō)明書(shū)</p><p> 設(shè)計(jì)題目:貪吃蛇的循環(huán)隊(duì)列實(shí)現(xiàn) </p><p> 姓 名: </p><p> 班 級(jí): 計(jì)05-2班 學(xué)號(hào): 28 </p><p> 指導(dǎo)教師: _</p>
2、;<p><b> 一、設(shè)計(jì)題目</b></p><p> 游戲:《貪吃蛇》的隊(duì)列實(shí)現(xiàn).</p><p><b> 二、問(wèn)題描述</b></p><p> 現(xiàn)有一個(gè)大小為Map_Long * Map_Width的方格地圖(每一方格尺寸為BoxSize * BoxSize),在地圖中間處有一個(gè)長(zhǎng)度為3*
3、3方格的小蛇。一旦游戲開(kāi)始后:地圖上隨機(jī)位置處生成一只大老鼠(占一個(gè)方格);小蛇自動(dòng)朝著一個(gè)方向運(yùn)動(dòng),并且用戶可以通過(guò)按:上、下、左、右鍵改變小蛇的運(yùn)動(dòng)方向。當(dāng)小蛇吃到大老鼠,即蛇運(yùn)動(dòng)到它的蛇頭所在坐標(biāo)等于老鼠所在坐標(biāo)時(shí),小蛇長(zhǎng)度增加1。如此往復(fù),隨著小蛇變成了大蛇,游戲難度也隨之增加,但當(dāng)小蛇吃到自己身體或者頭部撞到障礙物時(shí),將扣去小蛇的生命值,直到小蛇生命為0,游戲失敗。若在游戲中,小蛇吃光所有的老鼠,則游戲勝利。</p>
4、;<p><b> 三、概要設(shè)計(jì)</b></p><p> 1、游戲地圖以及游戲主要數(shù)據(jù)表示:</p><p> MAP[Map_Long][Map_Width]-----將屏幕的某一塊矩形區(qū)域劃分成Map_Long * Map_Width(40*20)個(gè)格,定義地圖數(shù)組MAP[Map_Long][Map_Width],用以存放如同地面、蛇身、老鼠
5、、障礙物的信息。</p><p> ElemType---結(jié)構(gòu)體類型,包含兩個(gè)int變量,存放蛇一格身體的所在位置。</p><p> CirQueue---結(jié)構(gòu)體類型,循環(huán)隊(duì)列。存放隊(duì)列中,元素的地址以及隊(duì)列頭尾位置。</p><p> Snake------結(jié)構(gòu)體類型,存放蛇的蛇頭坐標(biāo)、方向、生命值、蛻殼控制參數(shù)。</p><p>
6、 Food————結(jié)構(gòu)體類型,存放小老鼠所在坐標(biāo)、顏色等信息。</p><p><b> 2、方案設(shè)計(jì):</b></p><p> (1)實(shí)現(xiàn)封面、界面繪制。</p><p> ?。?)實(shí)現(xiàn)讀取地圖的功能。</p><p> ?。?)實(shí)現(xiàn)蛇的方向控制以及游戲的暫停、速度設(shè)置、退出等功能。</p>&l
7、t;p> ?。?)實(shí)現(xiàn)蛇的移動(dòng)、長(zhǎng)長(zhǎng)。</p><p> ?。?)實(shí)現(xiàn)蛇的越界折返(運(yùn)動(dòng)到地圖邊界后,蛇從另一側(cè)移出)。</p><p> (6)實(shí)現(xiàn)隨機(jī)位置產(chǎn)生食物。</p><p> ?。?)實(shí)現(xiàn)讀取地圖的功能。</p><p> ?。?)實(shí)現(xiàn)撞到障礙物,扣除相應(yīng)生命數(shù)值。</p><p> ?。?)實(shí)現(xiàn)蛇
8、生長(zhǎng)到一定長(zhǎng)度后,蛇蛻皮,皮變成障礙物體。</p><p> 3、相關(guān)數(shù)據(jù)結(jié)構(gòu)采用描述:</p><p><b> 數(shù)據(jù)結(jié)構(gòu):循環(huán)隊(duì)列</b></p><p> 4、整體算法的描述:</p><p> ?。?)設(shè)置地圖大小為40*20方格,畫(huà)出地圖。</p><p> (2)在地圖上設(shè)置一
9、定的障礙物體,當(dāng)蛇撞到則扣除相應(yīng)的生命值。</p><p> ?。?)每吃掉一只老鼠,地圖上隨即位置(不包括蛇身體位置和障礙物)生成一只老鼠。</p><p> ?。?)當(dāng)蛇向一個(gè)方向移動(dòng)時(shí),新的坐標(biāo)作為蛇的蛇頭坐標(biāo),畫(huà)出蛇頭,并將它入隊(duì),作為隊(duì)尾元素。與此同時(shí),將隊(duì)列中的front所指位置的元素出隊(duì)列,得到的這個(gè)元素為蛇的蛇尾坐標(biāo),清除這個(gè)坐標(biāo)下的圖象,這樣就實(shí)現(xiàn)了蛇的移動(dòng)。</p
10、><p> ?。?)若蛇吃到老鼠,身體應(yīng)長(zhǎng)長(zhǎng),那么只將新的蛇頭坐標(biāo)入隊(duì),而不把隊(duì)列內(nèi)的首元素出隊(duì)列,即可實(shí)現(xiàn)。</p><p><b> 四、詳細(xì)設(shè)計(jì)</b></p><p> 1.界面繪制(包含在FaceUI.txt文件中)</p><p> 繪制出游戲的封面,游戲的主界面:游戲的主界面包括HP生命槽,暫停扭,分?jǐn)?shù)
11、、進(jìn)度顯示等。要繪制出界面,我采用調(diào)用C語(yǔ)言中所給圖形函數(shù)。這些函數(shù)必須加“graphics.h ”,并且在程序中調(diào)用圖形驅(qū)動(dòng)文件“Egavga.bgi” 和圖形字體文件“ SANS.CHR”。</p><p> 2.游戲按鍵控制(包含在GameEng.txt文件中)</p><p> 通過(guò)如下語(yǔ)句實(shí)現(xiàn)各按鍵后執(zhí)行程序的跳轉(zhuǎn):</p><p> switch(
12、key)</p><p> {case UP3: if(MAP[tmpE[0].X][tmpE[0].Y]!=2) S->DL=0;break;</p><p> case LEFT3: if(MAP[tmpE[1].X][tmpE[1].Y]!=2) S->DL=1;break;</p><p> case RIGHT3: if(M
13、AP[tmpE[2].X][tmpE[2].Y]!=2) S->DL=2;break;</p><p> case DOWN3: if(MAP[tmpE[3].X][tmpE[3].Y]!=2) S->DL=3;break;</p><p> case UP1: if(MAP[tmpE[0].X][tmpE[0].Y]!=2) S->DL=0;break;
14、</p><p> case LEFT1: if(MAP[tmpE[1].X][tmpE[1].Y]!=2) S->DL=1;break;</p><p> case RIGHT1: if(MAP[tmpE[2].X][tmpE[2].Y]!=2) S->DL=2;break;</p><p> case DOWN1: if(MAP[tm
15、pE[3].X][tmpE[3].Y]!=2) S->DL=3;break;</p><p> case UP2: if(MAP[tmpE[0].X][tmpE[0].Y]!=2) S->DL=0;break;</p><p> case LEFT2: if(MAP[tmpE[1].X][tmpE[1].Y]!=2) S->DL=1;break;</
16、p><p> case RIGHT2: if(MAP[tmpE[2].X][tmpE[2].Y]!=2) S->DL=2;break;</p><p> case DOWN2: if(MAP[tmpE[3].X][tmpE[3].Y]!=2) S->DL=3;break;</p><p> case PAUSE1: {GamePause();b
17、reak;}</p><p> case PAUSE2: {GamePause();break;}</p><p> case ESC: if(ExitGame()) exit(0);break;</p><p> case SPACE: SetSpeed();break;} </p><p> 說(shuō)明 :程序中調(diào)用了b
18、ioskey()和kbhit()這兩個(gè)函數(shù),返回一個(gè)按鍵值到變量key中。在Public.txt文件中,已經(jīng)定義了這些鍵值常量,通過(guò)key中數(shù)據(jù)和這些常量的比較,實(shí)現(xiàn)按鍵后執(zhí)行的不同程序。</p><p> 3.撞障礙物、食物的位置判斷(包含在GameEng.txt文件中)</p><p> 在定義地圖元素的時(shí),將Map[X][Y]位置數(shù)值設(shè)為0、1、2、3分別代表:食物、空白可走處、
19、蛇身體、障礙物。通過(guò)調(diào)用如下函數(shù):</p><p> int Crash(ElemType next)</p><p> {if (MAP[next.X][next.Y]==2 || MAP[next.X][next.Y]==3) return TRUE;</p><p> else return FALSE;</p><p><
20、b> }</b></p><p> 若返回為TRUE時(shí),表示該位置有障礙物,發(fā)生相撞。</p><p> 4.游戲的初始化(包含在GameEng.txt文件中)</p><p> 主要將蛇的尾、身、頭坐標(biāo)依次入隊(duì) ;畫(huà)出蛇的各部分;隨機(jī)位置產(chǎn)生食物等。</p><p> 5.游戲中的工具條、控件的實(shí)現(xiàn)(包含在MyC
21、trl.txt文件中)</p><p> 設(shè)計(jì)自定義控件的主要意圖為:在主函數(shù)中,通過(guò)給出一定的屬性,執(zhí)行一個(gè)行為。為此(由于時(shí)間有限,僅完成一項(xiàng)),編寫(xiě)了ScrollBar工具條。</p><p> 6.循環(huán)隊(duì)列操作的實(shí)現(xiàn)(包含在GameEng.txt文件中)</p><p> 包括最基本的 “隊(duì)列初始化” 、“入隊(duì)” 、“出隊(duì)” 操作。</p>
22、<p> 包括“隊(duì)列求長(zhǎng)” ,在游戲中,隊(duì)列的長(zhǎng)度即為貪吃蛇的長(zhǎng)度。</p><p> 7.畫(huà)出流程圖,將問(wèn)題有抽象到具體</p><p> 將圖中各個(gè)部分的描述用函數(shù)來(lái)實(shí)現(xiàn),最后通過(guò)一個(gè)主調(diào)函數(shù)“GameMain()”將他們分別組裝起來(lái)。流程圖如下所示:</p><p><b> 流程圖說(shuō)明:</b></p>
23、<p><b> 初始化:</b></p><p> 將蛇的尾、身、頭三個(gè)坐標(biāo)依次入隊(duì)后,蛇的總長(zhǎng)等于隊(duì)列的長(zhǎng)度,為3,如下圖1。</p><p> 蛇的長(zhǎng)長(zhǎng):將食物所在坐標(biāo)入隊(duì)列,并且蛇的尾巴不出隊(duì)列,蛇將長(zhǎng)長(zhǎng),如下圖2所示。</p><p> 蛇的移動(dòng):將目標(biāo)坐標(biāo)(“下一步”位置坐標(biāo))入隊(duì),蛇尾出隊(duì)列并且畫(huà)蛇尾為
24、空閑。</p><p> ?。?) 蛇運(yùn)動(dòng)的越界處理:采用越界折反措施,若蛇運(yùn)行即將超出游戲界面,則從界面的另一側(cè)移出,具體代碼為:case 0: {next->Y = (S.HeadY-1+Map_Width) % Map_Width ;next->X=S.HeadX;break;}</p><p> case 1: {next->X = (S.HeadX-1+M
25、ap_Long) % Map_Long ;next->Y=S.HeadY;break;}</p><p> case 2: {next->X = (S.HeadX+1) % Map_Long ;next->Y=S.HeadY;break;}</p><p> case 3: {next->Y = (S.HeadY+1) % Map_Width;next->
26、X=S.HeadX;break;}</p><p> 五、系統(tǒng)運(yùn)行說(shuō)明與測(cè)試</p><p><b> 1.軟件開(kāi)發(fā)環(huán)境:</b></p><p> WIN-TC 1.9.1</p><p> 2.測(cè)試與運(yùn)行需求說(shuō)明:</p><p> 本游戲在 WINDOWS 系統(tǒng)下測(cè)試通過(guò),具有較強(qiáng)
27、的跨平臺(tái)性</p><p> 請(qǐng)將文件“Egavga.bgi” 、“SANS.CHR” 和游戲的exe程序放在同一文件夾目錄下</p><p><b> 3.游戲截圖如下:</b></p><p><b> 游戲封面:</b></p><p><b> 游戲主界面截圖:</
28、b></p><p><b> 六、總結(jié)分析</b></p><p> 一.為什么要采用“循環(huán)隊(duì)列”實(shí)現(xiàn)《貪吃蛇》:</p><p> 玩過(guò)《貪吃蛇》游戲的玩家都知道,當(dāng)蛇在移動(dòng)時(shí),它的頭先前進(jìn)一步,然后清空它的尾巴。而要記錄下每一部分(每一格)蛇身體坐標(biāo),最后用來(lái)判斷每次在不斷變化位置的蛇尾(隊(duì)列頭)坐標(biāo),是不容易實(shí)現(xiàn)的。而在使用
29、了“循環(huán)隊(duì)列” ,由于其“先進(jìn)后出的特性” ,符合貪吃蛇移動(dòng)的規(guī)律,這也啟發(fā)了我自己實(shí)現(xiàn)《貪吃蛇》的靈感。</p><p> 二.本游戲的開(kāi)發(fā)周期:</p><p> 一周的時(shí)間,日思夜想,全身心投入。</p><p><b> 三.游戲的優(yōu)缺點(diǎn):</b></p><p> 1.優(yōu)點(diǎn): 和往常的《貪吃蛇》相比,我
30、編寫(xiě)的《貪吃蛇》更具創(chuàng)新。游戲放棄了以往《貪吃蛇》一撞即死的規(guī)則,為蛇添加了HP,地圖障礙,周期性蛻殼等功能,使得游戲能被初級(jí)玩家很容易上手的同時(shí),也不失游戲樂(lè)趣和游戲難度,增加了游戲的可玩性。</p><p> 2.缺點(diǎn):由于開(kāi)發(fā)周期尚短,游戲美工方面比較粗糙。</p><p><b> 四.代碼編寫(xiě)總結(jié):</b></p><p> 作
31、者個(gè)人認(rèn)為,本程序代碼“結(jié)構(gòu)清晰,一目了然”。我將一個(gè)問(wèn)題分成若干塊,逐個(gè)解決,在每個(gè)函數(shù)編寫(xiě)完后進(jìn)行嚴(yán)格的測(cè)試,最后將其拼撞起來(lái),符合當(dāng)今軟件設(shè)計(jì)“自頂向下”的規(guī)則。</p><p><b> 五.市場(chǎng)需求分析:</b></p><p> 適合小型的MP4,手機(jī),電子詞典等嵌入式設(shè)備。</p><p> ?。ū境绦蛟勗诟玫劐憻捵约旱乃惴?/p>
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貪吃蛇課程設(shè)計(jì)
- 貪吃蛇游戲的實(shí)現(xiàn)課程設(shè)計(jì)
- 貪吃蛇課程設(shè)計(jì)
- 貪吃蛇課程設(shè)計(jì)
- 貪吃蛇java課程設(shè)計(jì)--貪吃蛇程序設(shè)計(jì)
- 貪吃蛇課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)貪吃蛇
- java課程設(shè)計(jì)--貪吃蛇
- 貪吃蛇課程設(shè)計(jì)報(bào)告
- 貪吃蛇課程設(shè)計(jì)報(bào)告
- 貪吃蛇vc課程設(shè)計(jì)
- 貪吃蛇課程設(shè)計(jì)報(bào)告
- android貪吃蛇課程設(shè)計(jì)報(bào)告
- java貪吃蛇游戲 課程設(shè)計(jì)
- java貪吃蛇課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)說(shuō)明書(shū)--進(jìn)制轉(zhuǎn)換的實(shí)現(xiàn)
- java-課程設(shè)計(jì)--貪吃蛇
- c++課程設(shè)計(jì)----貪吃蛇
- c++貪吃蛇課程設(shè)計(jì)
- 貪吃蛇白盒測(cè)試課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論