推箱子程序設計與報告_第1頁
推箱子程序設計與報告_第2頁
推箱子程序設計與報告_第3頁
推箱子程序設計與報告_第4頁
推箱子程序設計與報告_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、程序設計與實驗報告 設計內(nèi)容:推箱子 姓名 :黃 庭 班級 :電信1101 學號 :1107050123 目 錄一引言二需求分析與系統(tǒng)設計三 開發(fā)技術(shù)四程序中的主要模塊五. 心得體會六. 程序全文1 引言在實際編寫程序的過程中,產(chǎn)生的一些疑惑與不解,在同學和老師的幫助下圓滿解決,對于老師和同學們的幫助,在此我表示衷心的感謝。因為一開始構(gòu)架的問題造成了一些功能的不能實現(xiàn)。經(jīng)多方努力仍不能解決,留下遺憾,希望隨著日后能力的提高能解決今天留下的問題。二需求分析與系統(tǒng)設計2.1 設計目的通過本學期對游戲程序的研究,我們掌握了運用win32來制作游戲的技術(shù),雖然不嫻熟還有待提高,但是一些技術(shù)含量較低的小

2、游戲還是很容易讓我們掌握的。此次游戲程序設計的目的,主要是通過win32來制作游戲來更好的掌握編程語言。通過win32這個平臺,熟習在制作游戲方面所需要的技巧,將自己的游戲盡可能多的運用所學到的技術(shù),并且將在課程上面學到的知識付諸于實踐,并從實際操作中,找出自己的不足之處進行彌補。每一次的課程設計,都是一次小小的軟件工程,所以需要我們用百分百認真的態(tài)度來對待。對于小一點的程序,我們一個人足以應付,但是這并不是說我們可以單獨一個人為所欲為,其實質(zhì)應該是通過課程設計來培養(yǎng)自己獨立自主的能力。而對于那些相對于麻煩的程序,便需要我們的協(xié)作,這樣對我們以后進入企業(yè)公司發(fā)展打下了更多的基礎(chǔ)。2.2 設計要

3、求這次課程設計的要求并不像以往那么緊,老師讓給了我們充足的時間來制作游戲,雖然是計劃做一款較為大眾的經(jīng)典游戲,并且能力有限,但還是對游戲做出了較高的期望,對于功能做出了較多的設想。例如,背景音樂的播放,時間的顯示,自動切換關(guān)卡,難度的選擇等。2.3 界面設計圖2.3.1進入后的主界面圖2.3.2素材圖片集合這個程序是一個益智類的游戲,是一個單機游戲,人物通過推動箱子到達目的地以在游戲中取勝,同一時刻只能有一位玩家進行游戲。圖2.3.4英雄榜圖2.3.5關(guān)于游戲 圖2.3.3選擇關(guān)卡截圖2.4 游戲流程 系統(tǒng)流程圖:游戲開始選擇關(guān)卡選擇關(guān)卡進行游戲進行游戲自動切換下一關(guān)完成游戲完成游戲結(jié)束游戲游

4、戲開局出現(xiàn)如圖1,然后進行難度的選擇,再是關(guān)卡的選擇,然后就可以游戲了,游戲完成之后會自動切換下一關(guān),游戲者可手動選擇結(jié)束游戲。三 開發(fā)技術(shù)3.1 Win32 API 簡介 Win32 API即為Microsoft 32位平臺的應用程序編程接口(Application Programming Interface)。所有在Win32平臺上運行的應用程序都可以調(diào)用這些函數(shù)。使用Win32 API,應用程序可以充分挖掘Windows的32位操作系統(tǒng)的潛力。 Mircrosoft的所有32位平臺都支持統(tǒng)一的API,包括函數(shù)、結(jié)構(gòu)、消息、宏及接口。使用 Win32 API不但可以開發(fā)出在各種平臺上都能成

5、功運行的應用程序,而且也可以充分利用每個平臺特有的功能和屬性。在具體編程時,程序?qū)崿F(xiàn)方式的差異依賴于相應平臺的底層功能的不同。最顯著的差異是某些函數(shù)只能在更強大的平臺上實現(xiàn)其功能。例如,安全函數(shù)只能在Windows NT操作系統(tǒng)下使用。另外一些主要差別就是系統(tǒng)限制,比如值的范圍約束,或函數(shù)可管理的項目個數(shù)等等。 3.2 Win32 API函數(shù)分類標準Win32 API函數(shù)可以分為以下幾類:1、 窗口管理2、 窗口通用控制3、 Shell特性4、 圖形設備接口5、 系統(tǒng)服務6、 國際特性7、 網(wǎng)絡服務 四程序中的主要模塊4.1函數(shù)原型的一些定義LRESULT CALLBACK WindowPro

6、c( HWND hwnd, / handle to window UINT uMsg, / message identifier WPARAM wParam, / first message parameter LPARAM lParam / second message parameter);/窗口過程函數(shù)原型BOOL InitWindowsClass(HINSTANCE hInstance);/初始化窗口類BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);/初始化窗口BOOL CALLBACK DlgProc(HWND hdlg,UINT

7、 message,WPARAM wParam,LPARAM lParam);/對話框過程函數(shù)void Show_Image(HBITMAP bmap,int i,int j); /顯示單張圖片void Draw_Map();/作圖的函數(shù)void Show_Map();/顯示地圖void Get_Poision(Poision &poision);/人物在哪里的定位4.2創(chuàng)建窗口函數(shù)void main()PlaySound(E:2.wav, NULL, SND_ | SND_ASYNC);BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)hWnd

8、=CreateWindow(joe,推箱子,WS_OVERLAPPEDWINDOW,450,200,325,372,NULL,NULL,hInstance,NULL);if(!hWnd)return FALSE;SetTimer(hWnd, 1, 1, NULL);ShowWindow(hWnd,nCmdShow);UpdateWindow(hWnd);hInst=hInstance;return TRUE;4.3 地圖的輸出void Show_Map()int i,j;for(i=0;i10;i+)/1表示墻 0表示通路 2表示箱子 3表示人 4表示目的地for(j=0;j10;j+)if(

9、Mapij=1)Show_Image(hBm_wall,32*j,32*i);else if(Mapij=2)Show_Image(hBm_box,32*j,32*i);else if(Mapij=3)Show_Image(hBm_people,32*j,32*i);else if(Mapij=4)Show_Image(hBm_dirtion,32*j,32*i);else if(Mapij=0)Show_Image(hBm_floor,32*j,32*i);4.4人物的定位void Get_Poision(Poision &poision)int i=0,j=0;bool flag=FALS

10、E;poision.Hang=0,poision.Lie=0;for(i=0;i10;i+)for(j=0;j10;j+)if(Mapij=3)poision.Hang=i;poision.Lie=j;flag=TRUE;break;if(flag=TRUE)break;4.5 地圖的編寫int Map41010=1,1,1,1,1,0,0,0,0,0, /1表示墻 0表示通路 2表示箱子 3表示人 4表示目的地 1,3,0,0,1,0,0,0,0,0, 1,0,2,2,1,0,0,1,1,1, 1,0,2,0,1,0,0,1,4,1, 1,1,1,0,1,1,1,1,4,1, 0,1,1,0

11、,0,0,0,0,4,1, 0,1,0,0,0,1,0,0,0,1, 0,1,0,0,0,1,1,1,1,1, 0,1,0,0,0,1,0,0,0,1, 0,1,1,1,1,1,0,0,0,0 ;int Map51010=1,1,1,1,1,1,1,1,1,1, /1表示墻 0表示通路 2表示箱子 3表示人 4表示目的地 1,0,0,0,1,0,0,0,0,1, 1,0,3,0,1,4,0,0,4,1, 1,0,2,0,1,0,0,1,0,1, 1,0,1,0,0,0,0,0,0,1, 1,0,0,2,0,0,0,0,0,1, 1,0,0,0,1,0,0,0,0,1, 1,0,0,0,0,0,

12、0,0,0,1, 1,0,0,0,0,0,0,0,0,1, 1,1,1,1,1,1,1,1,1,1 ;int Map11010=1,1,1,1,1,1,1,1,1,1, /1表示墻 0表示通路 2表示箱子 3表示人 4表示目的地 1,0,0,0,1,0,0,0,0,1, 1,0,3,0,1,4,0,0,4,1, 1,0,2,0,1,0,0,1,0,1, 1,0,1,0,0,0,0,0,0,1, 1,0,0,2,0,0,0,0,0,1, 1,0,0,0,1,0,0,0,0,1, 1,0,0,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,0,0,1, 1,1,1,1,1,1,1,1,1

13、,1 ;int Map21010=1,1,1,1,1,1,1,1,1,1, /1表示墻 0表示通路 2表示箱子 3表示人 4表示目的地 1,0,0,0,1,0,0,0,0,1, 1,0,3,0,0,0,0,0,0,1, 1,0,2,0,1,1,0,0,0,1, 1,0,0,0,4,1,0,0,0,1, 1,0,0,2,1,1,0,0,0,1, 1,0,0,0,0,0,1,4,0,1, 1,0,0,0,0,0,0,1,0,1, 1,0,0,0,0,0,0,0,1,1, 1,1,1,1,1,1,1,1,1,1 ;int Map31010=1,1,1,1,1,1,1,1,1,1, /1表示墻 0表示

14、通路 2表示箱子 3表示人 4表示目的地 1,0,0,0,1,0,0,0,0,1, 1,0,3,0,0,0,0,2,0,1, 1,0,0,0,0,1,0,0,0,1, 1,0,0,0,1,0,0,0,0,1, 1,0,2,0,0,0,0,0,0,1, 1,0,0,1,0,0,1,4,0,1, 1,0,1,4,0,0,0,1,0,1, 1,1,0,0,0,0,0,0,1,1, 1,1,1,1,1,1,1,1,1,1 ;int Map1010=0,1,1,1,1,1,1,1,0,0, /1表示墻 0表示通路 2表示箱子 3表示人 4表示目的地 0,1,1,1,1,1,1,1,0,0, 0,1,0,

15、0,0,0,0,1,1,1, 1,1,2,1,1,1,0,0,0,1, 1,0,3,0,2,0,0,2,0,1, 1,0,0,0,1,0,0,0,1,1, 1,0,0,0,1,0,0,0,1,1, 1,0,4,4,1,0,2,0,1,1, 1,1,4,4,1,0,0,0,1,0, 0,1,1,1,1,1,1,1,1,0 ;4.6 通過調(diào)用playsound 實現(xiàn)背景音樂 case IDM_TOOL:PlaySound(E:2.wav, NULL, SND_ | SND_ASYNC);五 心得體會 通過一個學期的學習實踐,我掌握了一些比較基礎(chǔ)的編程方法。在實際操作上有了很大程度的提高,在聽課以及

16、與同學交流的過程中,受益匪淺,感悟頗多。 看似簡單的編程游戲背后,確實異常復雜的算法。在網(wǎng)上參考了一些類似的邏輯算法和代碼,并在前人的基礎(chǔ)上進行拓展與改編。同時也讓我更認識到了自身學習的不足之處,也更進一步產(chǎn)生了對游戲開發(fā)的興趣。游戲開發(fā)是一個創(chuàng)新的過程,由于能力欠缺,僅僅做了一個眾所周知的經(jīng)典項目。希望日后能力提高了,能做出更加復雜,細致的好游戲。第六章 程序全文#include#include#include#includeMenu.h#includeMap.h#include #pragma comment(lib,winmm.lib)/*全局變量的一些定義*/HMENU hmenu,h

17、addmenu;HWND hWnd;HDC hdc,hDCMem;BITMAP bm;HBITMAP hBm_people,hBm_box,hBm_wall,hBm_dirtion,hBm_floor;HINSTANCE hInst;int Count=0;char lpszMenuName=Menu;char lpszClassName=joe;typedef structint Hang;int Lie;Poision;Poision poision;int choose=1;/*/*函數(shù)原型的一些定義*/LRESULT CALLBACK WindowProc( HWND hwnd, /

18、handle to window UINT uMsg, / message identifier WPARAM wParam, / first message parameter LPARAM lParam / second message parameter);/窗口過程函數(shù)原型BOOL InitWindowsClass(HINSTANCE hInstance);/初始化窗口類BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);/初始化窗口BOOL CALLBACK DlgProc(HWND hdlg,UINT message,WPARAM

19、wParam,LPARAM lParam);/對話框過程函數(shù)void Show_Image(HBITMAP bmap,int i,int j); /顯示單張圖片void Draw_Map();/作圖的函數(shù)void Show_Map();/顯示地圖void Get_Poision(Poision &poision);/人物在哪里的定位/*/*/*WinMain函數(shù)*/*/int WINAPI WinMain( HINSTANCE hInstance, / handle to current instance HINSTANCE hPrevInstance, / handle to previou

20、s instance LPSTR lpCmdLine, / command line int nCmdShow / show state)MSG Message;HACCEL hAccel; if(!InitWindowsClass(hInstance) return FALSE;/初始化窗口類if(!InitWindows(hInstance,nCmdShow) return FALSE;/創(chuàng)建窗口hAccel=LoadAccelerators(hInstance,lpszMenuName);/*加載加速鍵資源*/while(GetMessage(&Message,NULL,0,0)if(!

21、TranslateAccelerator(hWnd,hAccel,&Message)TranslateMessage(&Message);DispatchMessage(&Message);return Message.wParam;/*/*初始化類函數(shù)*/*/BOOL InitWindowsClass(HINSTANCE hInstance)WNDCLASS WndClass;WndClass.cbClsExtra=0;WndClass.cbWndExtra=0;WndClass.hbrBackground=(HBRUSH)GetStockObject(DKGRAY_BRUSH);WndCl

22、ass.hCursor=LoadCursor(NULL,IDC_ARROW);WndClass.hIcon=LoadIcon(NULL,boxprogram);WndClass.hInstance=hInstance;WndClass.lpfnWndProc=WindowProc;WndClass.lpszClassName=lpszClassName;WndClass.lpszMenuName=lpszMenuName;/加載窗口類菜單WndClass.style=CS_HREDRAW | CS_VREDRAW;hBm_floor=LoadBitmap(hInstance,FLOOR);/地

23、板hBm_people=LoadBitmap(hInstance,PEOPLE);/小人hBm_box=LoadBitmap(hInstance,BOX);/箱子hBm_dirtion=LoadBitmap(hInstance,DIRTION);/目的地hBm_wall=LoadBitmap(hInstance,WALL);/墻if(!RegisterClass(&WndClass)MessageBeep(0);return FALSE;return TRUE;/*/*創(chuàng)建窗口函數(shù)*/*/void main()PlaySound(E:2.wav, NULL, SND_ | SND_ASYNC)

24、;BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)hWnd=CreateWindow(joe,推箱子,WS_OVERLAPPEDWINDOW,450,200,325,372,NULL,NULL,hInstance,NULL);if(!hWnd)return FALSE;SetTimer(hWnd, 1, 1, NULL);ShowWindow(hWnd,nCmdShow);UpdateWindow(hWnd);hInst=hInstance;return TRUE;/*/*窗口過程函數(shù)*/*/LRESULT CALLBACK WindowPr

25、oc( HWND hwnd, / handle to window UINT uMsg, / message identifier WPARAM wParam, / first message parameter LPARAM lParam / second message parameter)int i=0,j=0;PAINTSTRUCT ps;/定義指向柏涵繪圖信息的結(jié)構(gòu)體變量switch(uMsg)case WM_PAINT:if(Count=2)Count=0;MessageBox(hwnd,Congratulations, success!,You win,MB_OK);if(cho

26、ose=1)for(i=0;i10;i+)for(j=0;j10;j+)Mapij=Map2ij; InvalidateRect(hWnd,NULL,1);/刷新整個界面 else if(choose=2)for(i=0;i10;i+)for(j=0;j10;j+)Mapij=Map3ij;/*else if(choose=3)for(i=0;i10;i+)for(j=0;j10;j+)Mapij=Map4ij;*/hdc=BeginPaint(hwnd,&ps);SetMapMode(hdc,MM_TEXT);Show_Map();EndPaint(hwnd,&ps);return 0;ca

27、se WM_CREATE: /hdc=GetDC(hwnd);/獲取設備環(huán)境句柄 hDCMem=CreateCompatibleDC(hdc);/內(nèi)存設備環(huán)境句柄 /ReleaseDC(hwnd,hdc); /釋放設備環(huán)境句柄return 0;case WM_COMMAND:switch(LOWORD(wParam)case IDM_EXIT:SendMessage(hwnd,WM_DESTROY,0,0);break; case IDM_RESTART:switch(choose)case 1:for(i=0;i10;i+)for(j=0;j10;j+)Mapij=Map1ij;break;

28、case 2:for(i=0;i10;i+)for(j=0;j10;j+)Mapij=Map2ij;break;case 3:for(i=0;i10;i+)for(j=0;j10;j+)Mapij=Map3ij;break;case 4:for(i=0;i10;i+)for(j=0;j10;j+)Mapij=Map3ij;break;case 5:for(i=0;i10;i+)for(j=0;j10;j+)Mapij=Map3ij;break; InvalidateRect(hwnd,NULL,1);/刷新整個界面Show_Map();break;case IDM_HELP:DialogBox

29、(hInst/*當前窗口的實例句柄*/,About,hWnd,(DLGPROC)DlgProc);break; case IDM_TOOL:PlaySound(E:2.wav, NULL, SND_ | SND_ASYNC); break;case WM_TIMER:if( wParam = 1 )char buffer100;SYSTEMTIME tmp;char *WeekName7 = 星期日,星期一,星期二,星期三,星期四,星期五,星期六;GetLocalTime(&tmp);sprintf(buffer, %04d年%02d月%02d日 %02d:%02d:%02d %s %04d,

30、tmp.wYear, tmp.wMonth, tmp.wDay, tmp.wHour,tmp.wMinute, tmp.wSecond,WeekNametmp.wDayOfWeek, tmp.wMilliseconds);SetWindowText(hWnd, buffer );break;case IDM_RANGE: DialogBox(hInst,Range,hWnd,(DLGPROC)DlgProc);break;case IDM_CHOOSE:DialogBox(hInst,CHOOSE,hWnd,(DLGPROC)DlgProc);break;break;case WM_KEYDO

31、WN:switch(wParam)case VK_RIGHT:Get_Poision(poision);if(Mappoision.Hangpoision.Lie+1=0)Mappoision.Hangpoision.Lie+1=3;/人走過來Mappoision.Hangpoision.Lie=0; /變成路else if(Mappoision.Hangpoision.Lie+1=2)if(Mappoision.Hangpoision.Lie+2=0)Mappoision.Hangpoision.Lie+2=2;Mappoision.Hangpoision.Lie+1=3;Mappoisio

32、n.Hangpoision.Lie=0;if(Mappoision.Hangpoision.Lie+2=4)Mappoision.Hangpoision.Lie+2=2;Mappoision.Hangpoision.Lie+1=3;Mappoision.Hangpoision.Lie=0;Count+;InvalidateRect(hwnd,NULL,1);/刷新整個界面Show_Map();break;case VK_LEFT:Get_Poision(poision);if(Mappoision.Hangpoision.Lie-1=0)Mappoision.Hangpoision.Lie-1

33、=3;/箱子走過來Mappoision.Hangpoision.Lie=0; /人過來,身后變成路else if(Mappoision.Hangpoision.Lie-1=2)if(Mappoision.Hangpoision.Lie-2=0)Mappoision.Hangpoision.Lie-2=2;Mappoision.Hangpoision.Lie-1=3;Mappoision.Hangpoision.Lie=0;if(Mappoision.Hangpoision.Lie-2=4)Mappoision.Hangpoision.Lie-2=2;Mappoision.Hangpoision

34、.Lie-1=3;Mappoision.Hangpoision.Lie=0;Count+;InvalidateRect(hwnd,NULL,1);/刷新整個界面Show_Map();break;case VK_UP:Get_Poision(poision);if(Mappoision.Hang-1poision.Lie=0)Mappoision.Hang-1poision.Lie=3;/箱子走過來Mappoision.Hangpoision.Lie=0; /人過來,身后變成路else if(Mappoision.Hang-1poision.Lie=2)if(Mappoision.Hang-2p

35、oision.Lie=0)Mappoision.Hang-2poision.Lie=2;Mappoision.Hang-1poision.Lie=3;Mappoision.Hangpoision.Lie=0;if(Mappoision.Hang-2poision.Lie=4)Mappoision.Hang-2poision.Lie=2;Mappoision.Hang-1poision.Lie=3;Mappoision.Hangpoision.Lie=0;Count+;InvalidateRect(hwnd,NULL,1);/刷新整個界面Show_Map();break;case VK_DOWN

36、:Get_Poision(poision);if(Mappoision.Hang+1poision.Lie=0)Mappoision.Hang+1poision.Lie=3;/箱子走過來Mappoision.Hangpoision.Lie=0; /人過來,身后變成路else if(Mappoision.Hang+1poision.Lie=2) if(Mappoision.Hang+2poision.Lie=0)Mappoision.Hang+2poision.Lie=2;Mappoision.Hang+1poision.Lie=3;Mappoision.Hangpoision.Lie=0;if

37、(Mappoision.Hang+2poision.Lie=4)Mappoision.Hang+2poision.Lie=2;Mappoision.Hang+1poision.Lie=3;Mappoision.Hangpoision.Lie=0;Count+;InvalidateRect(hwnd,NULL,1);/刷新整個界面Show_Map();break;break;case WM_CLOSE:if(IDYES=MessageBox(hwnd,Do you really want to quit?,退出,MB_YESNO)DestroyWindow(hwnd);break;case WM

38、_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd,uMsg,wParam,lParam);return 0;/*/*對話框過程函數(shù)*/*/BOOL CALLBACK DlgProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM lParam)int i=0,j=0;BOOL root;switch(message)case WM_INITDIALOG:return TRUE;case WM_COMMAND:switch(LOWORD(wParam)case IDC_EDIT1:Count=0;choose=GetDlgItemInt(hdlg,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論