推箱子程序设计与报告Word文档格式.docx

上传人:b****4 文档编号:17634071 上传时间:2022-12-07 格式:DOCX 页数:21 大小:124.84KB
下载 相关 举报
推箱子程序设计与报告Word文档格式.docx_第1页
第1页 / 共21页
推箱子程序设计与报告Word文档格式.docx_第2页
第2页 / 共21页
推箱子程序设计与报告Word文档格式.docx_第3页
第3页 / 共21页
推箱子程序设计与报告Word文档格式.docx_第4页
第4页 / 共21页
推箱子程序设计与报告Word文档格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

推箱子程序设计与报告Word文档格式.docx

《推箱子程序设计与报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《推箱子程序设计与报告Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。

推箱子程序设计与报告Word文档格式.docx

图素材图片集合

这个程序是一个益智类的游戏,是一个单机游戏,人物通过推动箱子到达目的地以在游戏中取胜,同一时刻只能有一位玩家进行游戏。

 

图英雄榜

图关于游戏

游戏流程

系统流程图:

游戏开始

选择关卡

图选择关卡截图

游戏开局出现如图1,然后进行难度的选择,再是关卡的选择,然后就可以游戏了,游戏完成之后会自动切换下一关,游戏者可手动选择结束游戏。

Win32API简介

Win32API即为Microsoft32位平台的应用程序编程接口(ApplicationProgrammingInterface)。

所有在Win32平台上运行的应用程序都可以调用这些函数。

使用Win32API,应用程序可以充分挖掘Windows的32位操作系统的潜力。

Mircrosoft的所有32位平台都支持统一的API,包括函数、结构、消息、宏及接口。

使用Win32API不但可以开发出在各种平台上都能成功运行的应用程序,而且也可以充分利用每个平台特有的功能和属性。

在具体编程时,程序实现方式的差异依赖于相应平台的底层功能的不同。

最显著的差异是某些函数只能在更强大的平台上实现其功能。

例如,安全函数只能在WindowsNT操作系统下使用。

另外一些主要差别就是系统限制,比如值的范围约束,或函数可管理的项目个数等等。

Win32API函数分类

标准Win32API函数可以分为以下几类:

1、窗口管理

2、窗口通用控制

3、Shell特性

4、图形设备接口

5、系统服务

6、国际特性

7、网络服务

函数原型的一些定义

LRESULTCALLBACKWindowProc(

HWNDhwnd,//handletowindow

UINTuMsg,//messageidentifier

WPARAMwParam,//firstmessageparameter

LPARAMlParam//secondmessageparameter

);

//窗口过程函数原型

BOOLInitWindowsClass(HINSTANCEhInstance);

//初始化窗口类

BOOLInitWindows(HINSTANCEhInstance,intnCmdShow);

//初始化窗口

BOOLCALLBACKDlgProc(HWNDhdlg,UINTmessage,WPARAMwParam,LPARAMlParam);

//对话框过程函数

voidShow_Image(HBITMAPbmap,inti,intj);

//显示单张图片

voidDraw_Map();

//作图的函数

voidShow_Map();

//显示地图

voidGet_Poision(Poision&

poision);

//人物在哪里的定位

创建窗口函数

voidmain()

{

PlaySound("

E:

\\"

NULL,SND_FILENAME|SND_ASYNC);

}

BOOLInitWindows(HINSTANCEhInstance,intnCmdShow)

{hWnd=CreateWindow("

joe"

"

推箱子"

WS_OVERLAPPEDWINDOW,450,200,325,372,NULL,NULL,hInstance,NULL);

if(!

hWnd)

returnFALSE;

SetTimer(hWnd,1,1,NULL);

ShowWindow(hWnd,nCmdShow);

UpdateWindow(hWnd);

hInst=hInstance;

returnTRUE;

地图的输出

voidShow_Map()

inti,j;

for(i=0;

i<

10;

i++)//1表示墙0表示通路2表示箱子3表示人4表示目的地

for(j=0;

j<

j++)if(Map[i][j]==1)

Show_Image(hBm_wall,32*j,32*i);

elseif(Map[i][j]==2)Show_Image(hBm_box,32*j,32*i);

elseif(Map[i][j]==3)Show_Image(hBm_people,32*j,32*i);

elseif(Map[i][j]==4)Show_Image(hBm_dirtion,32*j,32*i);

elseif(Map[i][j]==0)Show_Image(hBm_floor,32*j,32*i);

人物的定位

poision)

inti=0,j=0;

boolflag=FALSE;

=0,=0;

i++)

{for(j=0;

j++){

if(Map[i][j]==3)

=i;

=j;

flag=TRUE;

break;

if(flag==TRUE)

地图的编写

intMap4[10][10]={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,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};

intMap5[10][10]={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,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};

intMap1[10][10]={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,1,1,1,1,1,1,1,1,1,1,1};

intMap2[10][10]={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};

intMap3[10][10]={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,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};

intMap[10][10]={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,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实现背景音乐

caseIDM_TOOL:

五心得体会

通过一个学期的学习实践,我掌握了一些比较基础的编程方法。

在实际操作上有了很大程度的提高,在听课以及与同学交流的过程中,受益匪浅,感悟颇多。

看似简单的编程游戏背后,确实异常复杂的算法。

在网上参考了一些类似的逻辑算法和代码,并在前人的基础上进行拓展与改编。

同时也让我更认识到了自身学习的不足之处,也更进一步产生了对游戏开发的兴趣。

游戏开发是一个创新的过程,由于能力欠缺,仅仅做了一个众所周知的经典项目。

希望日后能力提高了,能做出更加复杂,细致的好游戏。

第六章程序全文

#include<

>

#include<

#include"

"

>

#pragmacomment(lib,"

全局变量的一些定义

HMENUhmenu,haddmenu;

HWNDhWnd;

HDChdc,hDCMem;

BITMAPbm;

HBITMAPhBm_people,hBm_box,hBm_wall,hBm_dirtion,hBm_floor;

HINSTANCEhInst;

intCount=0;

charlpszMenuName[]="

Menu"

;

charlpszClassName[]="

typedefstruct

intHang;

intLie;

}Poision;

Poisionpoision;

intchoose=1;

/*@@@@@@函@数@原@型@的一些定义@@@@@@@@@@@@@*/

//对话框过程函数

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

/*WinMain函数*/

/********************

intWINAPIWinMain(

HINSTANCEhInstance,//handletocurrentinstanceHINSTANCEhPrevInstance,//handletopreviousinstanceLPSTRlpCmdLine,//commandline

intnCmdShow//showstate

MSGMessage;

HACCELhAccel;

InitWindowsClass(hInstance))returnFALSE;

//

InitWindows(hInstance,nCmdShow))returnFALSE;

hAccel=LoadAccelerators(hInstance,lpszMenuName);

/*while(GetMessage(&

Message,NULL,0,0))

{if(!

TranslateAccelerator(hWnd,hAccel,&

Message)){

TranslateMessage(&

Message);

DispatchMessage(&

return;

初始化窗口类

创建窗口

加载加速键资源*/

/**********************/

/*初始化类函数*/

BOOLInitWindowsClass(HINSTANCEhInstance)

WNDCLASSWndClass;

=0;

=(HBRUSH)GetStockObject(DKGRAY_BRUSH);

=LoadCursor(NULL,IDC_ARROW);

=LoadIcon(NULL,"

boxprogram"

=hInstance;

=WindowProc;

=lpszClassName;

=lpszMenuName;

//加载窗口类菜单

=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);

returnTRUE;

//箱子

//墙

地板

小人

目的地

/*创建窗口函数*/

推箱子

SetTimer(hWnd,1,1,NULL);

ShowWindow(hWnd,nCmdShow);

}/**********************//*窗口过程函数*//**********************/

LRESULTCALLBACKWindowProc(HWNDhwnd,//handletowindowUINTuMsg,//messageidentifier

WPARAMwParam,//firstmessageparameterLPARAMlParam//secondmessageparameter

PAINTSTRUCTps;

//定义指向柏涵绘图信息的结构体变量

switch(uMsg)

caseWM_PAINT:

if(Count==2){

You

Count=0;

MessageBox(hwnd,"

Congratulations,success!

win"

MB_OK);

if(choose==1)

j++)

Map[i][j]=Map2[i][j];

InvalidateRect(hWnd,NULL,1);

//刷新整个界面}

elseif(choose==2)

Map[i][j]=Map3[i][j];

/*elseif(choose==3)

i++)for(j=0;

Map[i][j]=Map4[i][j];

*/

hdc=BeginPaint(hwnd,&

ps);

SetMapMode(hdc,MM_TEXT);

Show_Map();

EndPaint(hwnd,&

return0;

caseWM_CREATE:

//hdc=GetDC(hwnd);

//获取设备环境句柄hDCMem=CreateCompatibleDC(hdc);

//内存设备环境句柄//ReleaseDC(hwnd,hdc);

//释放设备环境句柄return0;

caseWM_COMMAND:

switch(LOWORD(wParam))

caseIDM_EXIT:

SendMessage(hwnd,WM_DESTROY,0,0);

break;

caseIDM_RESTART:

switch(choose)

case1:

j++)Map[i][j]=Map1[i][j];

case2:

case3:

case4:

case5:

j++)Map[i][j]=Map3[i][j];

InvalidateRect(hwnd,NULL,1);

//刷新整个界面

caseIDM_HELP:

DialogBox(hInst/*当前窗口的实例句柄*/,"

About"

hWnd,(DLGPROC)DlgProc);

caseWM_TIMER:

if(wParam==1)

charbuffer[100];

SYSTEMTIMEtmp;

char*WeekName[7]={"

星期日"

星期一"

星期二"

星期三"

星期四"

星期五"

星期六"

};

GetLocalTime(&

tmp);

sprintf(buffer,"

%04d年%02d月%02d日%02d:

%02d:

%02d%s%04d"

,WeekName[],;

SetWindowText(hWnd,buffer);

}break;

caseIDM_RANGE:

DialogBox(hInst,"

Range"

caseIDM_CHOOSE:

CHOOSE"

caseWM_KEYDOW

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1