超级玛丽制作揭秘1

来源:互联网 发布:淘宝的自媒体机构达人 编辑:程序博客网 时间:2024/05/12 23:48

两个版本的超级玛丽下载量已达到5000,谢谢大家支持。谁无法下载,请告诉我邮箱,我直接发。现在普遍反映两个问题,一没有帮助文档,二代码注释太少。今天起,我揭秘制作过程,保证讲解到每一行代码,每一个变量。

代码我已经发布了,可见做这样一个游戏并不难。今天讲准备工作,也就是所需要的开发工具。代码编写调试:VC 6.0,美术工具:Windows自带的画图(开始-程序-附件-画图)。这是最简陋的开发工具,但已足够。最好再有Photoshop,记事本或UltraEdit等等你喜欢的文本编辑工具。

游戏代码分两部分,图像部分,逻辑部分。先说图像部分:图像分两种,矩形图片和不规则图片。可在工程中的PIC文件夹下,看到所有图像资源

矩形图片有:

地面、砖块、水管、血条、血条背景。

不规则图片有:

蘑菇(玩家,敌人1,敌人2),子弹、旋风、爆炸效果、金币、撞击金币后的得分、攻击武器(那个从魂斗罗里抠来的东东)、火圈1、火圈2、箭头(用于开始菜单选择)、树木、河流、WIN标志、背景图片(游戏背景和菜单背景)。

所有图片都分成几个位图BMP文件存储。一个文件中,每种图片,都纵向排列。每种图片可能有多帧。比如,金币需要4帧图像,才能构成一个旋转的动画效果,那么,各帧图像横向排列。

图像层的结构就这样简单,逻辑层只需要确定“哪个图像,哪一帧”这两个参数,就能在屏幕上绘制出所有图片。

图像层的基类是:

class MYBITMAP

 

 void Init(HINSTANCE hInstance,int iResource,int row,int col);
 void SetDevice(HDC hdest,HDC hsrc,int wwin,int hwin);

 void Draw(DWORD dwRop);

 HBITMAP hBm;
public:
 //按照行列平均分成几个
 int inum;
 int jnum;

 int width;
 int height;

 HDC hdcdest;
 HDC hdcsrc; 

这只是一个基类,上面是几个重要的数据成员和函数。它所描述的图片,是一个m行n列构成的m*n个图片,每个图片大小一致,都是矩形。显然,这并不能满足上面的设计要求,怎么解决呢?派生,提供更多的功能。但是,这个基类封装了足够的物理层信息:设备上下文HDC,和位图句柄HBITMAP。矩形图片的显示、不规则图片的显示、图片组织排列信息,这些功能交给它的派生类MYANIOBJ。

 

还有,我们最关心的问题是图片坐标,比如,不同位置的砖块、精灵、金币,这些由逻辑层处理,以后再讲,先到这里吧。