超级玛丽游戏代码解读(VC,c++)
2017-08-29 15:16
489 查看
widows编程入门程序
整个游戏程序,其实是windows窗口的创建和消息处理的过程,主要知识点就是“windows编程”。
原作程序博客主及代码连接
如何读懂源代码,百度经验
如何看懂源代码,博客
windows窗口程序的入口和创建函数是WinMain,大概的过程框架是:
创建和设计窗口类(WNDCLASSEX结构体,包含窗口过程函数(WndPro)的入口的指定)->
注册窗口(RegisterClass()函数)->创建窗口(CreateWindow()函数)->显示窗口(ShowWindow()函数)
->更新窗口(UpdateWindow()函数)。
包含的函数有:
程序中函数的声明和所使用自定义类、结构的生成都放在”mario01.cpp”首部,从其对相应类生成的对象和结构的定义并结合资源视图、解决方案资源管理器、类视图来缕清整个程序的框架:(如下)
首先包含的头文件有:”stdafx.h”,”resource.h”
“bitmaptool.h”,”texttool.h”,”gamemap.h”,”myclock.h”,结合管理器发现”filereport.h”,”tool01.h”不在内;
再搜索一下:”filereport.h”只在bitmaptool.h中;”tool01.h”只在gamemap.cpp中;
通过头文件的命名并查看代码:
1)struct ROLE gl_enemy_normal,GAMEMAP gamemap在”gamemap.h”中,是对游戏角色和游戏各关卡画面的加载、处理、控制,该头文件的GAMEMAP类还包含有 “bitmaptool.h”中的其他成员,是程序的主处理类;
2)MYCLOCK c1在”myclock.h”中,是程序的时间处理类;
3)MYBITMAP bmPre;MYBKSKY bmSky;MYANIOBJ bmMap,bmMapBkObj,bmAniObj;MYROLE rmain;MYANIMAGIC bmMagic;在”bitmaptool.h”中,分别是对游戏登录画面对象、 游戏天空背景对象、游戏陆地背景对象、游戏图形背景对象、游戏敌人图形对象、主角人物图形对象、攻击方式图形对象的加载和初始化;
4)MYFONT myfont;在”texttool.h”中,是对游戏字符类的处理;
5)”filereport.h”是对预设关卡文件的处理,嵌套在”bitmaptool.h”中,由”gamemap.h”相关函数调用处理;
6)”tool01.h”是对图形和关卡文件的辅助处理,和对按键的宏的定义,没有对应的.cpp文件;”stdafx.h”是编译器自动加载都文件,该程序中有对各种自定义宏的定义;
并借助编译器的查阅功能和MSDN缕清逻辑关系。(用官网比第三方网站查阅API函数要好,养成习惯)
msdn网站
整个游戏程序,其实是windows窗口的创建和消息处理的过程,主要知识点就是“windows编程”。
原作程序博客主及代码连接
如何读懂源代码,百度经验
如何看懂源代码,博客
windows窗口程序的入口和创建函数是WinMain,大概的过程框架是:
创建和设计窗口类(WNDCLASSEX结构体,包含窗口过程函数(WndPro)的入口的指定)->
注册窗口(RegisterClass()函数)->创建窗口(CreateWindow()函数)->显示窗口(ShowWindow()函数)
->更新窗口(UpdateWindow()函数)。
程序框架和程序资源结构梳理:
主体源文件是”mario01.cpp”,整个程序功能的实现都由该源文件调用相应函数完成。包含的函数有:
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) //入口函数 ATOM MyRegisterClass(HINSTANCE hInstance); //窗口类属性设置和注册 BOOL InitInstance(HINSTANCE, int); //创建并显示主程序窗口 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //对程序消息的响应(绘图消 息、窗口菜单消息、按键消息、游戏状态消息) LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM); //“关于”菜单消息响应
程序中函数的声明和所使用自定义类、结构的生成都放在”mario01.cpp”首部,从其对相应类生成的对象和结构的定义并结合资源视图、解决方案资源管理器、类视图来缕清整个程序的框架:(如下)
#include "stdafx.h" #include "resource.h" #include "bitmaptool.h" #include "texttool.h" #include "gamemap.h" #include "myclock.h" #define MAX_LOADSTRING 100 char *pPreText[]={ "制作: programking 2008年8月", "操作: Z:子弹 X:跳 方向键移动 W:默认窗口大小", "x", "地图文件错误,请修正错误后重新启动程序。", "(上下键选择菜单,回车键确认)", "开始游戏", "操作说明", "博客: http://blog.csdn.net/programking", "(回车键返回主菜单)" }; int mapani[2][10]={ {32,32,64,32,32,52,64,32,64,32}, {32,32,64,32,32,25,64,32,64,32}, }; int mapsolid[2][13]={ {32,32,32,32,32,32,32,32,32,64,64,20,100}, {32,32,32,32,32,32,32,32,32,64,64,10,12} }; int mapanibk[2][4]={ {96,96,96,96}, {64,64,64,64}, }; int mapanimagic[2][1]={ {192}, {128} }; //所有地图信息 struct MAPINFO allmapinfo[]={ {1,3,66,7,0,5}, {2,4,25,4,1,5}, {MAX_MATCH,-1,-1,-1,2,5}, {-1,0,3,8,3,1}, {-1,1,3,8,3,2} }; //普通蘑菇兵 struct ROLE gl_enemy_normal= { 0, 0, 32, 32, ID_ANI_ENEMY_NORMAL, 0, 2, 0, 0, -ENEMY_STEP_X,//speed 1, 1 }; //跟踪打印 //FILEREPORT f1; MYCLOCK c1; GAMEMAP gamemap; MYBITMAP bmPre; MYBKSKY bmSky; MYANIOBJ bmMap; MYANIOBJ bmMapBkObj; MYANIOBJ bmAniObj; MYROLE rmain; MYANIMAGIC bmMagic; MYFONT myfont; HDC hwindow,hscreen,hmem,hmem2; HBITMAP hmapnull; int wwin,hwin; int wwingame,hwingame; HWND hWndMain; // Global Variables: HINSTANCE hInst; // current instance TCHAR szTitle[MAX_LOADSTRING]; // The title bar text TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text
首先包含的头文件有:”stdafx.h”,”resource.h”
“bitmaptool.h”,”texttool.h”,”gamemap.h”,”myclock.h”,结合管理器发现”filereport.h”,”tool01.h”不在内;
再搜索一下:”filereport.h”只在bitmaptool.h中;”tool01.h”只在gamemap.cpp中;
通过头文件的命名并查看代码:
1)struct ROLE gl_enemy_normal,GAMEMAP gamemap在”gamemap.h”中,是对游戏角色和游戏各关卡画面的加载、处理、控制,该头文件的GAMEMAP类还包含有 “bitmaptool.h”中的其他成员,是程序的主处理类;
2)MYCLOCK c1在”myclock.h”中,是程序的时间处理类;
3)MYBITMAP bmPre;MYBKSKY bmSky;MYANIOBJ bmMap,bmMapBkObj,bmAniObj;MYROLE rmain;MYANIMAGIC bmMagic;在”bitmaptool.h”中,分别是对游戏登录画面对象、 游戏天空背景对象、游戏陆地背景对象、游戏图形背景对象、游戏敌人图形对象、主角人物图形对象、攻击方式图形对象的加载和初始化;
4)MYFONT myfont;在”texttool.h”中,是对游戏字符类的处理;
5)”filereport.h”是对预设关卡文件的处理,嵌套在”bitmaptool.h”中,由”gamemap.h”相关函数调用处理;
6)”tool01.h”是对图形和关卡文件的辅助处理,和对按键的宏的定义,没有对应的.cpp文件;”stdafx.h”是编译器自动加载都文件,该程序中有对各种自定义宏的定义;
程序具体逻辑的实现和对应的API函数:
有了框架后先利用单步调试查看程序运行过程并借助编译器的查阅功能和MSDN缕清逻辑关系。(用官网比第三方网站查阅API函数要好,养成习惯)
msdn网站
相关文章推荐
- VC/C/C++ 代码10
- VC/C/C++ 代码20
- C/C++/mfc/vc++中怎样通过代码让你做的应用程序以管理员的身份安装执行
- 图像跟踪与识别-kcf-c++代码解读,算法主流程
- VC程序员如何查看其他平台的C++代码
- VC/C/C++ 代码11
- VC/C/C++ 代码21
- VC/C/C++ 代码12
- 关于校验和计算方面的C++代码,哪位大侠帮忙解读一下,小弟初学,不太懂!谢谢!
- c++ 中extern的基本解释说明(VC代码)
- VC/C/C++ 代码13
- c&c++ 代码查看编辑工具Source Insight、VC
- VC代码解读,新建或者打开EXCEL文件
- 在javascript中利用window.external调用C++代码,调用VC函数
- Google C++Style Guide【C++编程风格指南解读】——C++代码格式
- VC2010 C++如何更改代码的字体大小和颜色
- VC/C/C++ 代码14
- 一段用于监测C++内存越界的代码 , VC++,GCC编译测试通过
- VC/C/C++ 代码16
- c++(vs上)与g++(linux下)对于++操作的汇编代码解读