推箱子实验报告.docx

上传人:b****5 文档编号:4437756 上传时间:2022-12-01 格式:DOCX 页数:33 大小:641.14KB
下载 相关 举报
推箱子实验报告.docx_第1页
第1页 / 共33页
推箱子实验报告.docx_第2页
第2页 / 共33页
推箱子实验报告.docx_第3页
第3页 / 共33页
推箱子实验报告.docx_第4页
第4页 / 共33页
推箱子实验报告.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

推箱子实验报告.docx

《推箱子实验报告.docx》由会员分享,可在线阅读,更多相关《推箱子实验报告.docx(33页珍藏版)》请在冰豆网上搜索。

推箱子实验报告.docx

推箱子实验报告

姓名:

xx

专业班级:

xxxxxxxxxx

学号:

xxxxxxxxxx

项目:

推箱子

指导老师:

xx

目录

内容页码

封面————————————1

一、游戏设计思想——————3

二、游戏整体设计——————4

三、游戏程序实现——————12

四、问题与解决方法—————25

五、心得体会————————28

 

1、游戏设计思想

1、游戏的功能确定

本游戏共一关,包括游戏的初始化,按键处理,判断胜利条件,开始及退出功能。

(1)初始化包括屏幕初始化和关卡的初始化,屏幕初始化高,宽都为600。

(2)按键处理包括移动推箱子的人和移动箱子,包括上下左右,通过小人推动箱子从而到达目的地。

(3)开始游戏点击start,结束点击x或者exit。

2、对功能模块设计

本设计共5个模块,分别是初始化模块,移动箱子模块,加载图画模块,功能控制模块,移动小人模块等。

(1)初始化模块

初始化模块包括屏幕初始化和游戏的初始化,屏幕初始化用于输出提示信息。

(2)图画模块

该模块主要画墙,在空地上画箱子,在目的地上画箱子,人和目的地。

(3)移动箱子模块

这个模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间的箱子移动。

(4)移动小人模块

该模块用于控制小人移动从而推动箱子达到目的地。

(5)功能控制模块

该模块包括几个函数的集合,包括指定位置判断,输出信息功能。

2、游戏整体设计

1、游戏流程图

模块功能图:

 

2、关键动能模块介绍

(1)准备模块

包括头文件,全局变量,预编译处理等等。

#include"stdafx.h"

#include"resource.h"

#definewidth48//指定图像宽高

#defineheigth48

defineMAX_LOADSTRING100

(2)初始化模块

包括初始化全局变量,初始化窗口,为以后做准备

//全局变量:

HINSTANCEhInst;//当前实例

TCHARszTitle[MAX_LOADSTRING];//标题栏文本

TCHARszWindowClass[MAX_LOADSTRING];//主窗口类名

//此代码模块中包含的函数前相声明:

ATOMMyRegisterClass(HINSTANCEhInstance);

BOOLInitInstance(HINSTANCE,int);

LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);

INT_PTRCALLBACKAbout(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam);

LRESULTCALLBACKstart(HWND,UINT,WPARAM,LPARAM);

INT_PTRCALLBACKHelp(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam);

intAPIENTRY_tWinMain(HINSTANCEhInstance,

HINSTANCEhPrevInstance,

LPSTRlpCmdLine,

intnCmdShow)

{

UNREFERENCED_PARAMETER(hPrevInstance);

UNREFERENCED_PARAMETER(lpCmdLine);

//TODO:

在此放置代码:

MSGmsg;

HACCELhAccelTable;

//初始化全局字符

LoadString(hInstance,IDS_APP_TITLE,szTitle,MAX_LOADSTRING);

LoadString(hInstance,IDM_me,szWindowClass,MAX_LOADSTRING);

MyRegisterClass(hInstance);

//执行应用程序初始化:

if(!

InitInstance(hInstance,nCmdShow))

{

returnFALSE;

}

hAccelTable=LoadAccelerators(hInstance,(LPCTSTR)IDM_me);

//主消息循环:

while(GetMessage(&msg,NULL,0,0))

{

if(!

TranslateAccelerator(msg.hwnd,hAccelTable,&msg))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

returnmsg.wParam;

}

ATOMMyRegisterClass(HINSTANCEhInstance)

{

WNDCLASSEXwcex;

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.lpszClassName=szWindowClass;

wcex.hIconSm=LoadIcon(wcex.hInstance,(LPCTSTR)IDI_MY);

returnRegisterClassEx(&wcex);

}

BOOLInitInstance(HINSTANCEhInstance,intnCmdShow)

{

HWNDhWnd;

hInst=hInstance;//将实例句柄存储在全局变量中

hWnd=CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,

250,40,6,NULL,NULL,hInstance,NULL);

if(!

hWnd)

{

returnFALSE;

}

ShowWindow(hWnd,nCmdShow);

UpdateWindow(hWnd);

returnTRUE;

}

(3)地图模块

包括地图二维数组,点击开始之后的加载位图,加载原始地图

,离开时的消息响应

charmap[10][10]=//地图二维数组

{"",

"########",

"####@##",

"##b##",

"######",

"###*#",

"##b*#",

"#b*#",

"########",

""

};

staticintbStarted=0;

inta=0;

intaimnum_qj=0;

intaimnum=0;

intboxoknum_qj=0;

charmap_mid[10][10];

pointman_mid;

RECTmap_bg[10][10];

RECTManDes;//为减少系统开销,将五幅位图一次加载进内存,等到程序结束时释放。

LPCTSTRszFileName0="man.bmp";

HBITMAPhBmp_man=(HBITMAP)LoadImage(NULL,szFileName0,IMAGE_BITMAP,0,0,

LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);

LPCTSTRszFileName1="box.bmp";

HBITMAPhBmp_box=(HBITMAP)LoadImage(NULL,szFileName1,

IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|

LR_LOADFROMFILE);

LPCTSTRszFileName2="wall.bmp";

HBITMAPhBmp_wall=(HBITMAP)LoadImage(NULL,szFileName2,

IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|

LR_LOADFROMFILE);

LPCTSTRszFileName3="aim.bmp";

HBITMAPhBmp_aim=(HBITMAP)LoadImage(NULL,szFileName3,

IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|

LR_LOADFROMFILE);

LPCTSTRszFileName4="ground.bmp";

HBITMAPhBmp_ground=(HBITMAP)LoadImage(NULL,szFileName4,

IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|

LR_LOADFROMFILE);

LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)

{

intwmId,wmEvent;

PAINTSTRUCTps;

HDChdc;

TCHARszHello[MAX_LOADSTRING];

LoadString(hInst,IDS_HELLO,szHello,MAX_LOADSTRING);

intwinnum=0;

inti,j;

for(i=0;i<10;i++)//设置矩形数组,为画图作准备

for(j=0;j<10;j++)

{

map_bg[i][j].left=i*width;

map_bg[i][j].top=j*heigth;

map_bg[i][j].right=(i+1)*width;

map_bg[i][j].bottom=(j+1)*heigth;

}

switch(message)

{

caseWM_COMMAND:

wmId=LOWORD(wParam);

wmEvent=HIWORD(wParam);

//分析菜单选项

switch(wmId)

{

caseIDM_ABOUT:

DialogBox(hInst,(LPCTSTR)IDD_ABOUTBOX,hWnd,(DLGPROC)About);

break;

caseIDM_START:

{winnum=0;

aimnum_qj=0;

for(i=0;i<10;i++)

for(j=0;j<10;j++)

{

map[i][j]=map[i][j];

}

DrawMap(hWnd,(char**)map,10,10);//加载原始地图

aimnum=aimnum_qj;

memcpy(map_mid,map,sizeof(map));//将原始地图复制到运行中的地图

for(i=0;i<10;i++)

for(j=0;j<10;j++)

if(map_mid[i][j]=='@')

{

map_mid[i][j]='';

}

//Pla

bStarted=1;}

break;

caseIDM_EXIT:

if(IDYES==MessageBox(hWnd,"您真的要退出吗?

","关闭",MB_YESNO))

{

DestroyWindow(hWnd);

}

break;

break;

default:

returnDefWindowProc(hWnd,message,wParam,lParam);

}

break;

(4)操作模块

包括响应方向键及系统重绘,判断是否结束及结束对话框

//响应方向键.

caseWM_KEYDOWN:

switch(wParam)

{

caseVK_UP:

keydown_up(hWnd);

break;

caseVK_LEFT:

keydown_left(hWnd);

break;

caseVK_RIGHT:

keydown_right(hWnd);

break;

caseVK_DOWN:

keydown_down(hWnd);

break;

}

caseWM_PAINT:

hdc=BeginPaint(hWnd,&ps);//系统重绘

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;

caseWM_DESTROY:

PostQuitMessage(0);

break;

caseWM_CLOSE:

if(IDYES==MessageBox(hWnd,"您真的要退出吗?

","关闭",MB_YESNO))

{

DestroyWindow(hWnd);

}

break;

三、游戏程序实现

以下为原程序代码:

#include"stdafx.h"

#include"resource.h"

#definewidth48//指定图像宽高

#defineheigth48

#defineMAX_LOADSTRING100

typedefstruct

{

intx;

inty;

}point;

charmap[10][10]=//地图二维数组

{"",

"########",

"####@##",

"##b##",

"######",

"###*#",

"##b*#",

"#b*#",

"########",

""

};

staticintbStarted=0;

inta=0;

intaimnum_qj=0;

intaimnum=0;

intboxoknum_qj=0;

charmap_mid[10][10];

pointman_mid;

RECTmap_bg[10][10];

RECTManDes;//为减少系统开销,将五幅位图一次加载进内存,等到程序结束时释放。

LPCTSTRszFileName0="man.bmp";

HBITMAPhBmp_man=(HBITMAP)LoadImage(NULL,szFileName0,IMAGE_BITMAP,0,0,

LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);

LPCTSTRszFileName1="box.bmp";

HBITMAPhBmp_box=(HBITMAP)LoadImage(NULL,szFileName1,

IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|

LR_LOADFROMFILE);

LPCTSTRszFileName2="wall.bmp";

HBITMAPhBmp_wall=(HBITMAP)LoadImage(NULL,szFileName2,

IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|

LR_LOADFROMFILE);

LPCTSTRszFileName3="aim.bmp";

HBITMAPhBmp_aim=(HBITMAP)LoadImage(NULL,szFileName3,

IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|

LR_LOADFROMFILE);

LPCTSTRszFileName4="ground.bmp";

HBITMAPhBmp_ground=(HBITMAP)LoadImage(NULL,szFileName4,

IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|

LR_LOADFROMFILE);

//全局变量:

HINSTANCEhInst;//当前实例

TCHARszTitle[MAX_LOADSTRING];//标题栏文本

TCHARszWindowClass[MAX_LOADSTRING];//主窗口类名

//此代码模块中包含的函数前相声明:

ATOMMyRegisterClass(HINSTANCEhInstance);

BOOLInitInstance(HINSTANCE,int);

LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);

INT_PTRCALLBACKAbout(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam);

LRESULTCALLBACKstart(HWND,UINT,WPARAM,LPARAM);

INT_PTRCALLBACKHelp(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam);

intAPIENTRY_tWinMain(HINSTANCEhInstance,

HINSTANCEhPrevInstance,

LPSTRlpCmdLine,

intnCmdShow)

{

UNREFERENCED_PARAMETER(hPrevInstance);

UNREFERENCED_PARAMETER(lpCmdLine);

//TODO:

在此放置代码:

MSGmsg;

HACCELhAccelTable;

//初始化全局字符

LoadString(hInstance,IDS_APP_TITLE,szTitle,MAX_LOADSTRING);

LoadString(hInstance,IDM_me,szWindowClass,MAX_LOADSTRING);

MyRegisterClass(hInstance);

//执行应用程序初始化:

if(!

InitInstance(hInstance,nCmdShow))

{

returnFALSE;

}

hAccelTable=LoadAccelerators(hInstance,(LPCTSTR)IDM_me);

//主消息循环:

while(GetMessage(&msg,NULL,0,0))

{

if(!

TranslateAccelerator(msg.hwnd,hAccelTable,&msg))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

returnmsg.wParam;

}

ATOMMyRegisterClass(HINSTANCEhInstance)

{

WNDCLASSEXwcex;

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