?? march_n.cpp
字號:
case 3:
*NowX=LastX+1;
*NowY=LastY+1;
return;
break;
case 4:
*NowX=LastX;
*NowY=LastY+2;
return;
break;
case 5:
*NowX=LastX;
*NowY=LastY+1;
return;
break;
case 6:
*NowX=LastX-1;
*NowY=LastY;
return;
break;
case 7:
*NowX=LastX;
*NowY=LastY-1;
return;
break;
default :
*NowX=-1;
*NowY=-1;
return;
break;
}
}
if(!(LastY&0x0001))
{
switch(Forward)
{
case 0:
*NowX=LastX;
*NowY=LastY-2;
return;
break;
case 1:
*NowX=LastX;
*NowY=LastY-1;
return;
break;
case 2:
*NowX=LastX+1;
*NowY=LastY;
return;
break;
case 3:
*NowX=LastX;
*NowY=LastY+1;
return;
break;
case 4:
*NowX=LastX;
*NowY=LastY+2;
return;
break;
case 5:
*NowX=LastX-1;
*NowY=LastY+1;
return;
break;
case 6:
*NowX=LastX-1;
*NowY=LastY;
return;
break;
case 7:
*NowX=LastX-1;
*NowY=LastY-1;
return;
break;
default :
*NowX=-1;
*NowY=-1;
return;
break;
}
}
*NowX=-1;
*NowY=-1;
return;
}
void MARCH_TransPoint(int NowX, int NowY, int LastX, int LastY, int *Forward)
//根據當前點和上一點的坐標求出前進的方向
{
int i;
int j;
i=NowX-LastX;
j=NowY-LastY;
if(LastY&0x0001)
{
if((i==-1)&&(j==0)){*Forward=6;return;}
if((i==1)&&(j==0)){*Forward=2;return;}
if((i==1)&&(j==-1)){*Forward=1;return;}
if((i==1)&&(j==1)){*Forward=3;return;}
if((i==0)&&(j==-2)){*Forward=0;return;}
if((i==0)&&(j==-1)){*Forward=7;return;}
if((i==0)&&(j==1)){*Forward=5;return;}
if((i==0)&&(j==2)){*Forward=4;return;}
if((i==0)&&(j==0)){*Forward=13;return;}
*Forward=-1;
return;
}
if(!(LastY&0x0001))
{
if((i==1)&&(j==0)){*Forward=2;return;}
if((i==-1)&&(j==0)){*Forward=6;return;}
if((i==-1)&&(j==-1)){*Forward=7;return;}
if((i==-1)&&(j==1)){*Forward=5;return;}
if((i==0)&&(j==-2)){*Forward=0;return;}
if((i==0)&&(j==-1)){*Forward=1;return;}
if((i==0)&&(j==1)){*Forward=3;return;}
if((i==0)&&(j==2)){*Forward=4;return;}
if((i==0)&&(j==0)){*Forward=13;return;}
*Forward=-1;
return;
}
*Forward=-1;
return;
}
int MARCH_Transform(void)
//對整個坐標軌跡數組進行轉化,使它變成一條方向的軌跡數組
{
int i=0;
int j=0;
int t=0;
int Forward;
memset((void *)MARCH_TrackForward,-1,sizeof(MARCH_TrackForward)-1);
i=0;
while((MARCH_Track[i][COORD_X]!=-1)&&(MARCH_Track[i][COORD_Y]!=-1))
{
if(i==0){i++;continue;}
if((MARCH_Track[i][COORD_X]==MARCH_Track[i-1][COORD_X])&&(MARCH_Track[i][COORD_Y]==MARCH_Track[i-1][COORD_Y])&&(MARCH_Track[i][LEVEL_NUM]==MARCH_Track[i-1][LEVEL_NUM]))
{
memmove(&(MARCH_Track[i][COORD_X]),&(MARCH_Track[i+1][COORD_X]),(sizeof(MARCH_Track)-3*(i+1)*sizeof(MARCH_Track[0][0])));
MARCH_StepNum--;
if(MARCH_StepNum<=0){break;}
continue;
}
else{
i++;
continue;
}
}
MARCH_Track[MARCH_StepNum][COORD_X]=-1;
MARCH_Track[MARCH_StepNum][COORD_Y]=-1;
i=0;
while((MARCH_Track[i+1][COORD_X]!=-1)&&(MARCH_Track[i+1][COORD_Y]!=-1))
{
if(j>1020)
{
return(MARCH_ERROR_GO_OUT_ARRAY);
// exit(0);
}
if(MARCH_Track[i+1][LEVEL_NUM]>MARCH_Track[i][LEVEL_NUM])
{
MARCH_TrackForward[j]=MARCH_UP_UP;
if((MARCH_TrackForward[j]==8)&&(MARCH_TrackForward[j-1]==1)){MARCH_TrackForward[j-1]==7;}
else{if((MARCH_TrackForward[j]==8)&&(MARCH_TrackForward[j-1]==7)){MARCH_TrackForward[j-1]==1;}}
j++;
MARCH_TransPoint(MARCH_Track[i+1][COORD_X],MARCH_Track[i+1][COORD_Y],MARCH_Track[i][COORD_X],MARCH_Track[i][COORD_Y],&Forward);
MARCH_TrackForward[j]=Forward;
j++;
i++;
continue;
}
if(MARCH_Track[i+1][LEVEL_NUM]<MARCH_Track[i][LEVEL_NUM])
{
MARCH_TrackForward[j]=MARCH_DOWN_DOWN;
if((MARCH_TrackForward[j]==9)&&(MARCH_TrackForward[j-1]==1)){MARCH_TrackForward[j-1]==7;}
else{if((MARCH_TrackForward[j]==9)&&(MARCH_TrackForward[j-1]==7)){MARCH_TrackForward[j-1]==1;}}
j++;
MARCH_TransPoint(MARCH_Track[i+1][COORD_X],MARCH_Track[i+1][COORD_Y],MARCH_Track[i][COORD_X],MARCH_Track[i][COORD_Y],&Forward);
MARCH_TrackForward[j]=Forward;
j++;
i++;
continue;
}
MARCH_TransPoint(MARCH_Track[i+1][COORD_X],MARCH_Track[i+1][COORD_Y],MARCH_Track[i][COORD_X],MARCH_Track[i][COORD_Y],&Forward);
if(Forward==-1)
{
MARCH_TrackForward[j]=(BYTE)-1;
return(MARCH_OK);
}
if(Forward==13){i++;continue;}
MARCH_TrackForward[j]=Forward;
i++;
j++;
}
MARCH_TrackForward[j]=(BYTE)-1;
return(MARCH_OK);
}
int MARCH_OnePeopleWithCurrent(short MARCH_CurrentPoint[2],short MARCH_NextPoint[2],short MARCH_EndPoint[2],int MARCH_Aspect)
//利用當前點和目的地的坐標,求出下一點的坐標位置,此函數只考慮了1*1格士兵的情況
{
int Forward;
int Temp_Next[2],Tmp_Next[2];
int Temp_Status;
int Temp_Forward;
static Last_Forward=0;
int i,j;//,k;
Temp_Next[COORD_X]=-1;
Temp_Next[COORD_Y]=-1;
Forward=-1;
if((MARCH_NextPoint[COORD_X]<0)&&(MARCH_NextPoint[COORD_Y]<0))
{
Forward=MARCH_StepByStepForward(MARCH_CurrentPoint[COORD_X],MARCH_CurrentPoint[COORD_Y],MARCH_EndPoint[COORD_X],MARCH_EndPoint[COORD_Y]);
if(Forward==MARCH_ERROR_STAY_HERE)
{
MARCH_NextPoint[COORD_X]=MARCH_EndPoint[COORD_X];
MARCH_NextPoint[COORD_Y]=MARCH_EndPoint[COORD_Y];
return(MARCH_OK);
}
MARCH_GetCoord(MARCH_CurrentPoint,Temp_Next,Forward);
Temp_Status=MARCH_CheckAroundPoint(Temp_Next[COORD_X],Temp_Next[COORD_Y],0);
if((Temp_Status==MARCH_ERROR_COORD_Y)||(Temp_Status==MARCH_ERROR_COORD_X))
{return(MARCH_ERROR_COORD);}
if((Temp_Status==MARCH_PLAIN)||(Temp_Status==MARCH_RIVERBED))
{
Temp_Status=MARCH_CheckAroundPoint(Temp_Next[COORD_X],Temp_Next[COORD_Y],1);
if(((Temp_Status==MARCH_EMPTY)&&(Temp_Next[COORD_X]!=MARCH_NextPoint[COORD_X])&&(Temp_Next[COORD_Y]!=MARCH_NextPoint[COORD_Y]))||((Temp_Status==MARCH_PLAIN)&&(Temp_Next[COORD_X]!=MARCH_NextPoint[COORD_X])&&(Temp_Next[COORD_Y]!=MARCH_NextPoint[COORD_Y])))
{
if((Forward==0)||(Forward==2)||(Forward==4)||(Forward==6))
{
i=Forward-1;
j=Forward+1;
if(i<0){i=7;}
if(j>=8){j=0;}
MARCH_GetCoord(MARCH_CurrentPoint,Tmp_Next,i);
Temp_Status=MARCH_CheckAroundPoint(Tmp_Next[COORD_X],Tmp_Next[COORD_Y],0);
if((Temp_Status==MARCH_ERROR_COORD_Y)||(Temp_Status==MARCH_ERROR_COORD_X))
{return(MARCH_ERROR_COORD);}
if((Temp_Status==MARCH_PLAIN)||(Temp_Status==MARCH_RIVERBED))
{
Temp_Status=MARCH_CheckAroundPoint(Tmp_Next[COORD_X],Tmp_Next[COORD_Y],1);
if((Temp_Status==MARCH_EMPTY)||(Temp_Status==MARCH_PLAIN))
{
MARCH_NextPoint[COORD_X]=Temp_Next[COORD_X];
MARCH_NextPoint[COORD_Y]=Temp_Next[COORD_Y];
return(MARCH_OK);
}
else{
MARCH_GetCoord(MARCH_CurrentPoint,Tmp_Next,j);
Temp_Status=MARCH_CheckAroundPoint(Tmp_Next[COORD_X],Tmp_Next[COORD_Y],0);
if((Temp_Status==MARCH_ERROR_COORD_Y)||(Temp_Status==MARCH_ERROR_COORD_X))
{return(MARCH_ERROR_COORD);}
if((Temp_Status==MARCH_PLAIN)||(Temp_Status==MARCH_RIVERBED))
{
Temp_Status=MARCH_CheckAroundPoint(Tmp_Next[COORD_X],Tmp_Next[COORD_Y],1);
if((Temp_Status==MARCH_EMPTY)||(Temp_Status==MARCH_PLAIN))
{
MARCH_NextPoint[COORD_X]=Temp_Next[COORD_X];
MARCH_NextPoint[COORD_Y]=Temp_Next[COORD_Y];
return(MARCH_OK);
}
}
}
}
else{
MARCH_GetCoord(MARCH_CurrentPoint,Tmp_Next,j);
Temp_Status=MARCH_CheckAroundPoint(Tmp_Next[COORD_X],Tmp_Next[COORD_Y],0);
if((Temp_Status==MARCH_ERROR_COORD_Y)||(Temp_Status==MARCH_ERROR_COORD_X))
{return(MARCH_ERROR_COORD);}
if((Temp_Status==MARCH_PLAIN)||(Temp_Status==MARCH_RIVERBED))
{
Temp_Status=MARCH_CheckAroundPoint(Tmp_Next[COORD_X],Tmp_Next[COORD_Y],1);
if((Temp_Status==MARCH_EMPTY)||(Temp_Status==MARCH_PLAIN))
{
MARCH_NextPoint[COORD_X]=Temp_Next[COORD_X];
MARCH_NextPoint[COORD_Y]=Temp_Next[COORD_Y];
return(MARCH_OK);
}
}
}
}
else{
MARCH_NextPoint[COORD_X]=Temp_Next[COORD_X];
MARCH_NextPoint[COORD_Y]=Temp_Next[COORD_Y];
return(MARCH_OK);
}
}
}
}
if(Forward>=0){Temp_Forward=Forward;}
else{Forward=Last_Forward;Temp_Forward=Last_Forward;}
while(1)
{
if(MARCH_Aspect==MARCH_GO_BY_LEFT)
{
Temp_Forward--;
if(Temp_Forward<0){Temp_Forward=7;}
if(Temp_Forward==Forward){return(MARCH_ERROR_CAN_NOT_GO);}
MARCH_GetCoord(MARCH_CurrentPoint,Temp_Next,Temp_Forward);
Temp_Status=MARCH_CheckAroundPoint(Temp_Next[COORD_X],Temp_Next[COORD_Y],0);
if((Temp_Status==MARCH_ERROR_COORD_Y)||(Temp_Status==MARCH_ERROR_COORD_X))
{return(MARCH_ERROR_COORD);}
if((Temp_Status==MARCH_PLAIN)||(Temp_Status==MARCH_RIVERBED))
{
Temp_Status=MARCH_CheckAroundPoint(Temp_Next[COORD_X],Temp_Next[COORD_Y],1);
if((Temp_Status==MARCH_EMPTY)||(Temp_Status==MARCH_PLAIN))
{
if((Temp_Forward==0)||(Temp_Forward==2)||(Temp_Forward==4)||(Temp_Forward==6))
{
i=Temp_Forward-1;
j=Temp_Forward+1;
if(i<0){i=7;}
if(j>=8){j=0;}
MARCH_GetCoord(MARCH_CurrentPoint,Tmp_Next,i);
Temp_Status=MARCH_CheckAroundPoint(Tmp_Next[COORD_X],Tmp_Next[COORD_Y],0);
if((Temp_Status==MARCH_ERROR_COORD_Y)||(Temp_Status==MARCH_ERROR_COORD_X))
{return(MARCH_ERROR_COORD);}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -