课程设计小游戏推箱子.docx
- 文档编号:7200309
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:15
- 大小:100.08KB
课程设计小游戏推箱子.docx
《课程设计小游戏推箱子.docx》由会员分享,可在线阅读,更多相关《课程设计小游戏推箱子.docx(15页珍藏版)》请在冰豆网上搜索。
课程设计小游戏推箱子
课程设计报告
课程名称:
面向对象程序设计C++
设计题目:
小游戏推箱子
专业:
计算机科学与技术
姓名:
学号:
指导教师:
李晓虹
2016年1月1日
1.需求分析
在实际编写程序的过程中,产生的一些疑惑与不解,在同学和老师的帮助下圆满解决,对于老师和同学们的帮助,在此我表示衷心的感谢。
因为一开始构架的问题造成了一些功能的不能实现。
经多方努力仍不能解决,留下遗憾,希望随着日后能力的提高能解决今天留下的问题。
通过本学期对游戏程序的研究,我们掌握了运用win32来制作游戏的技术,虽然不娴熟还有待提高,但是一些技术含量较低的小游戏还是很容易让我们掌握的。
此次游戏程序设计的目的,主要是通过win32来制作游戏来更好的掌握编程语言。
通过win32这个平台,熟习在制作游戏方面所需要的技巧,将自己的游戏尽可能多的运用所学到的技术,并且将在课程上面学到的知识付诸于实践,并从实际操作中,找出自己的不足之处进行弥补。
每一次的课程设计,都是一次小小的软件工程,所以需要我们用百分百认真的态度来对待。
对于小一点的程序,我们一个人足以应付,但是这并不是说我们可以单独一个人为所欲为,其实质应该是通过课程设计来培养自己独立自主的能力。
而对于那些相对于麻烦的程序,便需要我们的协作,这样对我们以后进入企业公司发展打下了更多的基础。
2、系统的主要功能
这次课程设计的要求并不像以往那么紧,老师让给了我们充足的时间来制作游戏,虽然是计划做一款较为大众的经典游戏,并且能力有限,但还是对游戏做出了较高的期望,对于功能做出了较多的设想。
例如,背景音乐的播放,时间的显示,自动切换关卡,难度的选择等。
2.1界面设计
图2.2.1进入后的主界面
图2.2.2素材图片集合
这个程序是一个益智类的游戏,是一个单机游戏,人物通过推动箱子到达目的地以在游戏中取胜,同一时刻只能有一位玩家进行游戏。
图2.2.3英雄榜
图2.2.4关于游戏
图2.2.5选择关卡截图
三、流程图
系统流程图:
游戏开局出现如图1,然后进行难度的选择,再是关卡的选择,然后就可以游戏了,游戏完成之后会自动切换下一关,游戏者可手动选择结束游戏。
四、数据结构设计
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:
\\2.wav",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;
}
6、主要算法设计
voidShow_Map()
{
inti,j;
for(i=0;i<10;i++)//1表示墙0表示通路2表示箱子3表示人4表示目的地
for(j=0;j<10;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);
}
voidGet_Poision(Poision&poision)
{
inti=0,j=0;
boolflag=FALSE;
poision.Hang=0,poision.Lie=0;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
if(Map[i][j]==3)
{
poision.Hang=i;
poision.Lie=j;
flag=TRUE;
break;
}
}
if(flag==TRUE)
break;
}
}
7、主要代码
#include
#include
#include
#include"Menu.h"
#include"Map.h"
#include
#pragmacomment(lib,"winmm.lib")
/**********全局变量的一些定义********/
HMENUhmenu,haddmenu;
HWNDhWnd;
HDChdc,hDCMem;
BITMAPbm;
HBITMAPhBm_people,hBm_box,hBm_wall,hBm_dirtion,hBm_floor;
HINSTANCEhInst;
intCount=0;
charlpszMenuName[]="Menu";
charlpszClassName[]="joe";
typedefstruct
{
intHang;
intLie;
}Poision;
Poisionpoision;
intchoose=1;
/************************************/
/*@@@@@@@@@@函数原型的一些定义@@@@@@@@@@@@@*/
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);//人物在哪里的定位
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
/**********************/
/*WinMain函数*/
/**********************/
intWINAPIWinMain(
HINSTANCEhInstance,//handletocurrentinstance
HINSTANCEhPrevInstance,//handletopreviousinstance
LPSTRlpCmdLine,//commandline
intnCmdShow//showstate
)
{
MSGMessage;
HACCELhAccel;
if(!
InitWindowsClass(hInstance))returnFALSE;//初始化窗口类
if(!
InitWindows(hInstance,nCmdShow))returnFALSE;//创建窗口
hAccel=LoadAccelerators(hInstance,lpszMenuName);/*加载加速键资源*/
while(GetMessage(&Message,NULL,0,0))
{
if(!
TranslateAccelerator(hWnd,hAccel,&Message))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
}
returnMessage.wParam;
}
/**********************/
/*初始化类函数*/
/**********************/
BOOLInitWindowsClass(HINSTANCEhInstance)
{
WNDCLASSWndClass;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)GetStockObject(DKGRAY_BRUSH);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,"boxprogram");
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WindowProc;
WndClass.lpszClassName=lpszClassName;
WndClass.lpszMenuName=lpszMenuName;//加载窗口类菜单
WndClass.style=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);
returnFALSE;
}
returnTRUE;
}
/**********************/
/*创建窗口函数*/
/**********************/
voidmain()
{
PlaySound("E:
\\2.wav",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;
}
/**********************/
/*窗口过程函数*/
/**********************/
LRESULTCALLBACKWindowProc(
HWNDhwnd,//handletowindow
UINTuMsg,//messageidentifier
WPARAMwParam,//firstmessageparameter
LPARAMlParam//secondmessageparameter
)
{
inti=0,j=0;
PAINTSTRUCTps;//定义指向柏涵绘图信息的结构体变量
intMap4[10][10]={1,1,1,1,1,0,0,0,0,0,//1表示墙0表示通路2表示箱子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表示墙0表示通路2表示箱子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表示墙0表示通路2表示箱子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};
intMap2[10][10]={1,1,1,1,1,1,1,1,1,1,//1表示墙0表示通路2表示箱子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表示墙0表示通路2表示箱子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表示墙0表示通路2表示箱子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};
caseIDM_TOOL:
PlaySound("E:
\\2.wav",NULL,SND_FILENAME|SND_ASYNC);
八、心得体会
通过一个学期的学习实践,我掌握了一些比较基础的编程方法。
在实际操作上有了很大程度的提高,在听课以及与同学交流的过程中,受益匪浅,感悟颇多。
看似简单的编程游戏背后,确实异常复杂的算法。
在网上参考了一些类似的逻辑算法和代码,并在前人的基础上进行拓展与改编。
同时也让我更认识到了自身学习的不足之处,也更进一步产生了对游戏开发的兴趣。
游戏开发是一个创新的过程,由于能力欠缺,仅仅做了一个众所周知的经典项目。
希望日后能力提高了,能做出更加复杂,细致的好游戏。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 小游戏 箱子