📄 gamemain.cpp
字号:
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(!test)
{
stage.animate[i].intvalue[ACTION]=0;
stage.animate[i].lpanimate=&anim[0][HIWORD(stage.animate[i].type)];
}
switch(stage.animate[i].intvalue[ACTION])
{
case 1:
stage.animate[i].X+=normalspeed;
stage.animate[i].lpanimate=&anim[1][HIWORD(stage.animate[i].type)];
break;
case 2:
stage.animate[i].X-=normalspeed;
stage.animate[i].lpanimate=&anim[0][HIWORD(stage.animate[i].type)];
break;
case 3:
stage.animate[i].Y+=normalspeed;
break;
case 4:
stage.animate[i].Y-=normalspeed;
break;
case 5:
stage.animate[i].X+=sqrtspeed;
stage.animate[i].Y+=sqrtspeed;
stage.animate[i].lpanimate=&anim[1][HIWORD(stage.animate[i].type)];
break;
case 6:
stage.animate[i].X+=sqrtspeed;
stage.animate[i].Y-=sqrtspeed;
stage.animate[i].lpanimate=&anim[1][HIWORD(stage.animate[i].type)];
break;
case 7:
stage.animate[i].X-=sqrtspeed;
stage.animate[i].Y+=sqrtspeed;
stage.animate[i].lpanimate=&anim[0][HIWORD(stage.animate[i].type)];
break;
case 8:
stage.animate[i].X-=sqrtspeed;
stage.animate[i].Y-=sqrtspeed;
stage.animate[i].lpanimate=&anim[0][HIWORD(stage.animate[i].type)];
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;
if(i==selanimate)DrawRect(destrect);
if(Act(destrect,mouserect)&&ctrlobject==OBJ_ANIMATE&&Act(mouserect,maprect))
{
if((hasgetindex==1&&stage.animate[hoverindex].Y<stage.animate[i].Y)||hasgetindex==0) //用于点选最前端目标
{
hoverindex=i;
hoverrect=destrect;
hasgetindex=1;
}
}
}
}
}
if(mouse_rd&&Act(mouserect,maprect)&&hoverindex!=-1&&ctrlobject==OBJ_ANIMATE)
{
stage.animate[hoverindex].visible=0;
animateused=GetAnimateUsed();
selanimate=-1;
}
if(mouse_rd&&Act(mouserect,maprect)&&hoverindex==-1)selanimate=-1;
if(Act(mouserect,maprect)&&ctrlobject==OBJ_ANIMATE)
{
if(mouse_ld)selanimate=hoverindex;
if(mouse_ld&&selanimate==-1)
{
int setindex=GetAnimateIndex();
if(setindex!=-1)
{
stage.animate[setindex].X=mouse_x+X;
stage.animate[setindex].Y=mouse_y+Y;
stage.animate[setindex].Xhis=mouse_x+X;
stage.animate[setindex].Yhis=mouse_y+Y;
stage.animate[setindex].Xstart=mouse_x+X;
stage.animate[setindex].Ystart=mouse_y+Y;
stage.animate[setindex].relation=CHARACTER_ANIMATE;
stage.animate[setindex].lpanimate=&anim[0][selanim];
stage.animate[setindex].width=
stage.animate[setindex].lpanimate->graph[0].srcrect.right;
stage.animate[setindex].height=stage.animate[setindex].lpanimate->graph[0].srcrect.bottom/3;
stage.animate[setindex].visible=1;
stage.animate[setindex].type=MULTI_POINTER_TO_ONE_ANIMATE|(selanim<<16);
selanimate=setindex;
animateused=GetAnimateUsed();
}
}
}
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]->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:
if(c[j]->intvalue[ACTION]!=0)
{
c[j]->lpanimate->frame=c[j]->intvalue[FRAME];
PlayAnimate(c[j]->lpanimate);
c[j]->intvalue[FRAME]=c[j]->lpanimate->frame;
}
else
{
c[j]->lpanimate->frame=c[j]->intvalue[FRAME];
StopAnimate(c[j]->lpanimate);
c[j]->intvalue[FRAME]=c[j]->lpanimate->frame;
}
SetCharacterPos(c[j],c[j]->x,c[j]->y);
GraphToBack(&c[j]->lpanimate->graph[c[j]->lpanimate->cur],c[j]->lpanimate->keycolor);
break;
case 0:
SetCharacterPos(c[j],c[j]->x,c[j]->y);
GraphToBack(&c[j]->lpanimate->graph[c[j]->lpanimate->cur],c[j]->lpanimate->keycolor);
break;
}
}
else
{
SetCharacterPos(c[j],c[j]->x,c[j]->y);
GraphToBack(c[j]->lpgraph,c[j]->keycolor);
}
if(viewcollrect)DrawRect(c[j]->colliderect);
}
}
}
if(hoverindex!=-1)DrawRect(hoverrect);
/////////////////////////////////////////////////////////////////////////////////////////////
//痛苦过后是无穷无尽的痛苦.
//是否应该给这些有点象窗口控件的东西分别创建结构和函数?
//理智告诉我,无论如何,这些东西都要告诉它们高度,宽度,显示的字体,点的时候干什么,点完了还干什么.
//想知道自己该干什么只需要一个全局变量就可以了,唉,至少我还认得它们的时候还知道去哪里找它们.
//要是日后还要去函数堆,结构堆,声明,创建里重新认出它们来,肯定要很多时间.
//其实,它们写起来真的很短.
/////////////////////////////////////////////////////////////////////////////////////////////
//画地图标尺
if(viewlattice)
{
for(i=Xmin;i<=Xmax;i++)
{
_stprintf(strbuf,"%d",i);
DrawString(Xstart+(i-Xmin)*32+2,2,strbuf,0);
}
for(i=Ymin;i<=Ymax;i++)
{
_stprintf(strbuf,"%d",i);
DrawString(2,Ystart+(i-Ymin)*32+2,strbuf,0);
}
}
HDC hdc;
lpsurback->GetDC(&hdc);
Rectangle(hdc,0,416,640,480); //画出了工作区
Rectangle(hdc,512,0,640,417);
lpsurback->ReleaseDC(hdc);
if(viewcollide)DrawString(520,100,"VIEWCOLLIDE",0); //显示地图碰撞符号的按钮
if(!viewcollide)DrawString(520,100,"VIEWCOLLIDE",RGB(212,212,212));
SetRectPos(tmprect,520,100,105,12); //设定按钮焦点x,y,width,height
if(Act(tmprect,mouserect)&&mouse_ld)viewcollide=(viewcollide?0:1); //响应鼠标事件,按下时翻转状态值.
if(Act(tmprect,mouserect))DrawRect(tmprect); //响应鼠标事件,悬停时绘制焦点区
if(viewlattice)DrawString(520,120,"VIEWLATTICE",0);
if(!viewlattice)DrawString(520,120,"VIEWLATTICE",RGB(212,212,212));
SetRectPos(tmprect,520,120,105,12);
if(Act(tmprect,mouserect)&&mouse_ld)viewlattice=(viewlattice?0:1);
if(Act(tmprect,mouserect))DrawRect(tmprect);
if(viewcollrect)DrawString(520,140,"VIEWCOLLRECT",0);
if(!viewcollrect)DrawString(520,140,"VIEWCOLLRECT",RGB(212,212,212));
SetRectPos(tmprect,520,140,105,12);
if(Act(tmprect,mouserect)&&mouse_ld)viewcollrect=(viewcollrect?0:1);
if(Act(tmprect,mouserect))DrawRect(tmprect);
if(ctrlobject==OBJ_TILE)DrawString(520,160,"┌CTRL-TILE",0);
if(!(ctrlobject==OBJ_TILE))DrawString(520,160,"┌CTRL-TILE",RGB(212,212,212));
SetRectPos(tmprect,520,160,105,12);
if(Act(tmprect,mouserect)&&mouse_ld)ctrlobject=OBJ_TILE;
if(Act(tmprect,mouserect))DrawRect(tmprect);
if(ctrlobject==OBJ_SCENERY)DrawString(520,180,"├CTRL-SCENERY",0);
if(!(ctrlobject==OBJ_SCENERY))DrawString(520,180,"├CTRL-SCENERY",RGB(212,212,212));
SetRectPos(tmprect,520,180,105,12);
if(Act(tmprect,mouserect)&&mouse_ld)ctrlobject=OBJ_SCENERY;
if(Act(tmprect,mouserect))DrawRect(tmprect);
if(ctrlobject==OBJ_ANIMATE)DrawString(520,200,"└CTRL-ANIMATE",0);
if(!(ctrlobject==OBJ_ANIMATE))DrawString(520,200,"└CTRL-ANIMATE",RGB(212,212,212));
SetRectPos(tmprect,520,200,105,12);
if(Act(tmprect,mouserect)&&mouse_ld)ctrlobject=OBJ_ANIMATE;
if(Act(tmprect,mouserect))DrawRect(tmprect);
DrawString(520,220,"CLEANTILES",0);
SetRectPos(tmprect,520,220,105,12);
if(Act(tmprect,mouserect)&&mouse_ld)
{
memset(stage.map,seltile,sizeof(stage.map));
}
if(Act(tmprect,mouserect)&&mouse_l)
{
DrawString(520,220,"CLEANTILES",RGB(212,212,212));
}
if(Act(tmprect,mouserect))DrawRect(tmprect);
DrawString(520,240,"CLEANCOLLIDES",0);
SetRectPos(tmprect,520,240,105,12);
if(Act(tmprect,mouserect)&&mouse_ld)
{
memset(stage.collide,0,sizeof(stage.collide));
}
if(Act(tmprect,mouserect)&&mouse_l)
{
DrawString(520,240,"CLEANCOLLIDES",RGB(212,212,212));
}
if(Act(tmprect,mouserect))DrawRect(tmprect);
DrawString(520,260,"CLEANSCENERYS",0);
SetRectPos(tmprect,520,260,105,12);
if(Act(tmprect,mouserect)&&mouse_ld)
{
memset(stage.scenery,0,sizeof(stage.scenery));
}
if(Act(tmprect,mouserect)&&mouse_l)
{
DrawString(520,260,"CLEANSCENERYS",RGB(212,212,212));
}
if(Act(tmprect,mouserect))DrawRect(tmprect);
DrawString(520,280,"CLEANANIMATES",0);
SetRectPos(tmprect,520,280,105,12);
if(Act(tmprect,mouserect)&&mouse_ld)
{
memset(stage.animate,0,sizeof(stage.animate));
}
if(Act(tmprect,mouserect)&&mouse_l)
{
DrawString(520,280,"CLEANANIMATES",RGB(212,212,212));
}
if(Act(tmprect,mouserect))DrawRect(tmprect);
if(!test)DrawString(520,300,"SAVE",0);
SetRectPos(tmprect,520,300,105,12);
if((!test)&&Act(tmprect,mouserect)&&mouse_ld)
{
HFILE hfile;
OFSTRUCT ofdata;
_stprintf(strbuf,"stage\\stage%d.dat",stagenum);
hfile=OpenFile(strbuf,&ofdata,OF_CREATE|OF_WRITE);
if(hfile!=HFILE_ERROR)
{
_lwrite(hfile,(LPCSTR)&stage,sizeof(STAGE));
_lclose(hfile);
}
}
if((!test)&&Act(tmprect,mouserect)&&mouse_l)
{
DrawString(520,300,"SAVE",RGB(212,212,212));
}
if((!test)&&Act(tmprect,mouserect))DrawRect(tmprect);
if(!test)DrawString(520,320,"LOAD",0);
SetRectPos(tmprect,520,320,105,12);
if(((!test)&&Act(tmprect,mouserect)&&mouse_ld)||stagenum==-1)
{
if(stagenum==-1)stagenum=0;
memset(&stage,0,sizeof(STAGE));
stage.maplength=normallength;
HFILE hfile;
OFSTRUCT ofdata;
_stprintf(strbuf,"stage\\stage%d.dat",stagenum);
hfile=OpenFile(strbuf,&ofdata,OF_READ|OF_SHARE_COMPAT);
if(hfile!=HFILE_ERROR)
{
_lread(hfile,(LPVOID)&stage,sizeof(STAGE));
_lclose(hfile);
selscenery=-1;
sceneryused=GetSceneryUsed();
selanimate=-1;
animateused=GetAnimateUsed();
}
}
if((!test)&&Act(tmprect,mouserect)&&mouse_l)
{
DrawString(520,320,"LOAD",RGB(212,212,212));
}
if((!test)&&Act(tmprect,mouserect))DrawRect(tmprect);
if(!test)DrawString(520,340,"DELETE",0);
SetRectPos(tmprect,520,340,105,12);
if((!test)&&Act(tmprect,mouserect)&&mouse_ld)
{
memset(&stage,0,sizeof(STAGE));
stage.maplength=normallength;
HFILE hfile;
OFSTRUCT ofdata;
_stprintf(strbuf,"stage\\stage%d.dat",stagenum);
hfile=OpenFile(strbuf,&ofdata,OF_EXIST);
if(hfile!=HFILE_ERROR)
{
DeleteFile(strbuf);
selscenery=-1;
sceneryused=GetSceneryUsed();
selanimate=-1;
animateused=GetAnimateUsed();
}
}
if((!test)&&Act(tmprect,mouserect)&&mouse_l)
{
DrawString(520,340,"DELETE",RGB(212,212,212));
}
if((!test)&&Act(tmprect,mouserect))DrawRect(tmprect);
if(!test)DrawString(520,360,"<",0);
SetRect(&tmprect,520,360,520+12,360+12);
if((!test)&&Act(tmprect,mouserect)&&stagenum>0)DrawRect(tmprect);
if((!test)&&Act(tmprect,mouserect)&&stagenum>0&&mouse_ld)stagenum-=1;
_stprintf(strbuf,"stage\\stage%d.dat",stagenum);
OFSTRUCT ofdata;
if(OpenFile(strbuf,&ofdata,OF_EXIST)!=HFILE_ERROR)
{
_stprintf(strbuf,"stage%d.dat",stagenum);
DrawString(530,360,strbuf,0);
}
else
{
_stprintf(strbuf,"stage%d.dat",stagenum);
DrawString(530,360,strbuf,RGB(212,212,212));
}
if(!test)DrawString(620,360,">",0);
SetRect(&tmprect,620,360,620+12,360+12);
if((!test)&&Act(tmprect,mouserect)&&stagenum<maxstage)DrawRect(tmprect);
if((!test)&&Act(tmprect,mouserect)&&stagenum<maxstage&&mouse_ld)stagenum+=1;
if(test)DrawString(520,380,"TEST",0);
if(!test)DrawString(520,380,"TEST",RGB(212,212,212));
SetRectPos(tmprect,520,380,105,12);
if(Act(tmprect,mouserect)&&mouse_ld)test=(test?0:1);
if(Act(tmprect,mouserect))DrawRect(tmprect);
if(!test)DrawString(520,400,"<",0);
SetRect(&tmprect,520,400,520+12,400+12);
if((!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -