超级玛丽制作揭秘25类GAMEMAP 全局变量

 所有游戏数据都需要封装到实际的变量中。整个游戏,就是用类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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值