ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:641.14KB ,
资源ID:4437756      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4437756.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(推箱子实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

推箱子实验报告.docx

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