推箱子C課程設計報告_第1頁
推箱子C課程設計報告_第2頁
推箱子C課程設計報告_第3頁
推箱子C課程設計報告_第4頁
推箱子C課程設計報告_第5頁
已閱讀5頁,還剩14頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

8、進行游戲和完成每一關游戲后進入下一美關卡,其中變量i控制關卡的關數,j控制進入下一關,首先利用if語句將i從一開始,初始化完成第一關,通過play()函數中的內嵌函數control。函數來控制游戲中人和箱子的各種操作,當過關了control。函數return0.即j=control()中的j等于0,游戲進入下一關。依次類推,當完成14關之后j=1游戲結束。voidplay()inti,j=O;for(i=1;iv=20;i+)tem=O;system("clsH);/清屏if(i=1)chushihua_guan1();設置關卡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()在這個程序中主要控制游戲中人物和箱子的運動,當玩家在鍵盤進行各種操作時系統會給出不同的反應。模塊中定義了command變量,來接收玩家在鍵盤上的各種操作,首先調用getch()函數為command賦一個初值command="空字符”)22,進入界面圖表初始化,根據num_guan的大小來具體初始化對應的關卡(箱子,人,墻的圖標),接

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

12、個關卡已經完成了return0,即把play()函數中的j賦值等于0,游戲進入下一個關。游戲過程玩家每操作一步,系統通過控制daying()函數來控制畫面中目標的運動,來達到游戲的目的。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)箱子在人的上邊或者人的上邊的箱子已經放好了且人的上面兩行就是箱子的

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;/人的下面為空或者下面為家或者下面為門的時候向下走M0=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;人的下面為箱子或者下面已經有箱子找到家了切下面的下面是空或者下面的下面是家,人把箱子向下推,人往下面走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、已經找到家的箱子切入的左邊的左邊是空或者人的左邊的左邊是家的時候箱子可以往左邊移動,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;人的右邊是箱子或者人的右邊是一個已經找到家的箱子切右邊的右邊是空的或者右邊的右邊是家的時候可以推箱子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當為ctrl+c的時候程序結束if(win=wancheng()=O)tem=0;system("clsn);dayin();if(win=wancheng()=1&&vdoor0door1=ren)Sleep(225);return0;return0;如果門的坐標和人的坐標相等的時候直接退出此語句,進入下一個程序(俗稱下一關)3 Daying()Daying函數在這個程序主要在

25、游戲中的功能是畫出游戲中人和箱子和“完成門”家,人的圖標和對游戲中的關卡和人走的步數和推箱子的步數進行計數數,根據游戲中玩家的操作隨時的對游戲畫面進行變換。通過變量i,j來獲得men,qiang,oxiang,ren,jia,xiang(分別表示完成門、墻、箱子放在家中、人、家、箱子)的坐標來找到各個變量的位置,從而運用畫圖函數畫出對應的圖標。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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論