1、图素材图片集合这个程序是一个益智类的游戏,是一个单机游戏,人物通过 推动箱子到达目的地以在游戏中取胜,同一时刻只能有一位玩家 进行游戏。图英雄榜图关于游戏游戏流程系统流程图:游戏开始选择关卡图选择关卡截图游戏开局出现如图 1,然后进行难度的选择,再是关卡的选择,然后就可以游戏了, 游戏完成之后会自动切换下一关,游戏者可手动选择结束游戏。Win32 API 简介Win32 API 即为 Microsoft 32 位平台的应用程序编程接口 ( Application Programming Interface )。所有在 Win32 平台上运行 的应用程序都可以调用这些函数。 使用 Win32 A
2、PI ,应用程序可 以充分挖掘 Windows 的 32 位操作系统的潜力。 Mircrosoft 的所有 32 位平台都支持统一的 API ,包括函数、结构、消息、宏及接口。 使用 Win32 API 不但可以开发出在各种平台上都能成功运行的应用 程序,而且也可以充分利用每个平台特有的功能和属性。 在具体 编程时,程序实现方式的差异依赖于相应平台的底层功能的不同。 最 显著的差异是某些函数只能在更强大的平台上实现其功能。 例如,安 全函数只能在 Windows NT 操作系统下使用。另外一些主要差别就 是系统限制,比如值的范围约束,或函数可管理的项目个数等等。Win32 API 函数分类标准
3、 Win32 API 函数可以分为以下几类:1、窗口管理2、窗口通用控制3、 Shell 特性4、图形设备接口5、系统服务6、国际特性7、网络服务函数原型的一些定义LRESULT CALLBACK WindowProc(HWND hwnd, / handle to windowUINT uMsg, / message identifierWPARAM wParam, / first message parameterLPARAM lParam / second message parameter);/ 窗口过程函数原型BOOL InitWindowsClass(HINSTANCE hInsta
4、nce);/ 初始化窗口类BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);/ 初始化窗口BOOL CALLBACK DlgProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM lParam);/ 对话框过程函数void Show_Image(HBITMAP bmap,int i,int j); / 显示单张图片void Draw_Map();/ 作图的函数void Show_Map();/ 显示地图void Get_Poision(Poision &poision);/ 人物在哪里的定位创建窗口函
5、数void main()PlaySound(E:, NULL, SND_FILENAME | SND_ASYNC);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
6、=hInstance; return TRUE;地图的输出void Show_Map()int i,j;for(i=0;i10;i+)/1 表示墙 0 表示通路 2 表示箱子 3 表示人 4 表示 目的地for(j=0;jj+) if(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,3
7、2*i);else if(Mapij=0) Show_Image(hBm_floor,32*j,32*i);人物的定位poision)int i=0,j=0;bool flag=FALSE;=0,=0;i+) for(j=0;j+) if(Mapij=3)=i;=j;flag=TRUE;break;if(flag=TRUE)地图的编写int Map41010=1,1,1,1,1,0,0,0,0,0, /1 示箱子 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,
8、1,4,1, 0,1,1,0,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 箱子 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,
9、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,1 ;int Map11010=1,1,1,1,1,1,1,1,1,1, /1 箱子 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,表示墙 0 表示通路 2 表表示墙 0 表示通路 2 表示1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0
10、,1, 1,1,1,1,1,1,1,1,1,1 ;int Map21010=1,1,1,1,1,1,1,1,1,1, /1 箱子 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
11、, /1 箱子 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 箱子 3 表示人 4 表示目的地 0,1,1,1,1,1,1,1,0,0, 0,1,0,0,0,0,0,1
12、,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 ;通过调用 playsound 实现背景音乐case IDM_TOOL:五 心得体会通过一个学期的学习实践,我掌握了一些比较基础的编程方 法。在实际操作上有了很大程度的提高,在听课以及与同学交流 的过程中,受益匪浅,感悟颇多。看似简单的编程游戏背后, 确实异常复杂的算法。 在网上参考了 一些类似
13、的逻辑算法和代码, 并在前人的基础上进行拓展与改编。 同 时也让我更认识到了自身学习的不足之处, 也更进一步产生了对游戏 开发的兴趣。游戏开发是一个创新的过程,由于能力欠缺,仅仅做了 一个众所周知的经典项目。希望日后能力提高了,能做出更加复杂, 细致的好游戏。第六章 程序全文#include #include #pragma comment(lib,)全局变量的一些定义HMENU hmenu,haddmenu;HWND hWnd;HDC hdc,hDCMem;BITMAP bm;HBITMAP hBm_people,hBm_box,hBm_wall,hBm_dirtion,hBm_floor;
14、HINSTANCE hInst;int Count=0;char lpszMenuName=Menu;char lpszClassName=typedef structint Hang;int Lie;Poision;Poision poision;int choose=1;/*函数原型的一些定义 */对话 框过程函数/*/*WinMain 函数 */*int WINAPI WinMain(HINSTANCE hInstance, / handle to current instance HINSTANCE hPrevInstance, / handle to previous instanc
15、e LPSTR lpCmdLine, / command lineint nCmdShow / show stateMSG Message;HACCEL hAccel;InitWindowsClass(hInstance) return FALSE;/InitWindows(hInstance,nCmdShow) return FALSE;hAccel=LoadAccelerators(hInstance,lpszMenuName);/* while(GetMessage(&Message,NULL,0,0) if(!TranslateAccelerator(hWnd,hAccel,&Mess
16、age) TranslateMessage(&Message);DispatchMessage(&return ;初始化窗口类创建窗口加载加速键资源 */*/* 初始化类函数 */BOOL InitWindowsClass(HINSTANCE hInstance)WNDCLASS WndClass;=0;=(HBRUSH)GetStockObject(DKGRAY_BRUSH); =LoadCursor(NULL,IDC_ARROW);=LoadIcon(NULL,boxprogram=hInstance;=WindowProc;=lpszClassName;=lpszMenuName;/ 加
17、载窗口类菜单=CS_HREDRAW | CS_VREDRAW;hBm_floor=LoadBitmap(hInstance,FLOOR 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 TRUE;/ 箱子/ 墙地板小人目的地/* 创建窗口函数 */ 推箱
18、子 SetTimer(hWnd, 1, 1, NULL); ShowWindow(hWnd,nCmdShow); /*/ /* 窗口过程函数 */ /*/LRESULT CALLBACK WindowProc( HWND hwnd, / handle to window UINT uMsg, / message identifierWPARAM wParam, / first message parameter LPARAM lParam / second message parameterPAINTSTRUCT ps;/ 定义指向柏涵绘图信息的结构体变量switch(uMsg)case WM
19、_PAINT:if(Count=2) YouCount=0;MessageBox(hwnd,Congratulations, success ! win,MB_OK);if(choose=1)j+)Mapij=Map2ij;InvalidateRect(hWnd,NULL,1);/ 刷新整个界面 else if(choose=2)Mapij=Map3ij;/*else if(choose=3)i+) for(j=0;Mapij=Map4ij;*/hdc=BeginPaint(hwnd,&ps);SetMapMode(hdc,MM_TEXT);Show_Map();EndPaint(hwnd,&
20、return 0;case WM_CREATE:/hdc=GetDC(hwnd); / 获取设备环境句柄 hDCMem=CreateCompatibleDC(hdc);/ 内存设备环境句柄 /ReleaseDC(hwnd,hdc); / 释放设备环境句柄 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:j+) Mapij=Map1ij;case 2:case 3:ca
21、se 4:case 5:j+) Mapij=Map3ij;InvalidateRect(hwnd,NULL,1);/ 刷新整个界面case IDM_HELP:DialogBox(hInst/* 当 前 窗 口 的 实 例 句 柄 */,About,hWnd,(DLGPROC)DlgProc);case WM_TIMER:if( wParam = 1 )char buffer100;SYSTEMTIME tmp;char *WeekName7 = 星期日 星期一 星期二 星期三 星期四 星期五 星期六 ;GetLocalTime(&tmp);sprintf(buffer, %04d 年 %02d 月 %02d 日 %02d:%02d:%02d %s %04d, ,WeekName, ;SetWindowText(hWnd, buffer ); break;case IDM_RANGE: DialogBox(hInst,Rangecase IDM_CHOOSE:CHOOSEcase WM_KEYDOW
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1