推箱子C課程設(shè)計報告_第1頁
推箱子C課程設(shè)計報告_第2頁
推箱子C課程設(shè)計報告_第3頁
推箱子C課程設(shè)計報告_第4頁
推箱子C課程設(shè)計報告_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、程序設(shè)計課程設(shè)計報告書學(xué)生:孟祥煜指導(dǎo)老師:曾宇容課程設(shè)計名稱:推箱子小游戲班級:軟件11401一、設(shè)計任務(wù)介紹推箱子游戲的實(shí)現(xiàn)方法,并逐步介紹c語言圖形編程的方法和技巧。在c語言編寫軟件WIN-TC上,涉及軟中斷、二維數(shù)組、鍵盤操作及圖形化函數(shù)等方法,顯示器中斷寄存器的設(shè)置、二維數(shù)組的定義、鍵盤上鍵值的獲取、圖形方式下光標(biāo)的顯示和定位,以及部分圖形函數(shù)的使用實(shí)現(xiàn)了一個完整的推箱子游戲界面,界面清晰可見。二、設(shè)計目的訓(xùn)練學(xué)生掌握C的數(shù)據(jù)結(jié)構(gòu)和綜合編程能力和游戲開發(fā)技巧等應(yīng)用能力。初步設(shè)想推箱子是一款經(jīng)典的益智小游戲,目的是在訓(xùn)練人的邏輯思考能力。在一個狹小的空間中,要求把木箱從起始位置處推放到

2、指定位置。在空間中有地方限制,稍不小心就會出現(xiàn)箱子無法移動或者通道被堵住的情況,而且箱子只能推不能拉,所以需要玩家巧妙的利用有限的空間和通道,合理的移動次序和位置,才能完成任務(wù)。本游戲一共分14關(guān),由易到難,每一關(guān)都隨著關(guān)數(shù)的增加_來增加難度,從而達(dá)到吸引游戲玩家的目的。二功能1 、菜單功能,玩家通過看目錄按對應(yīng)的鍵可以進(jìn)入對應(yīng)的功能菜單,其中1進(jìn)入游戲,2選擇游戲關(guān)卡,3游戲幫助指南,4退出游戲。2 游戲功能:玩家可以通過操縱鍵盤中的上下左右鍵進(jìn)入游戲進(jìn)行各種操作來完成游戲。3循環(huán)功能:當(dāng)玩家正在游戲的時候如果某一步走錯了,導(dǎo)致游戲無法完成,可以隨時重新開始游戲來完成關(guān)卡,游戲過程中可以隨時

3、按Ctrl+V退出游戲。4順序功能:當(dāng)玩家完成了某一關(guān)之后,隨著進(jìn)入下一關(guān)門可以按順序進(jìn)入下一關(guān),繼續(xù)開始更有挑戰(zhàn)的關(guān)卡,如果該關(guān)是最后一關(guān),則顯示通關(guān)完成。三、總體設(shè)計1、功能模塊設(shè)計函數(shù)功能描述本程序包括5個模塊,分別是初始化模塊、畫圖模塊、移動箱子模塊、移動小人模塊和功能控制模塊。各個模塊功能的功能描述如下:(1)初始化模塊。該模塊包括屏幕初始化和游戲第一關(guān)到第最后一關(guān)的初始化。屏幕初始化用于輸出歡迎信息和操作提示,游戲每一關(guān)的初始化是構(gòu)建每一關(guān)的關(guān)卡。(2)畫圖模塊。該模塊主要是被其他模塊調(diào)用,用于畫墻、在空地畫箱子、在目的地畫箱子、畫小人和畫目的地。(3)移動箱子模塊。該模塊用于移動

4、箱子,包括目的地之間、空地之間和目的地與空地之間箱子的移動。(4)移動小人模塊。該模塊是幾個功能函數(shù)的集合,包括屏幕輸出功能、指定位置狀態(tài)判斷功能和關(guān)卡重置功能。(5)功能控制模塊。該模塊是幾個功能函數(shù)的集合,包括屏幕輸出功能、指定位置狀態(tài)判斷功能和關(guān)卡重置功能。任務(wù)執(zhí)行流程圖數(shù)據(jù)流程圖游戲幫助玩家推箱r系統(tǒng)申酒幫助游戲陽面(箱子人)完就逃人卜大旭山游戲P需助作申請衲防衛(wèi)入常之縹f)游戲操作游戲從第一關(guān)開始,按上下左右方向鍵控制小人移動來推動箱子,可以在游戲中的任何時候按Esc鍵退出。如果游戲無成功希望,可以按CTRkV回到當(dāng)前任務(wù)的開始狀態(tài);如果成功完成當(dāng)前關(guān),則進(jìn)入下一關(guān),如果當(dāng)前關(guān)是最后

5、一吳,則顯示通關(guān)信息,提示游戲結(jié)束。小人移動流程圖小人移動的方向有4個,move()函數(shù)(處理小人移動的函數(shù))對這4個方向移動的處理都一致,只是調(diào)用函數(shù)時的參數(shù)有所不同。首先判斷小人移動的方向,然后根據(jù)小人所處世的當(dāng)前狀態(tài)、下一步狀態(tài)或者下下一步狀態(tài)進(jìn)行適當(dāng)?shù)奶幚怼?、數(shù)據(jù)結(jié)構(gòu)設(shè)計設(shè)置全局變量定義intv1317,用于記錄箱子在屏幕中哪個坐標(biāo)上。其中“0”表示什么都沒有。定義了intnum_guan指現(xiàn)在的父數(shù),intnum_xiang;箱子的個數(shù),intmove_num人行走的次數(shù);intpush_num人推箱子的次數(shù);定義數(shù)組intM2表示人所在的位置;M0是人所在位置的橫坐標(biāo)M1是人所在

6、位置的縱坐標(biāo);定義數(shù)組intdoor2表示門所在的坐標(biāo),door是“下一關(guān)門”的橫坐標(biāo),door1是“下一關(guān)門”的縱坐標(biāo)。3主函數(shù)下面讓我們來看看主函數(shù)的操作流程,主函數(shù)首先進(jìn)入游戲目錄,提醒游戲玩家輸入對應(yīng)的數(shù)字來進(jìn)行的對應(yīng)的操作,如果玩家輸入1則進(jìn)入游戲第一關(guān),輸入2選擇關(guān)卡進(jìn)入,輸入3顯示游戲幫助菜單,幫助玩家更好的理解這個游戲的規(guī)則,輸入4退出游戲。進(jìn)入游戲后,首先調(diào)用chushi1()函數(shù)初始化要使用的頁面,之后程序進(jìn)入play()函數(shù),play()函數(shù)中通過if語句通過判斷i的值來初始化不同的關(guān)卡(設(shè)置好關(guān)卡的人,箱子,箱子的目的地,門),接著程序進(jìn)入control函數(shù)通過獲取玩家

7、在鍵盤上的操作來分別對游戲人物進(jìn)行操作,最后通過wancheng函數(shù)來對操作進(jìn)行判斷,如果判斷成功的話則進(jìn)入下一關(guān)游戲。反之則失敗。一直通過到最后一個則通關(guān)成功。四代碼設(shè)計(或編程)單個模塊或函數(shù)處理將整個系統(tǒng)程序分解為各個單獨(dú)的模塊,即C的函數(shù),各模塊可單獨(dú)編譯;整個程序的聯(lián)調(diào)在各個模塊基本的單獨(dú)編譯通過后,用主函數(shù)將他們集成在一起,實(shí)現(xiàn)調(diào)用,并進(jìn)行輸出數(shù)據(jù)的可靠性、輸入數(shù)據(jù)及系統(tǒng)的容錯性測試。五程序說明書功能模塊1. .playO2. control()3. Daying()4. Wancheng()解析1.play()play()函數(shù)在這個程序中的功能主要是按1進(jìn)入游戲系統(tǒng)后自動按照順序

8、進(jìn)行游戲和完成每一關(guān)游戲后進(jìn)入下一美關(guān)卡,其中變量i控制關(guān)卡的關(guān)數(shù),j控制進(jìn)入下一關(guān),首先利用if語句將i從一開始,初始化完成第一關(guān),通過play()函數(shù)中的內(nèi)嵌函數(shù)control。函數(shù)來控制游戲中人和箱子的各種操作,當(dāng)過關(guān)了control。函數(shù)return0.即j=control()中的j等于0,游戲進(jìn)入下一關(guān)。依次類推,當(dāng)完成14關(guān)之后j=1游戲結(jié)束。voidplay()inti,j=O;for(i=1;iv=20;i+)tem=O;system("clsH);/清屏if(i=1)chushihua_guan1();設(shè)置關(guān)卡1的墻,箱子,人。門elseif(i=2)chushih

9、ua_guan2();elseif(i=3)chushihua_guan3();elseif(i=4)chushihua_guan4();elseif(i=5)chushihua_guan5();elseif(i=6)chushihua_guan6();elseif(i=7)chushihua_guan7();elseif(i=8)chushihua_guan8();elseif(i=9)chushihua_guan9();elseif(i=10)chushihua_guan10();elseif(i=11)chushihua_guan11();elseif(i=12)chushihua_gu

10、an12();elseif(i=13)chushihua_guan13();elseif(i=14)chushihua_guan14();j=control();if(j=1)system(,cls,);return;2control()Control()在這個程序中主要控制游戲中人物和箱子的運(yùn)動,當(dāng)玩家在鍵盤進(jìn)行各種操作時系統(tǒng)會給出不同的反應(yīng)。模塊中定義了command變量,來接收玩家在鍵盤上的各種操作,首先調(diào)用getch()函數(shù)為command賦一個初值command="空字符”)22,進(jìn)入界面圖表初始化,根據(jù)num_guan的大小來具體初始化對應(yīng)的關(guān)卡(箱子,人,墻的圖標(biāo)),接

11、著模塊進(jìn)入了“控制階段”,再次通過getch()函數(shù)command獲得一個字符,當(dāng)command=”H"(也就是T)時人進(jìn)行向上前進(jìn)的動作,對應(yīng)的(P“”K“M“)進(jìn)行人的J、-、-操作,以及人的上下左右推箱子的動作,同時當(dāng)人的前進(jìn)的方向是墻或者雙層箱子的時候人則不能運(yùn)動,人推箱子如果箱子的前面是墻或者箱子的話箱子和人都不能運(yùn)動。運(yùn)動過程中如果玩家輸入ctrl+c時游戲此關(guān)卡重新開始,同時在control函數(shù)中調(diào)用一個win變量來判斷是否完成了游戲,調(diào)用內(nèi)嵌函數(shù)wancheng()函數(shù),當(dāng)(win=wancheng()=1&&vdoor0door1=ren)時,表示這

12、個關(guān)卡已經(jīng)完成了return0,即把play()函數(shù)中的j賦值等于0,游戲進(jìn)入下一個關(guān)。游戲過程玩家每操作一步,系統(tǒng)通過控制daying()函數(shù)來控制畫面中目標(biāo)的運(yùn)動,來達(dá)到游戲的目的。intcontrol()intwin;inttemm;charcommand;存放接收到命令while(1)(command=getch();/輸入一個字符/*if(command=1)if(command=22)(if(num_guan=1)system(',cls',);chushihua_guan1();elseif(num_guan=2)system("cls',);c

13、hushihua_guan2();elseif(num_guan=3)system("cls',);chushihua_guan3();elseif(num_guan=4)system("cls");chushihua_guan4();elseif(num_guan=5)system("cls',);chushihua_guan5();elseif(num_guan=6)system("cls',);chushihua_guan6();elseif(num_guan=7)system("cls',);c

14、hushihua_guan7();elseif(num_guan=8)system(nclsH);chushihua_guan8();elseif(num_guan=9)system(,cls',);chushihua_guan9();elseif(num_guan=10)system(',cls',);chushihua_guan10();elseif(num_guan=11)system(,cls',);chushihua_guan11();elseif(num_guan=12)system(',cls',);chushihua_guan12

15、();elseif(num_guan=1113)system(nclsn);chushihua_guan13();elseif(num_guan=14)system("clsH);chushihua_guan14();)if(command=-32)F11,F12:-123,-122(temm=0;command=getch();if(temm=0&&command='H,&&(vM0-1M1=xiang|vM0-1M1=oxiang)&&vM0-2M1=jia)箱子在人的上邊或者人的上邊的箱子已經(jīng)放好了且人的上面兩行就是箱子的

16、家vM0M1=0;vM0-2M1=oxiang; vM0-1M1=re n; /H指的是向上推箱子到家M0=M0-1;move_num=move_num+1;push_num=push_num+1;temm=temm+1;if(temm=0&&command='P,&&(vM0+1M1=xiang|vM0+1M1=oxiang)&&vM0+2M1=jia)vM0+1M1=ren;temm=temm+1;P指向下推箱子到家vM0M1=0;vM0+2M1=oxiang;M0=M0+1;move_num=move_num+1;push_num=

17、push_num+1;if(temm=0&&command=*K'&&(vM0M1-1=xiang|vM0M1-1=oxiang)&&vM0M1-2=jia)vM0M1-1=ren;K指向左推箱子到家vM0M1=0;temm=temm+1;vM0M1-2=oxiang;M1=M1-1;move_num=move_num+1;push_num=push_num+1;if(temm=0&&command='M'(vM0M1+1=xiang|vM0M1+1=oxiang)vM0M1+2=jia)vM0M1+1=r

18、en;temm=temm+1;箱子到家vM0M1=0;vM0M1+2=oxiang;M1=M1+1;move_num=move_num+1;push_num=push_num+1;/H指人把箱子向上推,不是推到家if(temm=0&&command=,H,(vM0-1M1=xiang|vM0-1M1=oxiang)(vM0-2M1=0|vM0-2M1=jia)(vM0-1M1=ren;temm=temm+1;vM0M1=0;vM0-2M1=xiang;M0=M0-1;move_num=move_num+1;push_num=push_num+1;if(temm=0&&a

19、mp;command='H,(vM0-1M1=0|vM0-1M1=jia|vM0-1M1=men&&&&指向右推&&&&&&vM0-1M1=ren;temm=temm+1;vM0M1=0;move_num=move_num+1;M0=M0-1;人向上走)if(temm=0&&command=,P,&&(vM0+1M1=0|vM0+1M1=jia|vM0+1M1=men)vM0+1M1=ren;temm=temm+1;/人的下面為空或者下面為家或者下面為門的時候向下走M(jìn)0=M0

20、+1;move_num=move_num+1;if(temm=0&&command=*P'&&(vM0+1M1=xiang|vM0+1M1=oxiang)&&(vM0+2M1=0|vM0+2M1=jia)vM0+1M1=ren;人的下面為箱子或者下面已經(jīng)有箱子找到家了切下面的下面是空或者下面的下面是家,人把箱子向下推,人往下面走vM0M1=0;temm=temm+1;vM0+2M1=xiang;M0=M0+1;move_num=move_num+1;push_num=push_num+1;&&if(temm=0&&

21、amp;command='K'=move_num+1;M0=M0-1;人向上走(vM0M1-1=0|vM0M1-1=jia|vM0M1-1=men) vM0M1 -1 =ren;temm=temm+1;/人的左邊為空或者左邊是家或者左邊是門的時候人可以往左邊走vM0M1=0;M1=M1-1;move_num=move_num+1;if(temm=0&&command='K'&&(vM0M1-1=xiang|vM0M1-1=oxiang)&&vM0M1-1=ren;temm=temm+1;人的左邊是箱子或者人的左邊是

22、已經(jīng)找到家的箱子切入的左邊的左邊是空或者人的左邊的左邊是家的時候箱子可以往左邊移動,vM0M1=0;vM0M1-2=xiang;M1=M1-1;move_num=move_num+1push_num=push_num+1;if(temm=0&&command='Mf&&(vM0M1+1=0|vM0M1+1=jia|vMOM1+1=men)(vM0M1+1=ren;temm=temm+1;vM0M1=0;M1=M1+1;move_num=move_nuiTn-1;人的右邊是空的或者人的右邊是家或者人的右邊的門的時候人可以往右邊走。if(temm=0&

23、;&command='Mf&&(vM0M1+1=xiang|vM0M1+1=oxiang)&&vM0M1+1=ren;temm=temm+1;vM0M1=O;vMOM1+2=xiang;人的右邊是箱子或者人的右邊是一個已經(jīng)找到家的箱子切右邊的右邊是空的或者右邊的右邊是家的時候可以推箱子M1=M1+1;move_num=move_num+1;push_num=push_num+1;/elseif(command=-122|command=-123);/else;)/elseif(command=0)/command=getch();接收Fn的下一個

24、字符F1F10:59-68elseif(command>=2&&command<=26)if(command=3)return1;else;/Ctrl+az:126當(dāng)為ctrl+c的時候程序結(jié)束if(win=wancheng()=O)tem=0;system("clsn);dayin();if(win=wancheng()=1&&vdoor0door1=ren)Sleep(225);return0;return0;如果門的坐標(biāo)和人的坐標(biāo)相等的時候直接退出此語句,進(jìn)入下一個程序(俗稱下一關(guān))3 Daying()Daying函數(shù)在這個程序主要在

25、游戲中的功能是畫出游戲中人和箱子和“完成門”家,人的圖標(biāo)和對游戲中的關(guān)卡和人走的步數(shù)和推箱子的步數(shù)進(jìn)行計數(shù)數(shù),根據(jù)游戲中玩家的操作隨時的對游戲畫面進(jìn)行變換。通過變量i,j來獲得men,qiang,oxiang,ren,jia,xiang(分別表示完成門、墻、箱子放在家中、人、家、箱子)的坐標(biāo)來找到各個變量的位置,從而運(yùn)用畫圖函數(shù)畫出對應(yīng)的圖標(biāo)。voiddayin()(inti,j;for(i=0;i<=12;i+)for(j=0;jv=16;j+)if(fubenij=jia&&vi0=O)vi0=jia;for(i=0;i<=12;i+)for(j=0;j<

26、=16;j+)(if(vij=qiang)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUNDJNTENSITY|FOREGROUNDJNTENSITY);printf(H");elseif(vij=men)SetConsoIeTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_RED);printfn");elseif(vi0=oxiang)SetConsoleTextAttribute(GetStd

27、Handle(STD_OUTPUT_HANDLE),FOREGROUNDNTENSITY|FOREGROUND_GREEN);printf(”");elseif(vij=ren)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUNDJNTENSITY|FOREGROUND_INTENSITY1BACKGROUND_RED|BACKGROUND_GREENBACKGROUND_BLUE|FOREGROUND_RED);printf(“冏");elseif(vi0=jia)SetConsoleText

28、Attribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUNDJNTENSITY|FOREGROUND_GREEN)FOREGROUND_RED);printf("”);elseif(vi0=xiang)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUNDJNTENSITY|FOREGROUND_GREENFOREGROUND_BLUE);printf(n");elseSetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUNDJNTENSITYIFOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);printf("H);printf(Hnn);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FO

溫馨提示

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

最新文檔

評論

0/150

提交評論