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

📄 march_n.cpp

📁 网页游戏赤壁
💻 CPP
📖 第 1 页 / 共 5 页
字号:
											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];
															Last_Forward=Temp_Forward+4-1;
															if(Last_Forward>7){Last_Forward=Last_Forward-8;}
															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];
																			Last_Forward=Temp_Forward+4-1;
																			if(Last_Forward>7){Last_Forward=Last_Forward-8;}
																			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];
																	Last_Forward=Temp_Forward+4-1;
																	if(Last_Forward>7){Last_Forward=Last_Forward-8;}
																	return(MARCH_OK);
																}
														}
												}
										}
									else{
											MARCH_NextPoint[COORD_X]=Temp_Next[COORD_X];
											MARCH_NextPoint[COORD_Y]=Temp_Next[COORD_Y];
											Last_Forward=Temp_Forward+4-1;
											if(Last_Forward>7){Last_Forward=Last_Forward-8;}
											return(MARCH_OK);
										}
								}
						}

				}
			if(MARCH_Aspect==MARCH_GO_BY_RIGHT)
				{
					Temp_Forward++;
					if(Temp_Forward>=8){Temp_Forward=0;}
					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);}
											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];
															Last_Forward=Temp_Forward+4+1;
															if(Last_Forward>7){Last_Forward=Last_Forward-8;}
															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];
																			Last_Forward=Temp_Forward+4+1;
																			if(Last_Forward>7){Last_Forward=Last_Forward-8;}
																			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];
																	Last_Forward=Temp_Forward+4+1;
																	if(Last_Forward>7){Last_Forward=Last_Forward-8;}
																	return(MARCH_OK);
																}
														}
												}
										}
									else{
											MARCH_NextPoint[COORD_X]=Temp_Next[COORD_X];
											MARCH_NextPoint[COORD_Y]=Temp_Next[COORD_Y];
											Last_Forward=Temp_Forward+4+1;
											if(Last_Forward>7){Last_Forward=Last_Forward-8;}
											return(MARCH_OK);
										}
								}
						}
				}
		}
}



int		MARCH_StepByStepForward(int	MARCH_BeginX,int	MARCH_BeginY,int	MARCH_EndX,int	MARCH_EndY)
//当给出了起始点和目的地的地址,求出下一步的前进方向
//前进的方向是在返回值中传给调用者的
{
	int		BetweenX,BetweenY;
	int		ForwardX,ForwardY;
	int		i,j;//,k;

	
	BetweenX=MARCH_EndX-MARCH_BeginX;
	BetweenY=MARCH_EndY-MARCH_BeginY;
	if(BetweenX<0){ForwardX=-1;BetweenX=-BetweenX;}
	else{ForwardX=1;}
	if(BetweenY<0){ForwardY=-1;BetweenY=-BetweenY;}
	else{ForwardY=1;}
	if((BetweenX==0)&&(BetweenY==0)){return(MARCH_ERROR_STAY_HERE);}
	if(BetweenX==0)
		{
			if(MARCH_BeginY&0x0001)
				{
					if((BetweenY==1)&&(ForwardY==-1))
						{return(MARCH_LEFT_UP);}
					if((BetweenY>1)&&(ForwardY==-1))
						{return(MARCH_UP);}
					if((BetweenY>1)&&(ForwardY==1))
						{return(MARCH_DOWN);}
					if((BetweenY==1)&&(ForwardY==1))
						{return(MARCH_LEFT_DOWN);}
				}
			else{
					if((BetweenY==1)&&(ForwardY==-1))
						{return(MARCH_RIGHT_UP);}
					if((BetweenY>1)&&(ForwardY==-1))
						{return(MARCH_UP);}
					if((BetweenY>1)&&(ForwardY==1))
						{return(MARCH_DOWN);}
					if((BetweenY==1)&&(ForwardY==1))
						{return(MARCH_RIGHT_DOWN);}

				}
		}
	if(BetweenY==0)
		{
			if(ForwardX==-1){return(MARCH_LEFT);}
			if(ForwardX==1){return(MARCH_RIGHT);}
		}
	if(BetweenX==BetweenY)
		{
			if((ForwardX==1)&&(ForwardY==1)){return(MARCH_RIGHT_DOWN);}
			if((ForwardX==1)&&(ForwardY==-1)){return(MARCH_RIGHT_UP);}
			if((ForwardX==-1)&&(ForwardY==1)){return(MARCH_LEFT_DOWN);}
			if((ForwardX==-1)&&(ForwardY==-1)){return(MARCH_LEFT_UP);}
		}
	if(BetweenY>(BetweenX+BetweenX))
		{
			i=BetweenY-BetweenX-BetweenX;
			if(i>=(BetweenX+BetweenX))
				{
					if(ForwardY==-1){return(MARCH_UP);}
					if(ForwardY==1){return(MARCH_DOWN);}
				}
			else{
					if((ForwardX==1)&&(ForwardY==1)){return(MARCH_RIGHT_DOWN);}
					if((ForwardX==1)&&(ForwardY==-1)){return(MARCH_RIGHT_UP);}
					if((ForwardX==-1)&&(ForwardY==1)){return(MARCH_LEFT_DOWN);}
					if((ForwardX==-1)&&(ForwardY==-1)){return(MARCH_LEFT_UP);}
				}
		}
	else{
			i=BetweenY>>1;
			j=BetweenX-i;
			if(j>=i)
				{
					if(ForwardX==-1){return(MARCH_LEFT);}
					if(ForwardX==1){return(MARCH_RIGHT);}
				}
			else{
					if((ForwardX==1)&&(ForwardY==1)){return(MARCH_RIGHT_DOWN);}
					if((ForwardX==1)&&(ForwardY==-1)){return(MARCH_RIGHT_UP);}
					if((ForwardX==-1)&&(ForwardY==1)){return(MARCH_LEFT_DOWN);}
					if((ForwardX==-1)&&(ForwardY==-1)){return(MARCH_LEFT_UP);}
				}
		}
	return(MARCH_ERROR_FORWARD);
}
	



int	MARCH_OnePeopleFindWay(short	MARCH_FromPlain[2],short	MARCH_ToPlain[2])
// 当给出了进入障碍物的进入点和离开障碍物的离开点后,求出一条绕过障碍物的比较优化的路径
{
	int		GoByLeft[NUMBER_OF_BEND][2];
	int		GoByRight[NUMBER_OF_BEND][2];
	int		GoByLeft_Num;
	int		GoByRight_Num;
	short	MARCH_NextPoint[2];
	int		MARCH_Aspect;
	int		Step_NO1[2];
	short	CurrentPoint[2];
	int		NextStatus;
	int		i;
	int		Between_1;
	int		Between_2;

	memset((void *)GoByLeft,-1,sizeof(GoByLeft));
	memset((void *)GoByRight,-1,sizeof(GoByRight));
	MARCH_NextPoint[COORD_X]=-1;
	MARCH_NextPoint[COORD_Y]=-1;
	GoByLeft_Num=0;
	GoByRight_Num=0;
	GoByLeft[GoByLeft_Num][COORD_X]=(int)MARCH_FromPlain[COORD_X];
	GoByLeft[GoByLeft_Num][COORD_Y]=(int)MARCH_FromPlain[COORD_Y];
	GoByLeft_Num++;
	if(GoByLeft_Num>(NUMBER_OF_BEND-2)){return(MARCH_CAN_NOT_RECEIVE);}
	GoByRight[GoByRight_Num][COORD_X]=(int)MARCH_FromPlain[COORD_X];
	GoByRight[GoByRight_Num][COORD_Y]=(int)MARCH_FromPlain[COORD_Y];
	GoByRight_Num++;
	if(GoByRight_Num>(NUMBER_OF_BEND-2)){return(MARCH_CAN_NOT_RECEIVE);}
	CurrentPoint[COORD_X]=MARCH_FromPlain[COORD_X];
	CurrentPoint[COORD_Y]=MARCH_FromPlain[COORD_Y];
	MARCH_Aspect=MARCH_GO_BY_LEFT;
	Step_NO1[COORD_X]=-1;
	Step_NO1[COORD_Y]=-1;
	while(1)
		{
			NextStatus=MARCH_OnePeopleWithCurrent(CurrentPoint,MARCH_NextPoint,MARCH_ToPlain,MARCH_Aspect);
			if((NextStatus==MARCH_ERROR_CAN_NOT_GO)&&(MARCH_Aspect==MARCH_GO_BY_LEFT))
				{
					GoByLeft_Num=-1;
					MARCH_Aspect=MARCH_GO_BY_RIGHT;
					CurrentPoint[COORD_X]=MARCH_FromPlain[COORD_X];
					CurrentPoint[COORD_Y]=MARCH_FromPlain[COORD_Y];
					MARCH_NextPoint[COORD_X]=-1;
					MARCH_NextPoint[COORD_Y]=-1;
					Step_NO1[COORD_X]=-1;
					Step_NO1[COORD_Y]=-1;
					continue;
				}
			if((NextStatus==MARCH_ERROR_CAN_NOT_GO)&&(MARCH_Aspect==MARCH_GO_BY_RIGHT))
				{
					GoByRight_Num=-1;
					break;
				}
			if((NextStatus==MARCH_ERROR_COORD)&&(MARCH_Aspect==MARCH_GO_BY_LEFT))
				{
					GoByLeft_Num=-1;
					MARCH_Aspect=MARCH_GO_BY_RIGHT;
					CurrentPoint[COORD_X]=MARCH_FromPlain[COORD_X];
					CurrentPoint[COORD_Y]=MARCH_FromPlain[COORD_Y];
					MARCH_NextPoint[COORD_X]=-1;
					MARCH_NextPoint[COORD_Y]=-1;
					Step_NO1[COORD_X]=-1;
					Step_NO1[COORD_Y]=-1;
					continue;
				}
			if((NextStatus==MARCH_ERROR_COORD)&&(MARCH_Aspect==MARCH_GO_BY_RIGHT))
				{
					if(GoByLeft_Num<0){return(MARCH_CAN_NOT_RECEIVE);}
					else{
							i=0;
							while((GoByLeft[i][COORD_X]>0)&&(GoByLeft[i][COORD_Y]>0))
								{
									MARCH_Track[MARCH_StepNum][COORD_X]=GoByLeft[i][COORD_X];
									MARCH_Track[MARCH_StepNum][COORD_Y]=GoByLeft[i][COORD_Y];
									MARCH_Track[MARCH_StepNum][LEVEL_NUM]=0;
									i++;
									MARCH_StepNum++;
									if(MARCH_StepNum>NUMBER_OF_TRACK-2){return(MARCH_ERROR_GO_OUT_ARRAY);}
								}
							return(MARCH_CAN_RECEIVE);
						}
				}
			if(MARCH_NextPoint[COORD_Y]&0x0001)
				{
					Between_1=MARCH_NextPoint[COORD_X]-MARCH_ToPlain[COORD_X];
					Between_2=MARCH_NextPoint[COORD_Y]-MARCH_ToPlain[COORD_Y];
//					if(Between_1<0){Between_1=-Between_1;}
					if(Between_2<0){Between_2=-Between_2;}
					if(((MARCH_NextPoint[COORD_X]==MARCH_ToPlain[C

⌨️ 快捷键说明

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