1、推箱子实验报告 程 序 设 计 实 践 实 验 报 告 姓 名: xx 专业班级: xxxxxxxxxx 学 号: xxxxxxxxxx 项 目: 推箱子 指导老师: xx 目录内容 页码封面1一、游戏设计思想3二、游戏整体设计4三、游戏程序实现12四、问题与解决方法25五、心得体会281、游戏设计思想1、游戏的功能确定 本游戏共一关,包括游戏的初始化,按键处理,判断胜利条件,开始及退出功能。(1)初始化包括屏幕初始化和关卡的初始化,屏幕初始化高,宽都为600 。(2)按键处理包括移动推箱子的人和移动箱子,包括上下左右,通过小人推动箱子从而到达目的地。(3)开始游戏点击start,结束点击x或
2、者exit。 2、对功能模块设计 本设计共5个模块,分别是初始化模块,移动箱子模块,加载图画模块, 功能控制模块,移动小人模块等。(1)初始化模块初始化模块包括屏幕初始化和游戏的初始化,屏幕初始化用于输出提示信息。(2)图画模块 该模块主要画墙,在空地上画箱子,在目的地上画箱子,人和目的地。(3)移动箱子模块 这个模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间的箱子移动。(4)移动小人模块 该模块用于控制小人移动从而推动箱子达到目的地。(5)功能控制模块 该模块包括几个函数的集合,包括指定位置判断,输出信息功能。2、游戏整体设计1、游戏流程图 否 是 否 是模块功能图:2、关键动
3、能模块介绍 (1)准备模块 包括头文件,全局变量,预编译处理等等。 #include stdafx.h #include resource.h #define width 48 /指定图像宽高 #define heigth 48define MAX_LOADSTRING 100(2)初始化模块 包括初始化全局变量,初始化窗口,为以后做准备 / 全局变量:HINSTANCE hInst; /当前实例TCHAR szTitleMAX_LOADSTRING; / 标题栏文本TCHAR szWindowClassMAX_LOADSTRING; / 主窗口类名/ 此代码模块中包含的函数前相声明:ATOM
4、 MyRegisterClass(HINSTANCE hInstance);BOOL InitInstance(HINSTANCE, int);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);LRESULT CALLBACK start(HWND, UINT, WPARAM, LPARAM);INT_PTR CALLBACK Help(HWND hDlg, UINT message,
5、 WPARAM wParam, LPARAM lParam);int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); / TODO: 在此放置代码: MSG msg; HACCEL hAccelTable; / 初始化全局字符 LoadString(hInstance, IDS_APP_TITLE, szT
6、itle, MAX_LOADSTRING); LoadString(hInstance, IDM_me, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); / 执行应用程序初始化: if (!InitInstance (hInstance, nCmdShow) return FALSE; hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDM_me); / 主消息循环: while (GetMessage(&msg, NULL, 0, 0) if (!TranslateA
7、ccelerator(msg.hwnd, hAccelTable, &msg) TranslateMessage(&msg); DispatchMessage(&msg); return msg.wParam;ATOM MyRegisterClass(HINSTANCE hInstance) WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.cbClsExtra = 0; wcex.c
8、bWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_MY); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = MAKEINTRESOURCE(IDM_me) ; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hIns
9、tance, (LPCTSTR)IDI_MY); return RegisterClassEx(&wcex);BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) HWND hWnd; hInst = hInstance; / 将实例句柄存储在全局变量中 hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, 250, 40, 6 , NULL, NULL, hInstance, NULL); if (!hWnd) return FALSE; ShowWindow(hW
10、nd, nCmdShow); UpdateWindow(hWnd); return TRUE; (3)地图模块 包括地图二维数组,点击开始之后的加载位图,加载原始地图,离开时的消息响应char map1010= /地图二维数组 , #, # #, # b #, # # #, # # #*#, # # b*#, # b *#, #, ;static int bStarted=0;int a = 0;int aimnum_qj=0;int aimnum=0;int boxoknum_qj=0;char map_mid1010;point man_mid;RECT map_bg1010;RECT M
11、anDes; /为减少系统开销,将五幅位图一次加载进内存,等到程序结束时释放。LPCTSTR szFileName0=man.bmp;HBITMAP hBmp_man=(HBITMAP)LoadImage(NULL,szFileName0,IMAGE_BITMAP,0,0, LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);LPCTSTR szFileName1=box.bmp;HBITMAP hBmp_box=(HBITMAP)LoadImage(NULL,szFileName1, IMAGE_BITMAP,0,0,LR_CREATEDI
12、BSECTION|LR_DEFAULTSIZE| LR_LOADFROMFILE);LPCTSTR szFileName2=wall.bmp;HBITMAP hBmp_wall=(HBITMAP)LoadImage(NULL,szFileName2, IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE| LR_LOADFROMFILE);LPCTSTR szFileName3=aim.bmp;HBITMAP hBmp_aim=(HBITMAP)LoadImage(NULL,szFileName3, IMAGE_BITMAP,0,0,LR_CR
13、EATEDIBSECTION|LR_DEFAULTSIZE| LR_LOADFROMFILE);LPCTSTR szFileName4=ground.bmp;HBITMAP hBmp_ground=(HBITMAP)LoadImage(NULL,szFileName4, IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE| LR_LOADFROMFILE);LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) int wmId, wmEv
14、ent; PAINTSTRUCT ps; HDC hdc; TCHAR szHelloMAX_LOADSTRING; LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING); int winnum=0; int i,j; for(i=0;i10;i+) /设置矩形数组,为画图作准备 for(j=0;j10;j+) map_bgij.left=i*width; map_bgij.top=j*heigth; map_bgij.right=(i+1)*width; map_bgij.bottom=(j+1)*heigth; switch (mess
15、age) case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); / 分析菜单选项 switch (wmId) case IDM_ABOUT: DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); break; case IDM_START: winnum=0; aimnum_qj=0; for(i=0;i10;i+) for(j=0;j10;j+) mapij=mapij; DrawMap(hWnd,(char *)map,10,10); /加载
16、原始地图 aimnum=aimnum_qj; memcpy(map_mid,map,sizeof(map); /将原始地图复制到运行中的地图 for(i=0;i10;i+) for(j=0;j10;j+) if(map_midij=) map_midij= ; / Pla bStarted=1; break; case IDM_EXIT: if(IDYES=MessageBox(hWnd,您真的要退出吗?,关闭,MB_YESNO) DestroyWindow(hWnd); break; break; default: return DefWindowProc(hWnd, message, wP
17、aram, lParam); break; (4)操作模块 包括响应方向键及系统重绘,判断是否结束及结束对话框/ 响应方向键. case WM_KEYDOWN: switch(wParam) case VK_UP: keydown_up(hWnd); break; case VK_LEFT: keydown_left(hWnd); break; case VK_RIGHT: keydown_right(hWnd); break; case VK_DOWN: keydown_down(hWnd); break; case WM_PAINT: hdc=BeginPaint(hWnd,&ps);/系
18、统重绘 if(bStarted) boxoknum_qj=0; DrawMap(hWnd,(char*)map_mid,10,10 ); DrawPicture(hWnd,hBmp_man,ManDes); if(boxoknum_qj=aimnum)&(winnum=0) /判断结束 winnum=1; MessageBox(hWnd,TEXT(恭喜你赢了!),TEXT(Nice),MB_SYSTEMMODAL|MB_OK); EndPaint(hWnd,&ps); break; case WM_DESTROY: PostQuitMessage(0); break; case WM_CLOS
19、E: if(IDYES=MessageBox(hWnd,您真的要退出吗?,关闭,MB_YESNO) DestroyWindow(hWnd); break;三、游戏程序实现以下为原程序代码:#include stdafx.h#include resource.h#define width 48 /指定图像宽高#define heigth 48#define MAX_LOADSTRING 100typedef struct int x; int y;point;char map1010= /地图二维数组 , #, # #, # b #, # # #, # # #*#, # # b*#, # b *
20、#, #, ;static int bStarted=0;int a = 0;int aimnum_qj=0;int aimnum=0;int boxoknum_qj=0;char map_mid1010;point man_mid;RECT map_bg1010;RECT ManDes; /为减少系统开销,将五幅位图一次加载进内存,等到程序结束时释放。LPCTSTR szFileName0=man.bmp;HBITMAP hBmp_man=(HBITMAP)LoadImage(NULL,szFileName0,IMAGE_BITMAP,0,0, LR_CREATEDIBSECTION|LR_
21、DEFAULTSIZE|LR_LOADFROMFILE);LPCTSTR szFileName1=box.bmp;HBITMAP hBmp_box=(HBITMAP)LoadImage(NULL,szFileName1, IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE| LR_LOADFROMFILE);LPCTSTR szFileName2=wall.bmp;HBITMAP hBmp_wall=(HBITMAP)LoadImage(NULL,szFileName2, IMAGE_BITMAP,0,0,LR_CREATEDIBSECTIO
22、N|LR_DEFAULTSIZE| LR_LOADFROMFILE);LPCTSTR szFileName3=aim.bmp;HBITMAP hBmp_aim=(HBITMAP)LoadImage(NULL,szFileName3, IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE| LR_LOADFROMFILE);LPCTSTR szFileName4=ground.bmp;HBITMAP hBmp_ground=(HBITMAP)LoadImage(NULL,szFileName4, IMAGE_BITMAP,0,0,LR_CREAT
23、EDIBSECTION|LR_DEFAULTSIZE| LR_LOADFROMFILE);/ 全局变量:HINSTANCE hInst; /当前实例TCHAR szTitleMAX_LOADSTRING; / 标题栏文本TCHAR szWindowClassMAX_LOADSTRING; / 主窗口类名/ 此代码模块中包含的函数前相声明:ATOM MyRegisterClass(HINSTANCE hInstance);BOOL InitInstance(HINSTANCE, int);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);I
24、NT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);LRESULT CALLBACK start(HWND, UINT, WPARAM, LPARAM);INT_PTR CALLBACK Help(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdS
25、how) UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); / TODO: 在此放置代码: MSG msg; HACCEL hAccelTable; / 初始化全局字符 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDM_me, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); / 执行应用程序初始化:
26、if (!InitInstance (hInstance, nCmdShow) return FALSE; hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDM_me); / 主消息循环: while (GetMessage(&msg, NULL, 0, 0) if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg) TranslateMessage(&msg); DispatchMessage(&msg); return msg.wParam;ATOM MyRegisterClass(
27、HINSTANCE hInstance) WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_MY); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = MAKEINTRESOURCE(IDM_me) ; wcex.lpszClassN
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1