《C++课程设计:小游戏推箱子》由会员分享,可在线阅读,更多相关《C++课程设计:小游戏推箱子(16页珍藏版)》请在金锄头文库上搜索。
1、.课 程 设 计 报 告 课程名称:面向对象程序设计C+ 设计题目: 小游戏推箱子 专 业:计算机科学与技术 姓 名: 学 号: 指导教师: 李 晓 虹 2016 年 1 月 1 日 一 需求分析在实际编写程序的过程中,产生的一些疑惑与不解,在同学和老师的帮助下圆满解决,对于老师和同学们的帮助,在此我表示衷心的感谢。因为一开始构架的问题造成了一些功能的不能实现。经多方努力仍不能解决,留下遗憾,希望随着日后能力的提高能解决今天留下的问题。通过本学期对游戏程序的研究,我们掌握了运用win32来制作游戏的技术,虽然不娴熟还有待提高,但是一些技术含量较低的小游戏还是很容易让我们掌握的。此次游戏程序设计
2、的目的,主要是通过win32来制作游戏来更好的掌握编程语言。通过win32这个平台,熟习在制作游戏方面所需要的技巧,将自己的游戏尽可能多的运用所学到的技术,并且将在课程上面学到的知识付诸于实践,并从实际操作中,找出自己的不足之处进行弥补。每一次的课程设计,都是一次小小的软件工程,所以需要我们用百分百认真的态度来对待。对于小一点的程序,我们一个人足以应付,但是这并不是说我们可以单独一个人为所欲为,其实质应该是通过课程设计来培养自己独立自主的能力。而对于那些相对于麻烦的程序,便需要我们的协作,这样对我们以后进入企业公司发展打下了更多的基础。二、 系统的主要功能这次课程设计的要求并不像以往那么紧,老
3、师让给了我们充足的时间来制作游戏,虽然是计划做一款较为大众的经典游戏,并且能力有限,但还是对游戏做出了较高的期望,对于功能做出了较多的设想。例如,背景音乐的播放,时间的显示,自动切换关卡,难度的选择等。2.1 界面设计图2.2.1进入后的主界面图2.2.2素材图片集合 这个程序是一个益智类的游戏,是一个单机游戏,人物通过推动箱子到达目的地以在游戏中取胜,同一时刻只能有一位玩家进行游戏。图2.2.3英雄榜图2.2.4关于游戏 图2.2.5选择关卡截图三、流程图 系统流程图:游戏开始选择关卡选择关卡进行游戏进行游戏自动切换下一关完成游戏完成游戏结束游戏 游戏开局出现如图1,然后进行难度的选择,再是
4、关卡的选择,然后就可以游戏了,游戏完成之后会自动切换下一关,游戏者可手动选择结束游戏。四、数据结构设计1、 窗口管理2、 窗口通用控制3、 Shell特性4、 图形设备接口5、 系统服务6、 国际特性7、 网络服务 LRESULT CALLBACK WindowProc( HWND hwnd, / handle to window UINT uMsg, / message identifier WPARAM wParam, / first message parameter LPARAM lParam / second message parameter);/窗口过程函数原型BOOL Init
5、WindowsClass(HINSTANCE hInstance);/初始化窗口类BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);/初始化窗口BOOL CALLBACK DlgProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM lParam);/对话框过程函数void Show_Image(HBITMAP bmap,int i,int j); /显示单张图片void Draw_Map();/作图的函数void Show_Map();/显示地图void Get_Poision(Poision &p
6、oision);/人物在哪里的定位五、类设计void main()PlaySound(E:2.wav, NULL, SND_FILENAME | SND_ASYNC);BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)hWnd=CreateWindow(joe,推箱子,WS_OVERLAPPEDWINDOW,450,200,325,372,NULL,NULL,hInstance,NULL);if(!hWnd)return FALSE;SetTimer(hWnd, 1, 1, NULL);ShowWindow(hWnd,nCmdShow);Upd
7、ateWindow(hWnd);hInst=hInstance;return TRUE;六、 主要算法设计void Show_Map()int i,j;for(i=0;i10;i+)/1表示墙 0表示通路 2表示箱子 3表示人 4表示目的地for(j=0;j10;j+)if(Mapij=1)Show_Image(hBm_wall,32*j,32*i);else if(Mapij=2)Show_Image(hBm_box,32*j,32*i);else if(Mapij=3)Show_Image(hBm_people,32*j,32*i);else if(Mapij=4)Show_Image(h
8、Bm_dirtion,32*j,32*i);else if(Mapij=0)Show_Image(hBm_floor,32*j,32*i);void Get_Poision(Poision &poision)int i=0,j=0;bool flag=FALSE;poision.Hang=0,poision.Lie=0;for(i=0;i10;i+)for(j=0;j10;j+)if(Mapij=3)poision.Hang=i;poision.Lie=j;flag=TRUE;break;if(flag=TRUE)break;七、 主要代码#include#include#include#in
9、cludeMenu.h#includeMap.h#include #pragma comment(lib,winmm.lib)/*全局变量的一些定义*/HMENU hmenu,haddmenu;HWND hWnd;HDC hdc,hDCMem;BITMAP bm;HBITMAP hBm_people,hBm_box,hBm_wall,hBm_dirtion,hBm_floor;HINSTANCE hInst;int Count=0;char lpszMenuName=Menu;char lpszClassName=joe;typedef structint Hang;int Lie;Poisi
10、on;Poision poision;int choose=1;/*/*函数原型的一些定义*/LRESULT CALLBACK WindowProc( HWND hwnd, / handle to window UINT uMsg, / message identifier WPARAM wParam, / first message parameter LPARAM lParam / second message parameter);/窗口过程函数原型BOOL InitWindowsClass(HINSTANCE hInstance);/初始化窗口类BOOL InitWindows(HIN
11、STANCE hInstance,int nCmdShow);/初始化窗口BOOL CALLBACK DlgProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM lParam);/对话框过程函数void Show_Image(HBITMAP bmap,int i,int j); /显示单张图片void Draw_Map();/作图的函数void Show_Map();/显示地图void Get_Poision(Poision &poision);/人物在哪里的定位/*/*/*WinMain函数*/*/int WINAPI WinMain( HINST
12、ANCE hInstance, / handle to current instance HINSTANCE hPrevInstance, / handle to previous instance LPSTR lpCmdLine, / command line int nCmdShow / show state)MSG Message;HACCEL hAccel; if(!InitWindowsClass(hInstance) return FALSE;/初始化窗口类if(!InitWindows(hInstance,nCmdShow) return FALSE;/创建窗口hAccel=LoadAccelerators(hInstance,lpszMenuName);/*加载加速键资源*/while(GetMessage(&Message,NULL,0,0)if(!TranslateAccelerator(hWnd,hAccel,&Message)TranslateMessage(&Message);DispatchMessage(&Message);return Message.wParam;/*/*初