⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 march_n.cpp

📁 网页游戏赤壁
💻 CPP
📖 第 1 页 / 共 5 页
字号:
#include	"stdafx.h"
#include	"march_n.h"
     
   
short		MARCH_LineTrack[NUMBER_OF_TRACK+2][2];//此数组为用来存储直线轨迹的数组
short		MARCH_Track[NUMBER_OF_TRACK+2][3];//此数组为用来存储最后的行军轨迹的数组
BYTE		MARCH_TrackForward[NUMBER_OF_TRACK+2];//此数组为用来存储最后由行军轨迹求出的行军路线的方向变化
int			MARCH_StepNum;//此变量为用来对最后的行军轨迹数组进行记数的
int			MARCH_BeginX;//此变量为用来保存起始点的X坐标
int			MARCH_BeginY;//此变量为用来保存起始点的Y坐标
int			MARCH_Begin_X;//此变量为用来保存地面起始点的X坐标
int			MARCH_Begin_Y;//此变量为用来保存地面起始点的Y坐标
int			MARCH_TrackNum;//此变量用来对存储直线轨迹的数组进行记数


 
//#define	DEBUG
//#define	DEBUG_1



int	MARCH_CheckAround(short	MARCH_CurrentX,short	MARCH_CurrentY,int	Level)
{
	DWORD		i,j;
	struct	MAP_UNIT_CODE_STRUCT	UnitDeCode;
	struct	MAP_GROUND_CODE_STRUCT	GroundDeCode;


	if((MARCH_CurrentY<=3)||(MARCH_CurrentY>=MAP_Lib.szNum.cy-3))
		{return(MARCH_ERROR_COORD_Y);}
	if((MARCH_CurrentX<=1)||(MARCH_CurrentX>=MAP_Lib.szNum.cx-1))
		{return(MARCH_ERROR_COORD_X);}
	i=MAP_GetUnitData(MARCH_CurrentX,MARCH_CurrentY);
	if(i!=MAP_DATA_NONE)
		{
			MAP_UnitDeCode(i,&UnitDeCode);
			if(UnitDeCode.nFile==50){return(MARCH_SHORT_STAIRCASE);}
			if(UnitDeCode.nFile==51){return(MARCH_LONG_STAIRCASE);}
		}
	j=MAP_GetGroundData(Level,MARCH_CurrentX,MARCH_CurrentY);
	if((j==MAP_DATA_NONE)&&(Level!=0)){return(MARCH_EMPTY);}
	MAP_GroundDeCode((WORD)j,&GroundDeCode);
	if((GroundDeCode.nFile==6)&&(GroundDeCode.nCol<=1)){return(MARCH_CAN_SHIN);}
	if((GroundDeCode.nFile==7)&&(GroundDeCode.nCol<=7)){return(MARCH_CAN_SHIN);}
	if((GroundDeCode.nFile==9)&&(GroundDeCode.nCol<=1)){return(MARCH_CAN_SHIN);}
	if((GroundDeCode.nFile==10)&&(GroundDeCode.nCol<=7)){return(MARCH_CAN_SHIN);}
	return(MARCH_CAN_NOT_SHIN);
}



int MARCH_GetCoord(short	MARCH_CurrentPoint[2],int MARCH_NextPoint[2],int MARCH_Num)
{
	int		i;

	i=MARCH_CurrentPoint[COORD_Y]&0x0001;
	if(i!=0)
		{
			switch(MARCH_Num)
				{
					case	0:
							MARCH_NextPoint[COORD_X]=MARCH_CurrentPoint[COORD_X];
							MARCH_NextPoint[COORD_Y]=MARCH_CurrentPoint[COORD_Y]-2;
							break;
					case	1:
							MARCH_NextPoint[COORD_X]=MARCH_CurrentPoint[COORD_X]+1;
							MARCH_NextPoint[COORD_Y]=MARCH_CurrentPoint[COORD_Y]-1;
							break;
					case	2:
							MARCH_NextPoint[COORD_X]=MARCH_CurrentPoint[COORD_X]+1;
							MARCH_NextPoint[COORD_Y]=MARCH_CurrentPoint[COORD_Y];
							break;
					case	3:
							MARCH_NextPoint[COORD_X]=MARCH_CurrentPoint[COORD_X]+1;
							MARCH_NextPoint[COORD_Y]=MARCH_CurrentPoint[COORD_Y]+1;
							break;
					case	4:
							MARCH_NextPoint[COORD_X]=MARCH_CurrentPoint[COORD_X];
							MARCH_NextPoint[COORD_Y]=MARCH_CurrentPoint[COORD_Y]+2;
							break;
					case	5:
							MARCH_NextPoint[COORD_X]=MARCH_CurrentPoint[COORD_X];
							MARCH_NextPoint[COORD_Y]=MARCH_CurrentPoint[COORD_Y]+1;
							break;
					 case	6:
							MARCH_NextPoint[COORD_X]=MARCH_CurrentPoint[COORD_X]-1;
							MARCH_NextPoint[COORD_Y]=MARCH_CurrentPoint[COORD_Y];
							break;
					case	7:
							MARCH_NextPoint[COORD_X]=MARCH_CurrentPoint[COORD_X];
							MARCH_NextPoint[COORD_Y]=MARCH_CurrentPoint[COORD_Y]-1;
							break;
					default	:
							#ifdef	DEBUG
							OutputDebugString("Verdict the bend error!\n");
							#endif
							return(MARCH_ERROR_FORWARD_IN_GET_COORD);
							break;
				}
		}
	else
		{
			switch(MARCH_Num)
				{
					case	0:
							MARCH_NextPoint[COORD_X]=MARCH_CurrentPoint[COORD_X];
							MARCH_NextPoint[COORD_Y]=MARCH_CurrentPoint[COORD_Y]-2;
							break;
				 	case	1:
							MARCH_NextPoint[COORD_X]=MARCH_CurrentPoint[COORD_X];
							MARCH_NextPoint[COORD_Y]=MARCH_CurrentPoint[COORD_Y]-1;
							break;
					case	2:
							MARCH_NextPoint[COORD_X]=MARCH_CurrentPoint[COORD_X]+1;
							MARCH_NextPoint[COORD_Y]=MARCH_CurrentPoint[COORD_Y];
							break;
					case	3:
							MARCH_NextPoint[COORD_X]=MARCH_CurrentPoint[COORD_X];
							MARCH_NextPoint[COORD_Y]=MARCH_CurrentPoint[COORD_Y]+1;
							break;
					case	4:
							MARCH_NextPoint[COORD_X]=MARCH_CurrentPoint[COORD_X];
							MARCH_NextPoint[COORD_Y]=MARCH_CurrentPoint[COORD_Y]+2;
							break;
					case	5:
							MARCH_NextPoint[COORD_X]=MARCH_CurrentPoint[COORD_X]-1;
							MARCH_NextPoint[COORD_Y]=MARCH_CurrentPoint[COORD_Y]+1;
							break;
					case	6:
							MARCH_NextPoint[COORD_X]=MARCH_CurrentPoint[COORD_X]-1;
							MARCH_NextPoint[COORD_Y]=MARCH_CurrentPoint[COORD_Y];
							break;
					case	7:
							MARCH_NextPoint[COORD_X]=MARCH_CurrentPoint[COORD_X]-1;
							MARCH_NextPoint[COORD_Y]=MARCH_CurrentPoint[COORD_Y]-1;
							break;
					default	:
							#ifdef	DEBUG
							OutputDebugString("Verdict the bend error!\n");
							#endif
							return(MARCH_ERROR_FORWARD_IN_GET_COORD);
							break;
				}
		}

	return(MARCH_OK);
}



int MARCH_LookForLine(int MARCH_BeginX,int MARCH_BeginY,int MARCH_EndX,int MARCH_EndY)
//此函数是寻找一条从出发点到目的地的直线轨迹;
//前两个形参是出发点的坐标,
//后两个形参是目的地的坐标;
{
	int		ForwardX=0;
	int		ForwardY=0;
	int		i,j,k;
	int		BetweenX=0;
	int		BetweenY=0;
	int		NowX=0,NowY=0;
	int		X_Num=0,Y_Num=0;

	MARCH_TrackNum=0;
	BetweenX=MARCH_EndX-MARCH_BeginX;
	BetweenY=MARCH_EndY-MARCH_BeginY;
	if((BetweenX==0)&&(BetweenY==0))
		{
			MARCH_LineTrack[0][COORD_X]=MARCH_BeginX;
			MARCH_LineTrack[0][COORD_Y]=MARCH_BeginY;
			MARCH_LineTrack[1][COORD_X]=MARCH_EndX;
			MARCH_LineTrack[1][COORD_Y]=MARCH_EndY;
			MARCH_LineTrack[2][COORD_X]=-1;
			MARCH_LineTrack[2][COORD_Y]=-1;
			return(MARCH_OK);
		}
	MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_BeginX;
	MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_BeginY;
	MARCH_TrackNum++;
	if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
	if(BetweenX==0)
		{
			int		ToY;
			if(BetweenY<0){ToY=-1;BetweenY=-BetweenY;}
			else{ToY=1;}
			i=BetweenY>>1;
			if(BetweenY!=(i+i))
				{
					for(j=0;j<i;j++)
						{
							MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_BeginX;
							if(ToY>0)
								{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]+2;}
							else{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);}
						}
					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]=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);
				}
			else{
					for(j=0;j<i;j++)
		 				{
							MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_BeginX;
							if(ToY>0)
								{MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]+2;}
							else{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);}
						}
					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);
				}
		}
	if(BetweenY==0)
		{
			int		ToX;
			if(BetweenX<0){ToX=-1;BetweenX=-BetweenX;}
			else{ToX=1;}
			for(i=0;i<BetweenX;i++)
				{
					if(ToX>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_BeginY;
					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);
		}
	if(BetweenX<0){ForwardX=-1;BetweenX=-BetweenX;}
	else{ForwardX=1;}
	if(BetweenY<0){ForwardY=-1;BetweenY=-BetweenY;}
	else{ForwardY=1;}
	MARCH_TrackNum=0;
	MARCH_LineTrack[MARCH_TrackNum][COORD_X]=MARCH_BeginX;
	MARCH_LineTrack[MARCH_TrackNum][COORD_Y]=MARCH_BeginY;
	MARCH_TrackNum++;
	if(MARCH_TrackNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
	if(BetweenY>=(BetweenX+BetweenX))
		{
			i=BetweenX+BetweenX;
			j=BetweenY-i;
			Y_Num=0;
			while(j>0)
				{
					Y_Num++;
					j=j-i;
				}
			Y_Num--;
			i=0;
			k=0;
			while((i<=BetweenX)&&(k<=BetweenY))
				{
					for(j=1;j<=Y_Num;j++)
						{
							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]+2;}
							else{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_X]==MARCH_EndX)||(MARCH_LineTrack[MARCH_TrackNum-1][COORD_Y]==MARCH_EndY))
								{break;}
							k++;
							k++;
						}
					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++;
									k++;
									k++;
									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;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -