所有游戏数据都需要封装到实际的变量中。整个游戏,就是用类GAMEMAP表示的。
成员函数功能列表:
class GAMEMAP
{
public:
//加载地图
int LoadMap();
//初始化所有游戏数据
void Init();
//初始化场景数据
void InitMatch();
//显示地图物品
void Show(MYANIOBJ & bmobj);
//显示地图背景物品,河流,树木
void ShowBkObj(MYANIOBJ & bmobj);
//显示所有动态元素,金币,小怪等
void ShowAniObj(MYANIOBJ & bmobj);
//显示LIFE, WORLD提示
void ShowInfo(HDC h);
//显示金钱, 攻击提示信息
void ShowOther(HDC h);
//键盘处理
int KeyProc(int iKey);
//按键抬起处理
void KeyUpProc(int iKey);
//移动视图
void MoveView();
//设置视图起始坐标
void SetView(int x);
//设置视图状态, 函数没有使用
void SetViewState(int i);
//设置游戏状态
void SetGameState(int i);
//碰撞检测
//判断人物能否移动
int RoleCanMove(int xoff, int yoff);
//检测人物是否站在物品上
int CheckRole();
//检测所有动态元素之间的碰撞, 子弹和蘑菇兵的生成
int CheckAni(int itimeclip);
//清除一个小怪
void ClearEnemy(int i);
//清除一个金币
void ClearCoin(int i);
//帧刷新
void ChangeFrame(int itimeclip);
//逻辑检测
int IsWin(); //胜负检测
void Fail(); //失败处理
void Fail_Wait(); //失败后, 加载地图
//地图切换
void ChangeMap();
//错误检查
void CodeErr(int i);
//菜单控制
void ShowMenu(MYANIOBJ & bmobj);
//构造和析构函数
GAMEMAP();
~GAMEMAP();
//数据部分
int iMatch; //当前关卡
int iLife; //游戏次数
int iGameState; //游戏状态
//地图物品数组 游标
struct MapObject MapArray[MAX_MAP_OBJECT];
int iMapObjNum;
//地图背景物品数组 游标
struct MapObject MapBkArray[MAX_MAP_OBJECT];
int iMapBkObjNum;
//小怪火圈数组 游标
struct ROLE MapEnemyArray[MAX_MAP_OBJECT];
int iMapEnemyCursor;
//金币武器包 数组 游标
struct MapObject MapCoinArray[MAX_MAP_OBJECT];
int iCoinNum;
//下一个地图编号, 变量没有使用
int iNextMap;
//玩家数据
int iMoney; //金钱数量
int iAttack; //攻击方式
//视图数据
int viewx; //视图横坐标
int viewy; //视图纵坐标
int iViewState; //视图状态
//地图信息
struct MAPINFO mapinfo;
//frame control
int ienemyframe; //小怪帧
int ibkobjframe; //背景物品帧
//子弹数组 游标
struct ROLE FireArray[MAX_MAP_OBJECT];
int iFireNum;
int iTimeFire;//两个子弹的时间间隔
int iBeginFire;//是否开始攻击
//爆炸效果,+10字样 数组 游标
struct MapObject BombArray[MAX_MAP_OBJECT];
int iBombNum;
//攻击对象提示
char AttackName[20]; //名称
int iAttackLife; //生命值
int iAttackMaxLife; //最大生命值
//菜单部分
int iMenu; //当前菜单项编号
//屏幕缩放
int iScreenScale; //是否是默认窗口大小
};
所有的数据都存储到一系列全局变量中:
//所有菜单文字
char *pPreText[]={
"制作: programking 2008年8月",
"操作: Z:子弹 X:跳 方向键移动 W:默认窗口大小",
};
//所有动态元素的图片宽 高
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,
};
//跟踪打印
//FILEREPORT f1;
//计时器
MYCLOCK c1;
//游戏全部逻辑
GAMEMAP gamemap;
//各种图片
MYBITMAP bmPre; //菜单背景,通关,GAMEOVER
MYBKSKY bmSky; //天空背景
MYANIOBJ bmMap; //地图物品
MYANIOBJ bmMapBkObj; //地图背景物品
MYANIOBJ bmAniObj; //所有动态元素
MYROLE rmain; //玩家角色
MYANIMAGIC bmMagic; //旋风
//字体管理
MYFONT myfont; //字体
//DC句柄
HDC hwindow,hscreen,hmem,hmem2;//窗口DC, 地图DC, 临时DC,临时DC2
//空位图
HBITMAP hmapnull;
//窗口大小
int wwin,hwin;//显示器屏幕宽 高
int wwingame,hwingame; //当前窗口宽 高
HWND hWndMain; //窗口句柄
所有功能都分别介绍过了。再讲菜单控制和窗口缩放,且听下回分解。
附:
超级玛丽第一版源码链接:http://download.csdn.net/source/497676
超级玛丽增强版源码链接:http://download.csdn.net/source/584350