1、申 请 I D:秋水悠悠
2、个人邮箱:627086057[url=mailto:1367118196@qq.com]@qq.com
3、原创技术文章:
本人学习C++,希望加入论坛~~学习点破解汇编,求各位牛人支持,希望要求不要太高~~望大家好评!
附上两个作品和源码片段,由于代码没有商业意义,只能学习,没有发上来,有需要学习的可以联系我!
//移动视图
//视图不能往右移
void GAMEMAP::MoveView()
{
//只有一屏宽,不移动视图
if(mapinfo.viewmax == 1)
return;
if(rmain.xpos - viewx > 150)
{
viewx+=ROLE_STEP;
if(viewx>(mapinfo.viewmax-1)*GAMEW*32)
viewx=(mapinfo.viewmax-1)*GAMEW*32;
//设置人物移动的最大范围
rmain.SetLimit(viewx, GAMEW*32*MAX_PAGE);
}
bmSky.SetPos(BM_USER,viewx,0);
} void GAMEMAP::ShowBkObj(MYANIOBJ & bmobj)
{
int i;
int xstart,ystart; for(i=0;i<iMapBkObjNum;i++)
{
ystart=MapBkArray.y*32;
xstart=MapBkArray.x*32;
bmobj.DrawItem(xstart,ystart,MapBkArray.id,ibkobjframe);
}
}
void GAMEMAP::ShowInfo(HDC h)
{
char temp[50]={0};
SetTextColor(h, TC_WHITE);
SetBkColor(h, TC_BLACK); sprintf(temp, "LIFE : %d",iLife);
TextOut(h, 220,100,temp,strlen(temp)); sprintf(temp, "WORLD : %d",iMatch+1);
TextOut(h, 220,130,temp,strlen(temp));
} void GAMEMAP::ShowOther(HDC h)
{
char temp[50]={0};
int xstart; //show money
sprintf(temp,"MONEY: %d",iMoney);
TextOut(h,viewx+20,20,temp,strlen(temp)); //显示攻击对象生命值
if(iAttackLife)
{
TextOut(h,viewx+ATTACK_TO_TEXT_X,
ATTACK_TO_TEXT_Y,AttackName,strlen(AttackName));
//画生命条
xstart=viewx+ATTACK_TO_X-iAttackMaxLife*10; bmMap.DrawItemNoMaskWidth(xstart-1, ATTACK_TO_Y-1,ID_MAP_HEALTH_BK,
iAttackMaxLife*BMP_WIDTH_HEALTH, 0);
bmMap.DrawItemNoMaskWidth(xstart, ATTACK_TO_Y,ID_MAP_HEALTH,
iAttackLife*BMP_WIDTH_HEALTH, 0);
}
} void GAMEMAP::ShowAniObj(MYANIOBJ & bmobj)
{
int i;
int xstart,ystart; //显示金币,和其他物品
for(i=0;i<iCoinNum;i++)
{
ystart=MapCoinArray.y;
xstart=MapCoinArray.x;
bmobj.DrawItem(xstart,ystart,MapCoinArray.id, MapCoinArray.iframe);
} //显示敌人
for(i=0;i<MAX_MAP_OBJECT;i++)
{
if (MapEnemyArray.show)
{
bmobj.DrawItem(MapEnemyArray.x,MapEnemyArray.y,
MapEnemyArray.id,MapEnemyArray.iframe);
}
} //显示子弹,魔法攻击
for(i=0;i<MAX_MAP_OBJECT;i++)
{
if (FireArray.show)
{
ystart=FireArray.y;
xstart=FireArray.x;
switch(FireArray.id)
{
case ID_ANI_FIRE:
bmobj.DrawItem(xstart,ystart,FireArray.id,FireArray.iframe);
break; case ID_ANI_FIRE_MAGIC:
bmMagic.DrawItem(xstart,ystart, 0, FireArray.iframe);
break; default:
bmobj.DrawItem(xstart,ystart,FireArray.id,FireArray.iframe);
break;
}
}
}
//显示爆炸效果
for(i=0;i<MAX_MAP_OBJECT;i++)
{
if (BombArray.show)
{
ystart=BombArray.y;
xstart=BombArray.x;
bmobj.DrawItem(xstart,ystart,BombArray.id, BombArray.iframe);
}
}
}
// 返回0,不能走;1,能走
int GAMEMAP::RoleCanMove(int xoff, int yoff)
{
int canmove=1;
int i;
for(i=0;i<iMapObjNum;i++)
{
if( RECT_HIT_RECT(rmain.xpos+xoff,
rmain.ypos+yoff,
32,
32,
MapArray.x*32,
MapArray.y*32,
MapArray.w*32,
MapArray.h*32)
)
{
canmove=0;
if(yoff<0)
{
//碰到了上面的物体要向下落
rmain.movey=1;
}
if(yoff>0)
{
//碰到了下面的物体,要停止下落
rmain.jumpheight=0;
rmain.movey=0;
rmain.ypos=MapArray.y*32-32;//纵坐标要修正
}
break;
}
}
return canmove;
} //检查人物水平移动过程中,是否走出地图物体边界
int GAMEMAP::CheckRole()
{
int i;
//角色的检查
if(rmain.movey == 0 )
{
//在水平移动,
//检测角色是否站在某个物体上
for(i=0;i<iMapObjNum;i++)
{
//下方线
if( LINE_ON_LINE(rmain.xpos,
rmain.ypos+32,
32,
MapArray.x*32,
MapArray.y*32,
MapArray.w*32)
)
{
return 1;
}
}
//角色开始下落
rmain.movey=1;
rmain.jumpx=0;//此时要清除跳跃速度,否则将变成跳跃,而不是落体
return 0;
} return 0;
} void GAMEMAP::ChangeFrame(int itimeclip)
{
int i; ///////////// 帧控制 ////////////////
if(0 == itimeclip% ENEMY_SPEED)
{
//敌人移动
for(i=0;i<MAX_MAP_OBJECT;i++)
{
if(MapEnemyArray.show)
{
//帧控制
MapEnemyArray.iframe=(MapEnemyArray.iframe+1)%MapEnemyArray.iframemax;
链接:http://pan.baidu.com/s/1hqIik0s 密码:elvc 链接:http://pan.baidu.com/s/1c00Fskw 密码:glcl
|