《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計說明書--貪吃蛇的循環(huán)隊列實現(xiàn)_第1頁
已閱讀1頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計說明書</p><p>  設(shè)計題目:貪吃蛇的循環(huán)隊列實現(xiàn) </p><p>  姓 名: </p><p>  班 級: 計05-2班 學(xué)號: 28 </p><p>  指導(dǎo)教師: _</p>

2、;<p><b>  一、設(shè)計題目</b></p><p>  游戲:《貪吃蛇》的隊列實現(xiàn).</p><p><b>  二、問題描述</b></p><p>  現(xiàn)有一個大小為Map_Long * Map_Width的方格地圖(每一方格尺寸為BoxSize * BoxSize),在地圖中間處有一個長度為3*

3、3方格的小蛇。一旦游戲開始后:地圖上隨機位置處生成一只大老鼠(占一個方格);小蛇自動朝著一個方向運動,并且用戶可以通過按:上、下、左、右鍵改變小蛇的運動方向。當(dāng)小蛇吃到大老鼠,即蛇運動到它的蛇頭所在坐標(biāo)等于老鼠所在坐標(biāo)時,小蛇長度增加1。如此往復(fù),隨著小蛇變成了大蛇,游戲難度也隨之增加,但當(dāng)小蛇吃到自己身體或者頭部撞到障礙物時,將扣去小蛇的生命值,直到小蛇生命為0,游戲失敗。若在游戲中,小蛇吃光所有的老鼠,則游戲勝利。</p>

4、;<p><b>  三、概要設(shè)計</b></p><p>  1、游戲地圖以及游戲主要數(shù)據(jù)表示:</p><p>  MAP[Map_Long][Map_Width]-----將屏幕的某一塊矩形區(qū)域劃分成Map_Long * Map_Width(40*20)個格,定義地圖數(shù)組MAP[Map_Long][Map_Width],用以存放如同地面、蛇身、老鼠

5、、障礙物的信息。</p><p>  ElemType---結(jié)構(gòu)體類型,包含兩個int變量,存放蛇一格身體的所在位置。</p><p>  CirQueue---結(jié)構(gòu)體類型,循環(huán)隊列。存放隊列中,元素的地址以及隊列頭尾位置。</p><p>  Snake------結(jié)構(gòu)體類型,存放蛇的蛇頭坐標(biāo)、方向、生命值、蛻殼控制參數(shù)。</p><p>

6、  Food————結(jié)構(gòu)體類型,存放小老鼠所在坐標(biāo)、顏色等信息。</p><p><b>  2、方案設(shè)計:</b></p><p> ?。?)實現(xiàn)封面、界面繪制。</p><p> ?。?)實現(xiàn)讀取地圖的功能。</p><p> ?。?)實現(xiàn)蛇的方向控制以及游戲的暫停、速度設(shè)置、退出等功能。</p>&l

7、t;p> ?。?)實現(xiàn)蛇的移動、長長。</p><p> ?。?)實現(xiàn)蛇的越界折返(運動到地圖邊界后,蛇從另一側(cè)移出)。</p><p> ?。?)實現(xiàn)隨機位置產(chǎn)生食物。</p><p> ?。?)實現(xiàn)讀取地圖的功能。</p><p> ?。?)實現(xiàn)撞到障礙物,扣除相應(yīng)生命數(shù)值。</p><p> ?。?)實現(xiàn)蛇

8、生長到一定長度后,蛇蛻皮,皮變成障礙物體。</p><p>  3、相關(guān)數(shù)據(jù)結(jié)構(gòu)采用描述:</p><p><b>  數(shù)據(jù)結(jié)構(gòu):循環(huán)隊列</b></p><p>  4、整體算法的描述:</p><p> ?。?)設(shè)置地圖大小為40*20方格,畫出地圖。</p><p>  (2)在地圖上設(shè)置一

9、定的障礙物體,當(dāng)蛇撞到則扣除相應(yīng)的生命值。</p><p> ?。?)每吃掉一只老鼠,地圖上隨即位置(不包括蛇身體位置和障礙物)生成一只老鼠。</p><p> ?。?)當(dāng)蛇向一個方向移動時,新的坐標(biāo)作為蛇的蛇頭坐標(biāo),畫出蛇頭,并將它入隊,作為隊尾元素。與此同時,將隊列中的front所指位置的元素出隊列,得到的這個元素為蛇的蛇尾坐標(biāo),清除這個坐標(biāo)下的圖象,這樣就實現(xiàn)了蛇的移動。</p

10、><p>  (5)若蛇吃到老鼠,身體應(yīng)長長,那么只將新的蛇頭坐標(biāo)入隊,而不把隊列內(nèi)的首元素出隊列,即可實現(xiàn)。</p><p><b>  四、詳細(xì)設(shè)計</b></p><p>  1.界面繪制(包含在FaceUI.txt文件中)</p><p>  繪制出游戲的封面,游戲的主界面:游戲的主界面包括HP生命槽,暫停扭,分?jǐn)?shù)

11、、進度顯示等。要繪制出界面,我采用調(diào)用C語言中所給圖形函數(shù)。這些函數(shù)必須加“graphics.h ”,并且在程序中調(diào)用圖形驅(qū)動文件“Egavga.bgi” 和圖形字體文件“ SANS.CHR”。</p><p>  2.游戲按鍵控制(包含在GameEng.txt文件中)</p><p>  通過如下語句實現(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>  說明 :程序中調(diào)用了b

18、ioskey()和kbhit()這兩個函數(shù),返回一個按鍵值到變量key中。在Public.txt文件中,已經(jīng)定義了這些鍵值常量,通過key中數(shù)據(jù)和這些常量的比較,實現(xiàn)按鍵后執(zhí)行的不同程序。</p><p>  3.撞障礙物、食物的位置判斷(包含在GameEng.txt文件中)</p><p>  在定義地圖元素的時,將Map[X][Y]位置數(shù)值設(shè)為0、1、2、3分別代表:食物、空白可走處、

19、蛇身體、障礙物。通過調(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時,表示該位置有障礙物,發(fā)生相撞。</p><p>  4.游戲的初始化(包含在GameEng.txt文件中)</p><p>  主要將蛇的尾、身、頭坐標(biāo)依次入隊 ;畫出蛇的各部分;隨機位置產(chǎn)生食物等。</p><p>  5.游戲中的工具條、控件的實現(xiàn)(包含在MyC

21、trl.txt文件中)</p><p>  設(shè)計自定義控件的主要意圖為:在主函數(shù)中,通過給出一定的屬性,執(zhí)行一個行為。為此(由于時間有限,僅完成一項),編寫了ScrollBar工具條。</p><p>  6.循環(huán)隊列操作的實現(xiàn)(包含在GameEng.txt文件中)</p><p>  包括最基本的 “隊列初始化” 、“入隊” 、“出隊” 操作。</p>

22、<p>  包括“隊列求長” ,在游戲中,隊列的長度即為貪吃蛇的長度。</p><p>  7.畫出流程圖,將問題有抽象到具體</p><p>  將圖中各個部分的描述用函數(shù)來實現(xiàn),最后通過一個主調(diào)函數(shù)“GameMain()”將他們分別組裝起來。流程圖如下所示:</p><p><b>  流程圖說明:</b></p>

23、<p><b>  初始化:</b></p><p>  將蛇的尾、身、頭三個坐標(biāo)依次入隊后,蛇的總長等于隊列的長度,為3,如下圖1。</p><p>  蛇的長長:將食物所在坐標(biāo)入隊列,并且蛇的尾巴不出隊列,蛇將長長,如下圖2所示。</p><p>  蛇的移動:將目標(biāo)坐標(biāo)(“下一步”位置坐標(biāo))入隊,蛇尾出隊列并且畫蛇尾為

24、空閑。</p><p> ?。?) 蛇運動的越界處理:采用越界折反措施,若蛇運行即將超出游戲界面,則從界面的另一側(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)運行說明與測試</p><p><b>  1.軟件開發(fā)環(huán)境:</b></p><p>  WIN-TC 1.9.1</p><p>  2.測試與運行需求說明:</p><p>  本游戲在 WINDOWS 系統(tǒng)下測試通過,具有較強

27、的跨平臺性</p><p>  請將文件“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)隊列”實現(xiàn)《貪吃蛇》:</p><p>  玩過《貪吃蛇》游戲的玩家都知道,當(dāng)蛇在移動時,它的頭先前進一步,然后清空它的尾巴。而要記錄下每一部分(每一格)蛇身體坐標(biāo),最后用來判斷每次在不斷變化位置的蛇尾(隊列頭)坐標(biāo),是不容易實現(xiàn)的。而在使用

29、了“循環(huán)隊列” ,由于其“先進后出的特性” ,符合貪吃蛇移動的規(guī)律,這也啟發(fā)了我自己實現(xiàn)《貪吃蛇》的靈感。</p><p>  二.本游戲的開發(fā)周期:</p><p>  一周的時間,日思夜想,全身心投入。</p><p><b>  三.游戲的優(yōu)缺點:</b></p><p>  1.優(yōu)點: 和往常的《貪吃蛇》相比,我

30、編寫的《貪吃蛇》更具創(chuàng)新。游戲放棄了以往《貪吃蛇》一撞即死的規(guī)則,為蛇添加了HP,地圖障礙,周期性蛻殼等功能,使得游戲能被初級玩家很容易上手的同時,也不失游戲樂趣和游戲難度,增加了游戲的可玩性。</p><p>  2.缺點:由于開發(fā)周期尚短,游戲美工方面比較粗糙。</p><p><b>  四.代碼編寫總結(jié):</b></p><p>  作

31、者個人認(rèn)為,本程序代碼“結(jié)構(gòu)清晰,一目了然”。我將一個問題分成若干塊,逐個解決,在每個函數(shù)編寫完后進行嚴(yán)格的測試,最后將其拼撞起來,符合當(dāng)今軟件設(shè)計“自頂向下”的規(guī)則。</p><p><b>  五.市場需求分析:</b></p><p>  適合小型的MP4,手機,電子詞典等嵌入式設(shè)備。</p><p> ?。ū境绦蛟勗诟玫劐憻捵约旱乃惴?/p>

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論