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

📄 march_n.cpp

📁 网页游戏赤壁
💻 CPP
📖 第 1 页 / 共 5 页
字号:
					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 + -