推箱子游戲設(shè)計(jì)實(shí)習(xí)報(bào)告_第1頁(yè)
推箱子游戲設(shè)計(jì)實(shí)習(xí)報(bào)告_第2頁(yè)
推箱子游戲設(shè)計(jì)實(shí)習(xí)報(bào)告_第3頁(yè)
推箱子游戲設(shè)計(jì)實(shí)習(xí)報(bào)告_第4頁(yè)
推箱子游戲設(shè)計(jì)實(shí)習(xí)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩8頁(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)介

1、程序設(shè)計(jì)實(shí)習(xí)報(bào)告推箱子游戲設(shè)計(jì)院系:計(jì)算機(jī)與通信工程學(xué)院專業(yè)班級(jí):計(jì)算機(jī)與科學(xué)技術(shù)1301班學(xué)生姓名:劉華龍 (1307010112)小組其他成員: 管亞南 (1307010102) 張鈺林 (1307010122)目錄 需求分析 總體設(shè)計(jì)一、功能模塊設(shè)計(jì)二、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)三、函數(shù)功能描述四、代碼實(shí)現(xiàn) 詳細(xì)設(shè)計(jì) 編碼 綜合測(cè)試 參考文獻(xiàn)需求分析1、編寫目的:本軟件是基于C+語(yǔ)言的一款小型益智小游戲推箱子。經(jīng)典的推箱子是一個(gè)來(lái)自日本的古老游戲,目的是在訓(xùn)練人的邏輯思考能力。在一個(gè)狹小的倉(cāng)庫(kù)中,要求把木箱從開(kāi)始位置推放到指定的位置。在倉(cāng)庫(kù)有障礙物,稍不小心就會(huì)出現(xiàn)箱子無(wú)法移動(dòng)或者通道被堵住的情況,而

2、且箱子只能推,不能拉,所以需要巧妙的利用有限的空間和通道,合理安排移動(dòng)的次序和位置,才能順利的完成任務(wù)。本游戲一共3關(guān),由易到難,每一關(guān)都有初化、按鍵處理、重置及退出功能。2 產(chǎn)品描述:推箱子是單機(jī)游戲軟件。游戲的界面是由一些不同的格子繪成了迷宮地圖。當(dāng)游戲開(kāi)始時(shí),根據(jù)不同的地圖,我們需要箱子推放到規(guī)定的擺放區(qū)域,進(jìn)入下一關(guān)卡。3 產(chǎn)品功能:推箱子軟件中,玩家通過(guò)移動(dòng)地圖中的小人,進(jìn)而推上面的箱子,目標(biāo)將地圖中的每個(gè)一個(gè)箱子都推放到規(guī)定擺放的區(qū)域,算是完成本關(guān)卡,可以進(jìn)入下一關(guān)。4 按鍵指令:(1)按鍵處理包括移動(dòng)小人和移動(dòng)箱子,通過(guò)移動(dòng)上下左右鍵來(lái)控制小人的移動(dòng),從而推動(dòng)箱子,以把箱子推到指

3、定的目的地為過(guò)關(guān)。 (2)每一關(guān)都可以重置,按空格鍵可以重置當(dāng)前關(guān)。(3)按Esc鍵可以在任何時(shí)候退出游戲。5 詳細(xì)功能說(shuō)明: (1)小人物每次只能推動(dòng)一個(gè)箱子,并且只能使用推的方法來(lái)進(jìn)行游戲。 (2)順利的將所有的箱子都推到坑當(dāng)中去,及為順利通過(guò)本關(guān)卡,由于本軟件中沒(méi)有設(shè)置撤消操作,所以玩家在進(jìn)行每一步操作的時(shí)候,都必須謹(jǐn)慎的走好每一步,并計(jì)算好下一步甚至下N步,否則將會(huì)一步錯(cuò)則滿盤皆輸?shù)那闆r。 總體設(shè)計(jì)一、 軟件系統(tǒng)結(jié)構(gòu)設(shè)計(jì)1、系統(tǒng)模塊圖本程序包括6個(gè)模塊,分別是初始化模塊、畫圖模塊、移動(dòng)箱子模塊、移動(dòng)小人模塊和功能控制模塊,如圖(一)所示。各個(gè)模塊的功能描述如下:(1)初始化模塊。 該模

4、塊包括屏幕初始化和游戲關(guān)卡的初始化。屏幕初始化用于輸出歡迎信息和操作提示,游戲每一關(guān)的初始化是構(gòu)建每一關(guān)的關(guān)卡。(2)畫圖模塊。 該模塊主要是被其它模塊調(diào)用,用于畫墻、在空地畫箱子、在目的地畫箱子、畫小人和畫目的地。(3)移動(dòng)箱子模塊。 該模塊用于移動(dòng)箱子,包括目的地之間、空地之間和目的地與空地之間的箱子移動(dòng)。(4)移動(dòng)小人模塊。該模塊用于控制小人移動(dòng),從而推動(dòng)箱子到目的地。(5)功能控制模塊。該模塊是幾個(gè)功能函數(shù)的集合,包括屏幕輸出功能、指定位置狀態(tài)判斷功能和關(guān)卡重置功能。 圖(一)系統(tǒng)模塊圖推箱子游戲初始化模塊畫圖模塊移動(dòng)箱子模塊移動(dòng)小人模塊功能控制模塊2、任務(wù)執(zhí)行流程圖游戲從第一關(guān)開(kāi)始,

5、按上下左右方向鍵控制小人移動(dòng)來(lái)推動(dòng)箱子,可以在游戲中的任何時(shí)候按Esc鍵退出。如果游戲無(wú)成功希望,可以按空格鍵回到當(dāng)前任務(wù)的開(kāi)始狀態(tài);如果成功完成當(dāng)前關(guān),則進(jìn)入下一關(guān),如果當(dāng)前關(guān)是最后一關(guān),則顯示通關(guān)信息,提示游戲結(jié)束。游戲都是通過(guò)與用戶的交互并根據(jù)具體情況來(lái)做相應(yīng)的運(yùn)算處理的,在整個(gè)推箱子的游戲過(guò)程中,用戶總是通過(guò)鍵盤操作界面的顯示來(lái)實(shí)現(xiàn)交互。下面就從不同的角度來(lái)分析這個(gè)游戲的特性。 這里先做一個(gè)假設(shè):游戲過(guò)程中的某一瞬間,工人在某個(gè)區(qū)域,此時(shí)游戲接受到用戶的按鍵動(dòng)作指示并按照游戲規(guī)則判斷出該動(dòng)作應(yīng)該做出的響應(yīng)。該響應(yīng)是在沒(méi)有違反游戲規(guī)則的情況下使工人執(zhí)行用戶指示的運(yùn)動(dòng),對(duì)違反游戲規(guī)則的指示

6、則不予以響應(yīng)。下面分析一下工人將會(huì)遇到的所有情況,以便歸納出動(dòng)作的算法。一、前方是通道 二前方是墻 三前方是目的地 四前方是箱子 ? 圖中符號(hào)的含義如下所示: :輔助查看的方塊補(bǔ)充位,無(wú)任何物質(zhì)含義。:游戲者:箱子:墻:目的地二數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)1、設(shè)置全局變量定義二維數(shù)組people2來(lái)記錄游戲者的位置,M0 是人所在位置的橫坐標(biāo)M1是人所在位置的縱坐標(biāo)。door2用來(lái)記錄門的坐標(biāo)。map1317 = 0表示地圖的初始化。定義二維數(shù)組map1317用于記錄屏幕一系列點(diǎn)的狀態(tài)。其中,“1”表示墻,“2”表示人,“3”表示箱子,“6”表示箱子的目的地“9表示空白”。首先將屏幕13*17范圍內(nèi)的狀態(tài)初始

7、化為9,然后根據(jù)具體情況,在畫箱子時(shí),將箱子所在點(diǎn)的狀態(tài)改為“3”;在畫墻壁時(shí),將墻壁所在點(diǎn)的狀態(tài)改為“1”;在畫目的地時(shí),將目的地所在點(diǎn)的狀態(tài)改為“6”。 2、定義游戲主界面int i;char c;chushi1();for(i = 0;i<=999;i+) jiemian();c = getche(); if(c = '1')play();else if(c = '2')xuanguan();else if(c = '3')shuoming();else if(c = '4')break;else system(&qu

8、ot;cls");定義函數(shù)jiemian用于顯示操作游戲的各個(gè)選項(xiàng)。其中“1”表示開(kāi)始游戲,“2”表示選擇關(guān)卡,“3”表示游戲幫助,“4”表示結(jié)束游戲。 詳細(xì)設(shè)計(jì)及編碼第一部分:在此次實(shí)習(xí)所編寫的程序中,我負(fù)責(zé)兩部分代碼。其中第一部分包括對(duì)鍵盤的控制命令。詳細(xì)代碼如下:int control() int win;int temm;char command;/存放接收到命令while(1) command = getche();if(command = 8)/回格鍵步數(shù)減一move_num = move_num-1;if(command = 32) /空格重置關(guān)卡if(num_guan

9、 = 1)system("cls");guan1();else if(num_guan = 2) system("cls");guan2();else if(num_guan = 3) system("cls");guan3();else if(num_guan = 4) system("cls");guan4();此外,第一部分還包括對(duì)箱子以及小人的位置判斷和統(tǒng)計(jì),進(jìn)而控制游戲的輸贏。代碼如下:if(command = -32) /F11,F12:-123,-122 temm = 0;command = getc

10、he(); if(temm = 0 && command = 'H' && (mappeople0-1people1 = xiangzi|mappeople0-1people1 = space/*家上的箱子*/) && mappeople0-2people1 = jia) /人的上方是箱子或者人的上方是在家上的箱子并且人的上方兩格是家 H 的意思是向上移動(dòng)/指令的意思是向上推一步箱子mappeople0-1people1 = ren;/人移動(dòng)到原位置的上方mappeople0people1 = 0;/原位置變成空即0mappeop

11、le0-2people1 = space/*家上的箱子*/;/箱子移動(dòng)到原位置的左方,移動(dòng)前后都在家上people0 = people0-1;/重新確定人的位置move_num = move_num+1; /步數(shù)加一push_num = push_num+1;/推箱子數(shù)加一temm = temm+1; if(temm = 0 && command = 'P' && (mappeople0+1people1 = xiangzi|mappeople0+1people1 = space/*家上的箱子*/) && mappeople0+2

12、people1 = jia) /人的下方是箱子或者人的下方是在家上的箱子并且人的下方兩格是家 P 的意思是向下移動(dòng)/指令的意思是向下推一步箱子mappeople0+1people1 = ren;/人移動(dòng)到原位置的下方temm = temm+1;mappeople0people1 = 0;/原位置變成空即0mappeople0+2people1 = space/*家上的箱子*/;/箱子移動(dòng)到原位置的下方,移動(dòng)前后都在家上 people0 = people0+1;/重新確定人的位置move_num = move_num+1;/步數(shù)加一push_num = push_num+1;/推箱子數(shù)加一 if

13、(temm = 0 && command = 'K' && (mappeople0people1-1 = xiangzi|mappeople0people1-1 = space/*家上的箱子*/) && mappeople0people1-2 = jia) /人的左方是箱子或者人的左方是在家上的箱子并且人的左方兩格是家 K 的意思是向左移動(dòng)/指令的意思是向左推一步箱子mappeople0people1-1 = ren;/人移動(dòng)到原位置的左方mappeople0people1 = 0;/原位置變成空即0temm = temm+1;m

14、appeople0people1-2 = space/*家上的箱子*/;/箱子移動(dòng)到原位置的左方,移動(dòng)前后都在家上people1 = people1-1;/重新確定人的位置move_num = move_num+1;/步數(shù)加一push_num = push_num+1;/推箱子數(shù)加一if(temm = 0 && command = 'M' && (mappeople0people1+1 = xiangzi|mappeople0people1+1 = space/*家上的箱子*/) && mappeople0people1+2 =

15、jia) /人的右方是箱子或者人的右方是在家上的箱子并且人的右方兩格是家 M 的意思是向右移動(dòng)/指令的意思是向右推一步箱子mappeople0people1+1 = ren;/人移動(dòng)到原位置的右方temm=temm+1;mappeople0people1 = 0;/原位置變成空即0mappeople0people1+2 = space/*家上的箱子*/;/箱子移動(dòng)到原位置的右方,移動(dòng)前后都在家上people1 = people1+1;/重新確定人的位置move_num = move_num+1;/步數(shù)加一push_num = push_num+1;/推箱子數(shù)加一if(temm = 0 &

16、;& command = 'H' && (mappeople0-1people1 = xiangzi|mappeople0-1people1 = space/*家上的箱子*/) && (mappeople0-2people1 = 0|mappeople0-2people1 = jia) /人的上方是箱子或者人的上方是在家上的箱子并且人的上方兩格是空格或者是家/指令的意思是向上推一步箱子mappeople0-1people1 = ren;/人移動(dòng)到原位置的上方temm = temm+1;mappeople0people1 = 0;/原位置變

17、成空即0mappeople0-2people1 = xiangzi;/箱子移動(dòng)到原位置的上方people0 = people0-1;/重新確定人的位置move_num = move_num+1;/步數(shù)加一push_num = push_num+1;/推箱子數(shù)加一if(temm = 0 && command = 'H' && (mappeople0-1people1 = 0|mappeople0-1people1 = jia|mappeople0-1people1 = men) /人的上方是空格或者人的上方是 家 或者人的上方是 門/指令的意思是人

18、向上移動(dòng)一步mappeople0-1people1 = ren;/人移動(dòng)到原位置的上方temm = temm+1;mappeople0people1 = 0;/原位置變成空即0move_num = move_num+1;/步數(shù)加一people0 = people0-1;/重新確定人的位置if(temm = 0 && command = 'P' && (mappeople0+1people1 = 0|mappeople0+1people1 = jia|mappeople0+1people1 = men) /人的下方是空格或者人的下方是 家 或者人的

19、下方是 門/指令的意思是人向下移動(dòng)一步mappeople0+1people1 = ren;/人移動(dòng)到原位置的下方temm = temm+1;mappeople0people1 = 0;/原位置變成空即0 people0 = people0+1;/重新確定人的位置move_num = move_num+1;/步數(shù)加一if(temm = 0 && command = 'P' && (mappeople0+1people1 = xiangzi|mappeople0+1people1 = space/*家上的箱子*/) && (mappe

20、ople0+2people1 = 0|mappeople0+2people1 = jia) /人的下方是箱子或者人的下方是在家上的箱子并且人的下方兩格是空格或者是家/指令的意思是向下推一步箱子mappeople0+1people1 = ren;/人移動(dòng)到原位置的下方mappeople0people1=0;/原位置變成空即0temm = temm+1;mappeople0+2people1 = xiangzi;/箱子移動(dòng)到原位置的下方 people0 = people0+1;/重新確定人的位置move_num = move_num+1;/步數(shù)加一push_num = push_num+1;/推箱

21、子數(shù)加一if(temm = 0 && command = 'K' && (mappeople0people1-1 = 0|mappeople0people1-1 = jia|mappeople0people1-1 = men) mappeople0people1-1 = ren;temm=temm+1;mappeople0people1=0;people1 = people1-1;move_num = move_num+1;if(temm = 0 && command = 'K' && (mappe

22、ople0people1-1 = xiangzi|mappeople0people1-1 = space/*家上的箱子*/) && (mappeople0people1-2 = 0|mappeople0people1-2 = jia)mappeople0people1-1 = ren;temm = temm+1;mappeople0people1 = 0;mappeople0people1-2 = xiangzi;people1 = people1-1;move_num = move_num+1;push_num = push_num+1;if(temm = 0 &&a

23、mp; command = 'M' && (mappeople0people1+1 = 0|mappeople0people1+1 = jia|mappeople0people1+1 = men) mappeople0people1+1 = ren;temm = temm+1;mappeople0people1 = 0;people1 = people1+1;move_num = move_num+1;if(temm = 0 && command = 'M' && (mappeople0people1+1 = xi

24、angzi|mappeople0people1+1 = space/*家上的箱子*/) && (mappeople0people1+2 = 0|mappeople0people1+2 = jia) mappeople0people1+1 = ren;temm = temm+1;mappeople0people1 = 0;mappeople0people1+2 = xiangzi;people1 = people1+1;move_num = move_num+1;push_num = push_num+1;else if(command = -122 | command = -1

25、23) ;else ;else if(command = 0)command = getche(); /接收Fn的下一個(gè)字符 /F1F10:5968 else if(command >= 2&&command <= 27)if(command=27) /Esc退出return 1; else ; /Ctrl+az:126if(win = finish() = 0)/沒(méi)有勝利tem=0; system("cls");dayin();if(win = finish() = 1&&mapdoor0door1 = ren) /勝利,進(jìn)入下

26、一關(guān)Sleep(225);return 0;return 0;第二部分:第二部分主要是對(duì)圖像繪制的控制和對(duì)勝負(fù)條件的判斷。并完成了對(duì)代碼后期的完善。詳細(xì)代碼如下:void dayin()int i,j;for(i = 0;i<=12;i+)for(j = 0;j<=16;j+)if(fubenij = jia && mapij = 0) mapij = jia;for(i = 0;i<=12;i+)for(j = 0;j<=16;j+)if(mapij = qiang)SetConsoleTextAttribute(GetStdHandle(STD_OU

27、TPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_INTENSITY);cout<<""else if(mapij = men)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE | FOREGROUND_RED);cout<<""else if(mapij = space/*家上的箱子*/)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDL

28、E),FOREGROUND_INTENSITY | FOREGROUND_GREEN);cout<<""else if(mapij = ren)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE|FOREGROUND_RED);cout<<""else if(mapij = jia)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN | FOREGROUND_RED);cout<

溫馨提示

  • 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)論