?? march_n.cpp
字號:
{
if(ForwardX>0)
{MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]+1;}
else{MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]-1;}
MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y];
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
}
MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_EndX;
MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_EndY;
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
MARCH_LineTrack[MARCH_TrackNum][COORD_X]=-1;
MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=-1;
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
return(MARCH_OK);
}
j=BetweenX-i;
X_Num=0;
while(j>0)
{
X_Num++;
j=j-i;
}
X_Num--;
i=0;
while(i<=BetweenY)
{
k=i*X_Num;
for(j=1;j<=X_Num;j++)
{
if(ForwardX>0)
{MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]+1;}
else{MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]-1;}
if(ForwardY>0)
{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y];}
else{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y];}
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
if((MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]==MARCH_EndX)||(MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]==MARCH_EndY))
{break;}
}
if((MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]==MARCH_EndX)||(MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]==MARCH_EndY))
{break;}
if(MARCH_BeginY&0x0001)
{
if(ForwardX>0)
{
MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]+1;
if(ForwardY>0)
{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]+1;}
else{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]-1;}
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
if((MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]==MARCH_EndX)||(MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]==MARCH_EndY))
{break;}
MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_X];
if(ForwardY>0)
{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]+1;}
else{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]-1;}
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
i++;
i++;
if((MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]==MARCH_EndX)||(MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]==MARCH_EndY))
{break;}
}
else{
MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_X];
if(ForwardY>0)
{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]+1;}
else{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]-1;}
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
if((MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]==MARCH_EndX)||(MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]==MARCH_EndY))
{break;}
MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]-1;
if(ForwardY>0)
{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]+1;}
else{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]-1;}
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
i++;
i++;
if((MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]==MARCH_EndX)||(MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]==MARCH_EndY))
{break;}
}
}
else{
if(ForwardX<0)
{
MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]-1;
if(ForwardY>0)
{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]+1;}
else{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]-1;}
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
{break;}
MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_X];
if(ForwardY>0)
{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]+1;}
else{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]-1;}
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
i++;
i++;
if((MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]==MARCH_EndX)||(MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]==MARCH_EndY))
{break;}
}
else{
MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_X];
if(ForwardY>0)
{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]+1;}
else{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]-1;}
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
if((MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]==MARCH_EndX)||(MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]==MARCH_EndY))
{break;}
MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]+1;
if(ForwardY>0)
{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]+1;}
else{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]-1;}
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
i++;
i++;
if((MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]==MARCH_EndX)||(MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]==MARCH_EndY))
{break;}
}
}
}
k=MARCH_EndX-MARCH_LineTrack[MARCH_TrackNum-1][COORD_X];
#ifdef CORRECT_LINE_TRACK
if(k>=3)
{
int ReturnCode;
ReturnCode=MARCH_CorrectLine(MARCH_LineTrack[MARCH_TrackNum-1][COORD_X],MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y],MARCH_EndX,MARCH_EndY);
return(ReturnCode);
}
#endif
if((k<0)&&(ForwardX>0))
{
#ifdef DEBUG
OutputDebugString("You have go out by X coord\n");
#endif
return(MARCH_ERROR_GO_OUT_X_IN_GET_LINE);
}
if((k>0)&&(ForwardX<0))
{
#ifdef DEBUG
OutputDebugString("You have go out by X coord\n");
#endif
return(MARCH_ERROR_GO_OUT_X_IN_GET_LINE);
}
if(k<0){k=-k;}
if(ForwardX>0)
{
for(i=1;i<=k;i++)
{
MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]+1;
MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y];
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
}
}
else{
for(i=1;i<=k;i++)
{
MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_X]-1;
MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y];
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
}
}
k=MARCH_EndY-MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y];
if((k<0)&&(ForwardY>0))
{
#ifdef DEBUG
OutputDebugString("You have go out by Y coord\n");
#endif
return(MARCH_ERROR_GO_OUT_Y_IN_GET_LINE);
}
if((k>0)&&(ForwardY<0))
{
#ifdef DEBUG
OutputDebugString("You have go out by Y coord\n");
#endif
return(MARCH_ERROR_GO_OUT_Y_IN_GET_LINE);
}
if(k<0){k=-k;}
k=k>>1;
if(ForwardY>0)
{
for(i=1;i<=k;i++)
{
MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_X];
MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]+2;
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
}
}
else{
for(i=1;i<=k;i++)
{
MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_X];
MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]-2;
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
}
}
if(MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]!=MARCH_EndY)
{
MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_X];
if(ForwardY>0)
{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]+1;}
else{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]-1;}
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
}
MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_EndX;
MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_EndY;
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
MARCH_LineTrack[MARCH_TrackNum][COORD_X]=-1;
MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=-1;
MARCH_TrackNum++;
if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
return(MARCH_OK);
}
}
int MARCH_CheckAroundPoint(int AroundPointX,int AroundPointY,int MARCH_Level)
// 判斷所給的坐標的點上的屬性
{
DWORD i,j;
struct MAP_UNIT_CODE_STRUCT UnitDeCode;
struct MAP_GROUND_CODE_STRUCT GroundDeCode;
if((AroundPointY<=3)||(AroundPointY>=MAP_Lib.szNum.cy-3))
{return(MARCH_ERROR_COORD_Y);}
if((AroundPointX<=1)||(AroundPointX>=MAP_Lib.szNum.cx-1))
{return(MARCH_ERROR_COORD_X);}
i=MAP_GetUnitData(AroundPointX,AroundPointY);
if(i!=MAP_DATA_NONE)
{
MAP_UnitDeCode(i,&UnitDeCode);
if(UnitDeCode.nFile<27)
{
if((UnitDeCode.nFile==16)||(UnitDeCode.nFile==17))
{return(MARCH_PLAIN);}
else{return(MARCH_BUILDING);}
}
else
{
if((UnitDeCode.nFile>=27)&&(UnitDeCode.nFile<=33))
{return(MARCH_ONE_PEOPLE);}
if(UnitDeCode.nFile==49){return(MARCH_FOUR_SHIP);}
if((UnitDeCode.nFile==34)||(UnitDeCode.nFile==37)){return(MARCH_TWO_PEOPLE);}
if((UnitDeCode.nFile==35)||(UnitDeCode.nFile==36)||(UnitDeCode.nFile==38)||(UnitDeCode.nFile==39)||(UnitDeCode.nFile==45))
{return(MARCH_ONE_PEOPLE);}
if((UnitDeCode.nFile>=40)&&(UnitDeCode.nFile<=44)){return(MARCH_TWO_PEOPLE);}
if(UnitDeCode.nFile==46){return(MARCH_ONE_SHIP);}
if((UnitDeCode.nFile==47)||(UnitDeCode.nFile==48)||(UnitDeCode.nFile==52)){return(MARCH_TWO_SHIP);}
if((UnitDeCode.nFile==50)||(UnitDeCode.nFile==51)){return(MARCH_ONE_PEOPLE);}
else{return(MARCH_ERROR_DECODE);}
}
}
else
{
j=MAP_GetGroundData(MARCH_Level,AroundPointX,AroundPointY);
if((j==MAP_DATA_NONE)&&(MARCH_Level==0)){return(MARCH_ERROR_GROUND);}
if((j==MAP_DATA_NONE)&&(MARCH_Level!=0)){return(MARCH_EMPTY);}
MAP_GroundDeCode((WORD)j,&GroundDeCode);
if( GroundDeCode.nAttr!=MAP_SPECIAL_NONE&&GroundDeCode.nAttr != MAP_SPECIAL_CUT_WOOD&&GroundDeCode.nAttr != MAP_SPECIAL_CUT_WHEAT )
{return(MARCH_SPECIAL);}
if( GroundDeCode.nFile==3 )
{
if( GroundDeCode.nCol==12 )
{return( MARCH_WATER );}
else{return( MARCH_RIVERBED );}
}
else
{
if((GroundDeCode.nFile==0)||(GroundDeCode.nFile==1)||(GroundDeCode.nFile==2)||(GroundDeCode.nFile==4)||(GroundDeCode.nFile==5))
{return( MARCH_PLAIN );}
else{
if(GroundDeCode.nFile==12)
{return(MARCH_FORTRESS);}
else{if((GroundDeCode.nFile==6)||(GroundDeCode.nFile==11))
{return(MARCH_WALL);}
else{return( MARCH_HILL );}
}
}
}
}
return(MARCH_OK);
}
void MARCH_TransBack(int *NowX, int *NowY, int LastX, int LastY, int Forward)
//從上一點的坐標和前進的方向得到下一點的坐標
{
if(LastY&0x0001)
{
switch(Forward)
{
case 0:
*NowX=LastX;
*NowY=LastY-2;
return;
break;
case 1:
*NowX=LastX+1;
*NowY=LastY-1;
return;
break;
case 2:
*NowX=LastX+1;
*NowY=LastY;
return;
break;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -