📄 gamemain.cpp
字号:
int k,k_max=rand()%24+24;
for(k=0;k<k_max;k++)
{
if((index=GetEtcIndex())!=-1)
{
etc[index].X=doraemon.X+(rand()%doraemon.width-(doraemon.width/2));
etc[index].Y=doraemon.Y+(rand()%doraemon.height*4-(doraemon.height*4/2));
etc[index].width=15;
etc[index].height=5;
etc[index].relation=CHARACTER_ANIMATE;
etc[index].lpanimate=&etcanim[5];
etc[index].type=MULTI_POINTER_TO_ONE_ANIMATE|(BOWL_2<<16);
etc[index].intvalue[ACTION]=1;
etc[index].intvalue[FRAME]=rand()%etc[index].lpanimate->step*2;
etc[index].doublevalue[FLOAT_SPEED]=(double)(rand()%20)/3;
etc[index].doublevalue[FLOAT_A]=-((double)(rand()%100)/200+0.05);
etc[index].doublevalue[Z]=-(rand()%(doraemon.height*3));
etc[index].visible=1;
}
}
doraemon.visible=0;
}
}
}
if(HIWORD(etc[i].type)==ITEM_1&&etc[i].doublevalue[SPEED]==0)
{
if(Act(etc[i].colliderect,doraemon.colliderect)&&doraemon.visible)
{
etc[i].doublevalue[SPEED]=1;
item[ITEM_CATE]+=1;
if(item[ITEM_CATE]>9)item[ITEM_CATE]=9;
}
}
if(HIWORD(etc[i].type)==ITEM_2&&etc[i].doublevalue[SPEED]==0)
{
if(Act(etc[i].colliderect,doraemon.colliderect)&&doraemon.visible)
{
etc[i].doublevalue[SPEED]=1;
etc[i].intvalue[SCORE]=500*(rand()%4+1);
score+=etc[i].intvalue[SCORE];
}
}
}
}
doraemon.x=doraemon.X-X; //附加多拉A梦的对象信息
doraemon.y=doraemon.Y-Y;
SetCharacterPos(&doraemon,doraemon.x,doraemon.y);
c[num]=&doraemon;
num+=1;
int index;
for(i=0;i<sizeof(stage.animate)/sizeof(CHARACTER);i++)
{
if(stage.animate[i].visible)
{
//初始化角色体力攻击力等
if(stage.animate[i].intvalue[HP_MAX]==0)
{
switch(HIWORD(stage.animate[i].type))
{
case 0: //敌方角色0
stage.animate[i].intvalue[HP_MAX]=100;
stage.animate[i].intvalue[HP]=100;
stage.animate[i].intvalue[ATP]=8;
stage.animate[i].intvalue[DEF]=3;
stage.animate[i].intvalue[SCORE]=100;
stage.animate[i].doublevalue[SPEED]=1.2;
stage.animate[i].doublevalue[SPEED_SQRT]=1.2*sqrt(0.5);
break;
case 1:
stage.animate[i].intvalue[HP_MAX]=500;
stage.animate[i].intvalue[HP]=500;
stage.animate[i].intvalue[ATP]=12;
stage.animate[i].intvalue[DEF]=10;
stage.animate[i].intvalue[SCORE]=800;
stage.animate[i].doublevalue[SPEED]=0.3;
stage.animate[i].doublevalue[SPEED_SQRT]=0.3*sqrt(0.5);
break;
case 2:
stage.animate[i].intvalue[HP_MAX]=50;
stage.animate[i].intvalue[HP]=50;
stage.animate[i].intvalue[ATP]=6;
stage.animate[i].intvalue[DEF]=2;
stage.animate[i].intvalue[SCORE]=50;
stage.animate[i].doublevalue[SPEED]=1.5;
stage.animate[i].doublevalue[SPEED_SQRT]=1.5*sqrt(0.5);
break;
default:
stage.animate[i].intvalue[HP_MAX]=100;
stage.animate[i].intvalue[HP]=100;
stage.animate[i].intvalue[ATP]=8;
stage.animate[i].intvalue[DEF]=3;
stage.animate[i].intvalue[SCORE]=100;
stage.animate[i].doublevalue[SPEED]=1.2;
stage.animate[i].doublevalue[SPEED_SQRT]=1.2*sqrt(0.5);
break;
}
}
//碰撞
int k,l;
RECT colliderect;
for(k=(int)(stage.animate[i].X/32);k<(stage.animate[i].X+stage.animate[i].width)/32;k++)
{
for(l=(int)(stage.animate[i].Y/32);l<(stage.animate[i].Y+stage.animate[i].height)/32;l++)
{
SetRectPos(destrect,k*32,l*32,32,32);
SetRectPos(colliderect,(int)stage.animate[i].X,(int)stage.animate[i].Y,stage.animate[i].width,stage.animate[i].height);
if(Act(colliderect,destrect)&&stage.collide[k][l]==TRUE)
{
stage.animate[i].X=stage.animate[i].Xhis;
stage.animate[i].Y=stage.animate[i].Yhis;
if(rand()%50==0)
{
stage.animate[i].Xtarget=stage.animate[i].X+(rand()%WIDTH-WIDTH/2);
stage.animate[i].Ytarget=stage.animate[i].Y+(rand()%HEIGHT-HEIGHT/2);
}
SetRectPos(destrect,k*32-(int)X,l*32-(int)Y,32,32);
}
}
}
if(stage.animate[i].X<=0||stage.animate[i].X+stage.animate[i].width>=stage.maplength*32||stage.animate[i].Y<=0||stage.animate[i].Y+stage.animate[i].height>=16*32)
{
stage.animate[i].X=stage.animate[i].Xhis;
stage.animate[i].Y=stage.animate[i].Yhis;
if(rand()%50==0)
{
stage.animate[i].Xtarget=stage.animate[i].X+(rand()%WIDTH-WIDTH/2);
stage.animate[i].Ytarget=stage.animate[i].Y+(rand()%HEIGHT-HEIGHT/2);
}
}
if(stage.animate[i].Xstart<=0||stage.animate[i].Xstart+stage.animate[i].width>=stage.maplength*32||stage.animate[i].Ystart<=0||stage.animate[i].Ystart+stage.animate[i].height>=16*32)
{
stage.animate[i].visible=0;
}
stage.animate[i].Xhis=stage.animate[i].X;
stage.animate[i].Yhis=stage.animate[i].Y;
if(rand()%500==1)
{
stage.animate[i].Xtarget=stage.animate[i].X+(rand()%WIDTH-WIDTH/2);
stage.animate[i].Ytarget=stage.animate[i].Y+(rand()%HEIGHT-HEIGHT/2);
}
if((int)stage.animate[i].X<(int)stage.animate[i].Xtarget&&(rand()%50==0))stage.animate[i].intvalue[ACTION]=1;
if((int)stage.animate[i].X>(int)stage.animate[i].Xtarget&&(rand()%50==0))stage.animate[i].intvalue[ACTION]=2;
if((int)stage.animate[i].Y<(int)stage.animate[i].Ytarget&&(rand()%50==0))stage.animate[i].intvalue[ACTION]=3;
if((int)stage.animate[i].Y>(int)stage.animate[i].Ytarget&&(rand()%50==0))stage.animate[i].intvalue[ACTION]=4;
if((int)stage.animate[i].X<(int)stage.animate[i].Xtarget&&(int)stage.animate[i].Y<(int)stage.animate[i].Ytarget&&(rand()%50==0))stage.animate[i].intvalue[ACTION]=5;
if((int)stage.animate[i].X<(int)stage.animate[i].Xtarget&&(int)stage.animate[i].Y>(int)stage.animate[i].Ytarget&&(rand()%50==0))stage.animate[i].intvalue[ACTION]=6;
if((int)stage.animate[i].X>(int)stage.animate[i].Xtarget&&(int)stage.animate[i].Y<(int)stage.animate[i].Ytarget&&(rand()%50==0))stage.animate[i].intvalue[ACTION]=7;
if((int)stage.animate[i].X>(int)stage.animate[i].Xtarget&&(int)stage.animate[i].Y>(int)stage.animate[i].Ytarget&&(rand()%50==0))stage.animate[i].intvalue[ACTION]=8;
if(abs((int)stage.animate[i].X-(int)stage.animate[i].Xtarget)<stage.animate[i].width&&abs((int)stage.animate[i].Y-(int)stage.animate[i].Ytarget)<stage.animate[i].height)
{
stage.animate[i].intvalue[ACTION]=0;
if(rand()%50==0)
{
stage.animate[i].Xtarget=stage.animate[i].X+(rand()%WIDTH-WIDTH/2);
stage.animate[i].Ytarget=stage.animate[i].Y+(rand()%HEIGHT-HEIGHT/2);
}
}
if(abs((int)stage.animate[i].X-(int)doraemon.X)<WIDTH&&abs((int)stage.animate[i].Y-(int)doraemon.Y)<HEIGHT)
{
if(rand()%200==0)
{
stage.animate[i].Xtarget=doraemon.X;
stage.animate[i].Ytarget=doraemon.Y;
}
if(rand()%200==0)stage.animate[i].intvalue[ACTION]|=(1<<16);
if(HIWORD(stage.animate[i].type)==1&&rand()%800==0)stage.animate[i].intvalue[ACTION]|=(2<<16);
}
//受控体跟随
if(stage.animate[i].intvalue[PARENT]!=-1
&&stage.animate[stage.animate[i].intvalue[PARENT]].visible
&&rand()%100==0)
{
stage.animate[i].Xtarget=stage.animate[stage.animate[i].intvalue[PARENT]].X;
stage.animate[i].Ytarget=stage.animate[stage.animate[i].intvalue[PARENT]].Y;
}
//附加独立行为
if(HIWORD(stage.animate[i].type)==1&&rand()%200==0)stage.animate[i].intvalue[ACTION]|=(1<<16);
if(HIWORD(stage.animate[i].type)==2&&rand()%100==0)stage.animate[i].intvalue[ACTION]|=(1<<16);
//移动行为
switch(LOWORD(stage.animate[i].intvalue[ACTION]))
{
case 1:
stage.animate[i].X+=stage.animate[i].doublevalue[SPEED];
stage.animate[i].lpanimate=&anim[1][HIWORD(stage.animate[i].type)];
break;
case 2:
stage.animate[i].X-=stage.animate[i].doublevalue[SPEED];
stage.animate[i].lpanimate=&anim[0][HIWORD(stage.animate[i].type)];
break;
case 3:
stage.animate[i].Y+=stage.animate[i].doublevalue[SPEED];
break;
case 4:
stage.animate[i].Y-=stage.animate[i].doublevalue[SPEED];
break;
case 5:
stage.animate[i].X+=stage.animate[i].doublevalue[SPEED_SQRT];
stage.animate[i].Y+=stage.animate[i].doublevalue[SPEED_SQRT];
stage.animate[i].lpanimate=&anim[1][HIWORD(stage.animate[i].type)];
break;
case 6:
stage.animate[i].X+=stage.animate[i].doublevalue[SPEED_SQRT];
stage.animate[i].Y-=stage.animate[i].doublevalue[SPEED_SQRT];
stage.animate[i].lpanimate=&anim[1][HIWORD(stage.animate[i].type)];
break;
case 7:
stage.animate[i].X-=stage.animate[i].doublevalue[SPEED_SQRT];
stage.animate[i].Y+=stage.animate[i].doublevalue[SPEED_SQRT];
stage.animate[i].lpanimate=&anim[0][HIWORD(stage.animate[i].type)];
break;
case 8:
stage.animate[i].X-=stage.animate[i].doublevalue[SPEED_SQRT];
stage.animate[i].Y-=stage.animate[i].doublevalue[SPEED_SQRT];
stage.animate[i].lpanimate=&anim[0][HIWORD(stage.animate[i].type)];
break;
case 0:
break;
}
//攻击行为
switch(HIWORD(stage.animate[i].intvalue[ACTION]))
{
case 1:
if((index=GetEtcIndex())!=-1)
{
switch(HIWORD(stage.animate[i].type))
{
case 0:
if(stage.animate[i].lpanimate==&anim[0][HIWORD(stage.animate[i].type)])
{
etc[index].X=stage.animate[i].X-56;
etc[index].Y=stage.animate[i].Y;
etc[index].Xstart=stage.animate[i].X-56;
etc[index].Ystart=stage.animate[i].Y;
etc[index].width=56;
etc[index].height=27;
etc[index].relation=CHARACTER_ANIMATE;
etc[index].lpanimate=&etcanim[3];
etc[index].type=MULTI_POINTER_TO_ONE_ANIMATE|(BULLET_CAT_LEFT<<16);
etc[index].visible=1;
etc[index].intvalue[ACTION]=1;
etc[index].intvalue[ATP]=stage.animate[i].intvalue[ATP]+rand()%2;
etc[index].doublevalue[AHEAD_SPEED]=-3;
etc[index].doublevalue[FLOAT_SPEED]=-2;
etc[index].doublevalue[AHEAD_A]=0.01;
etc[index].doublevalue[FLOAT_A]=0.05;
}
else
{
etc[index].X=stage.animate[i].X+stage.animate[i].width;
etc[index].Y=stage.animate[i].Y;
etc[index].Xstart=stage.animate[i].X+stage.animate[i].width;
etc[index].Ystart=stage.animate[i].Y;
etc[index].width=56;
etc[index].height=27;
etc[index].relation=CHARACTER_ANIMATE;
etc[index].lpanimate=&etcanim[4];
etc[index].type=MULTI_POINTER_TO_ONE_ANIMATE|(BULLET_CAT_RIGHT<<16);
etc[index].visible=1;
etc[index].intvalue[ACTION]=1;
etc[index].intvalue[ATP]=stage.animate[i].intvalue[ATP]+rand()%2;
etc[index].doublevalue[AHEAD_SPEED]=3;
etc[index].doublevalue[FLOAT_SPEED]=-2;
etc[index].doublevalue[AHEAD_A]=-0.01;
etc[index].doublevalue[FLOAT_A]=0.05;
}
break;
case 1:
if(stage.animate[i].lpanimate==&anim[0][HIWORD(stage.animate[i].type)])
{
etc[index].X=stage.animate[i].X;
etc[index].Y=stage.animate[i].Y-20+(rand()%2)*40;
etc[index].Xstart=stage.animate[i].X;
etc[index].Ystart=stage.animate[i].Y-20+(rand()%2)*40;
etc[index].type=MULTI_POINTER_TO_ONE_ANIMATE|(BULLET_HACKCAT_LEFT<<16);
}
else
{
etc[index].X=stage.animate[i].X+stage.animate[i].width-48;
etc[index].Y=stage.animate[i].Y-20+(rand()%2)*40;
etc[index].Xstart=stage.animate[i].X+stage.animate[i].width-48;
etc[index].Ystart=stage.animate[i].Y-20+(rand()%2)*40;
etc[index].type=MULTI_POINTER_TO_ONE_ANIMATE|(BULLET_HACKCAT_RIGHT<<16);
}
etc[index].width=48;
etc[index].height=5;
etc[index].relation=CHARACTER_ANIMATE;
etc[index].lpanimate=&etcanim[6];
etc[index].visible=1;
etc[index].intvalue[ACTION]=1;
etc[index].intvalue[ATP]=stage.animate[i].intvalue[ATP]+rand()%2;
etc[index].doublevalue[SPEED]=5;
break;
case 2:
if(stage.animate[i].lpanimate==&anim[0][HIWORD(stage.animate[i].type)])
{
etc[index].X=stage.animate[i].X;
etc[index].Y=stage.animate[i].Y;
etc[index].Xstart=stage.animate[i].X;
etc[index].Ystart=stage.animate[i].Y;
etc[index].type=MULTI_POINTER_TO_ONE_ANIMATE|(BULLET_HACKCAT_SMALL_LEFT<<16);
}
else
{
etc[index].X=stage.animate[i].X+stage.animate[i].width-16;
etc[index].Y=stage.animate[i].Y;
etc[index].Xstart=stage.animate[i].X+stage.animate[i].width-16;
etc[index].Ystart=stage.animate[i].Y;
etc[index].type=MULTI_POINTER_TO_ONE_ANIMATE|(BULLET_HACKCAT_SMALL_RIGHT<<16);
}
etc[index].width=15;
etc[index].height=2;
etc[index].relation=CHARACTER_ANIMATE;
etc[index].lpanimate=&etcanim[7];
etc[index].visible=1;
etc[index].intvalue[ACTION]=1;
etc[index].intvalue[ATP]=stage.animate[i].intvalue[ATP]+rand()%2;
etc[index].doublevalue[SPEED]=5;
default:
break;
}
}
stage.animate[i].intvalue[ACTION]&=LOWORD(stage.animate[i].intvalue[ACTION]);
break;
case 2:
index=GetAnimateIndex();
if(index!=-1)
{
stage.animate[index].X=stage.animate[i].X;
stage.animate[index].Y=stage.animate[i].Y;
stage.animate[index].Xhis=stage.animate[i].X;
stage.animate[index].Yhis=stage.animate[i].Y;
stage.animate[index].Xstart=stage.animate[i].X;
stage.animate[index].Ystart=stage.animate[i].Y;
stage.animate[index].relation=CHARACTER_ANIMATE;
stage.animate[index].lpanimate=&anim[0][2];
stage.animate[index].width=
stage.animate[index].lpanimate->graph[0].srcrect.right;
stage.animate[index].height=stage.animate[index].lpanimate->graph[0].srcrect.bottom/3;
stage.animate[index].visible=1;
stage.animate[index].type=MULTI_POINTER_TO_ONE_ANIMATE|(2<<16);
stage.animate[index].intvalue[PARENT]=i;
stage.animate[i].intvalue[ACTION]&=LOWORD(stage.animate[i].intvalue[ACTION]);
enemynum_max+=1;
enemynum=GetAnimateUsed();
}
break;
case 0:
break;
}
stage.animate[i].x=stage.animate[i].X-X;
stage.animate[i].y=stage.animate[i].Y-Y;
SetCharacterPos(&stage.animate[i],stage.animate[i].x,stage.animate[i].y);
destrect=stage.animate[i].lpanimate->graph[stage.animate[i].intvalue[CUR]].destrect;
if(Act(destrect,maprect))
{
c[num]=&stage.animate[i];
num+=1;
}
//动画
stage.animate[i].lpanimate->frame=stage.animate[i].intvalue[FRAME];
if(stage.animate[i].intvalue[ACTION]!=0)
{
PlayAnimate(stage.animate[i].lpanimate);
}
else
{
StopAnimate(stage.animate[i].lpanimate);
}
stage.animate[i].intvalue[FRAME]=stage.animate[i].lpanimate->frame;
stage.animate[i].intvalue[CUR]=stage.animate[i].lpanimate->cur;
}
}
for(i=0;i<num;i++) //简单排序
{
for(j=0;j<num;j++)
{
if(c[j]!=c[i])
{
if(c[j]->Y>=c[i]->Y)
{
clist[j]+=1;
}
else
{
clist[j]-=1;
}
}
}
}
for(i=-num;i<num;i++) //
{
for(j=0;j<num;j++)
{
if(clist[j]==i&&c[j]->visible)
{
c[j]->x=c[j]->X-X;
c[j]->y=c[j]->Y-Y;
if(c[j]->relation==CHARACTER_ANIMATE)
{
switch(LOWORD(c[j]->type))
{
case MULTI_POINTER_TO_ONE_ANIMATE:
SetCharacterPos(c[j],c[j]->x,c[j]->y);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -