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

📄 nonplayondecision.cpp

📁 RoboCup 2D 仿真组老牌强队Mersad 2005的完整源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		break;	case PM_OFFSIDE:	case PM_FREE_KICK_FAULT:	case PM_CATCH_FAULT:	case PM_BACK_PASS:#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE6" << endl;#endif		if (worldModel->getBody().isGoalie())		{			advancedActions[GOALIE_POSITIONING_NUM]->getValue(library);			advancedActions[GOALIE_POSITIONING_NUM]->execute(form, library);			command = advancedActions[GOALIE_POSITIONING_NUM]->getCommand();			return;		}		else		{				advancedActions[DEFENSE_NUM]->getValue(library);			advancedActions[DEFENSE_NUM]->execute(form, library);			command = advancedActions[DEFENSE_NUM]->getCommand();			return;		}		break;	case PM_OFFSIDE_OPP:	case PM_FREE_KICK_FAULT_OPP:	case PM_CATCH_FAULT_OPP:	case PM_BACK_PASS_OPP:#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE7" << endl;#endif		selectBallKickerSay(positions, form);		if (selectBallKicker(positions) == 1)		{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE7 1" << endl;#endif			if (worldModel->getBody().isGoalie())			{				advancedActions[GOALIE_POSITIONING_NUM]->getValue(library);				advancedActions[GOALIE_POSITIONING_NUM]->execute(form, library);				command = advancedActions[GOALIE_POSITIONING_NUM]->getCommand();				return;			}			else			{					advancedActions[OFFENSE_NUM]->getValue(library);				advancedActions[OFFENSE_NUM]->execute(form, library);				command = advancedActions[OFFENSE_NUM]->getCommand(); 				return;			}		}		else		{			form.headForm.tnMode = TNM_LOOK_CAREFULLY;#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE7 2" << endl;#endif			advancedActions[GOTOKICK_NUM]->getValue(library);			if (dynamic_cast<NonPlayOnGotoKick *>(advancedActions[GOTOKICK_NUM])					->getStatus() == 1)			{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE7 3" << endl;#endif				advancedActions[GOTOKICK_NUM]->execute(form, library);				command = advancedActions[GOTOKICK_NUM]->getCommand();				return;			}			else if (backBallChoice() == 1)			{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE7 4" << endl;#endif				// No need to the following line				if (advancedActions[GOTOKICK_NUM]->getCommand())					delete advancedActions[GOTOKICK_NUM]->getCommand();				command = new EmptyCommand(AT_NONE);				return;			}			else			{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE7 5" << endl;#endif				// No need to the following line				if (advancedActions[GOTOKICK_NUM]->getCommand())					delete advancedActions[GOTOKICK_NUM]->getCommand();				advancedActions[BACKBALL_NUM]->getValue(library);				advancedActions[BACKBALL_NUM]->execute(form, library);				return;			}		}		break;			case PM_GOAL_KICK:#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE8" << endl;#endif		if (worldModel->getBody().isGoalie())		{			form.headForm.tnMode = TNM_LOOK_CAREFULLY;			if (worldModel->getBall().getPos().getY() > 0)				form.sayForm.attentionNum = 7;			else				form.sayForm.attentionNum = 8;#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE8 1" << endl;#endif			if (worldModel->getVirtualPlayMode() == VPM_GOAL_KICK_TAKEN)			{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE8 1 0,5" << endl;#endif				advancedActions[GOALIE_POSITIONING_NUM]->getValue(library);				advancedActions[GOALIE_POSITIONING_NUM]->execute(form, library);				command = advancedActions[GOALIE_POSITIONING_NUM]->getCommand();				return;			}						advancedActions[GOTOKICK_NUM]->getValue(library);			if (dynamic_cast<NonPlayOnGotoKick *>(advancedActions[GOTOKICK_NUM])					->getStatus() == 1)			{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE8 1 1" << endl;#endif				advancedActions[GOTOKICK_NUM]->execute(form, library);				command = advancedActions[GOTOKICK_NUM]->getCommand();				return;			}			else if (backBallChoice() == 1)			{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE8 1 2" << endl;#endif				// No need to the following line				if (advancedActions[GOTOKICK_NUM]->getCommand())					delete advancedActions[GOTOKICK_NUM]->getCommand();				quickLevels[PASS_NUM] = 1;				quickLevels[SHOOT_NUM] = 1;				form.sayForm.reset();				BodyDecision::decide(quickLevel, form, library);				return;			}			else			{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE8 1 3" << endl;#endif				// No need to the following line				if (advancedActions[GOTOKICK_NUM]->getCommand())					delete advancedActions[GOTOKICK_NUM]->getCommand();				advancedActions[BACKBALL_NUM]->getValue(library);				advancedActions[BACKBALL_NUM]->execute(form, library);				command = advancedActions[BACKBALL_NUM]->getCommand();				return;			}		}		else		{			if (worldModel->getBall().getPos().getY() > 0)			{				if (worldModel->getBody().getUniNum() == 7)				{					if (worldModel->getVirtualPlayMode() == VPM_GOAL_KICK_TAKEN)						;//						form.sayForm.reset();					else						form.sayForm.attentionNum = 1;				}				else				{					if (worldModel->getVirtualPlayMode() == VPM_GOAL_KICK_TAKEN)						;//						form.sayForm.reset();					else						form.sayForm.attentionNum = 1;				}			}			else			{				if (worldModel->getBody().getUniNum() == 8)				{					if (worldModel->getVirtualPlayMode() == VPM_GOAL_KICK_TAKEN)						;//						form.sayForm.reset();					else						form.sayForm.attentionNum = 1;				}				else				{					if (worldModel->getVirtualPlayMode() == VPM_GOAL_KICK_TAKEN)						;//						form.sayForm.reset();					else						form.sayForm.attentionNum = 1;				}			}			advancedActions[GOALIE_CATCH_OFFENSE_NUM]->getValue(library);			advancedActions[GOALIE_CATCH_OFFENSE_NUM]->				execute(form, library);			command = advancedActions[GOALIE_CATCH_OFFENSE_NUM]->				getCommand();			return;		}		break;			case PM_GOAL_KICK_OPP:#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE9" << endl;#endif		if (worldModel->getBall().getVel().getMagnitude() < 0.1)		{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE9 1" << endl;#endif			if (worldModel->getBody().isGoalie())			{				advancedActions[GOALIE_POSITIONING_NUM]->getValue(library);				advancedActions[GOALIE_POSITIONING_NUM]->execute(form, library);				command = advancedActions[GOALIE_POSITIONING_NUM]->getCommand();				return;			}			else			{				advancedActions[DEFENSE_NUM]->getValue(library);				advancedActions[DEFENSE_NUM]->execute(form, library);				command = advancedActions[DEFENSE_NUM]->getCommand();				return;			}		}		else		{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE9 2" << endl;#endif			if (worldModel->getCurInterCalculate().existFastestTmmPlayer() &&				worldModel->getCurInterCalculate().getFastestTmmPlayer().isBody())			{				Point interceptStandPoint;				if (abs(worldModel->getBall().getVel().getX()) <= EPS)				{					if (worldModel->getBall().getVel().getY() >= 0)						interceptStandPoint = Point(worldModel->getBall().getPos().getX(), 20);					else						interceptStandPoint = Point(worldModel->getBall().getPos().getX(), -20);				}				else if (abs(worldModel->getBall().getVel().getY()) <= EPS)				{					interceptStandPoint = Point(35.5, worldModel->getBall().getPos().getY());				}				else				{					float m, b, t;					m = worldModel->getBall().getVel().getY() /						worldModel->getBall().getVel().getX();					b = worldModel->getBall().getPos().getY() -						worldModel->getBall().getPos().getX() * m;					t = m * 35.5 + b;					if (abs(t) <= 20.5)					{						interceptStandPoint = Point(35.5, t);					}					else					{						if (worldModel->getBall().getVel().getY() >= 0)						{							t = (20.5 - b) / m;							if (t > 52)								t = 52;							interceptStandPoint = Point(t, 20.5);						}						else						{							t = (-20.5 - b) / m;							if (t > 52)								t = 52;							interceptStandPoint = Point(t, -20.5);						}					}									}								command = ForbiddenAreaGotoPoint(AT_INTERCEPT, interceptStandPoint,				   	36, -20, 20, worldModel->getBody()).getCommand();				return;/*//TODO:			advancedActions[INTERCEPT_NUM].setForbiddenArea(OPPPENALTYAREA);				advancedActions[INTERCEPT_NUM]->getValue();				advancedActions[INTERCEPT_NUM]->execute(sayFlags);				command = advancedActions[INTERCEPT_NUM]->getCommand();				return advancedActions[INTERCEPT_NUM]->getType();*/			}		}		break;	case PM_TIME_UP:	case PM_TIME_UP_WITHOUT_A_TEAM:#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE-1 TIMEOVER(CHECK IT)" << endl;#endif		command = new EmptyCommand(AT_NONE);		return;		break;		default:#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE0 default(CHECK IT)" << endl;#endif			command = new EmptyCommand(AT_NONE);			return;	}		return;}int NonPlayOnDecision::selectBallKicker(Point positions[11]){	float nearestDistance;	unsigned i;	unsigned actualPlayModeStayCycles,actualPlayModeRemainCycles;	Point myHome;	Vector meBall;	Vector homeBall;#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "selectKicker : start" << endl;#endif	if (worldModel->getBody().isGoalie() &&		worldModel->getPlayMode() == PM_FREE_KICK &&		worldModel->getVirtualPlayMode() == VPM_GOALIE_CATCH_BALL)		return 2; 	if (!worldModel->getBody().isGoalie() &&		worldModel->getPlayMode() == PM_FREE_KICK &&		worldModel->getVirtualPlayMode() == VPM_GOALIE_CATCH_BALL)		return 1;	if (worldModel->getBody().isGoalie() &&		worldModel->getPlayMode() == PM_GOAL_KICK &&		worldModel->getVirtualPlayMode() != VPM_GOAL_KICK_TAKEN)		return 2; 	if (!worldModel->getBody().isGoalie() &&		worldModel->getPlayMode() == PM_GOAL_KICK &&		worldModel->getVirtualPlayMode() != VPM_GOAL_KICK_TAKEN)		return 1;	if (worldModel->getBody().isGoalie())		return 1;	if (worldModel->getPlayMode() == PM_CORNER_KICK)	{#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKicker : corner kick" << endl;#endif		if (worldModel->getBall().getPos().getY() > 0)		{			if (worldModel->getBody().getUniNum() == 10)				return 2;			else				return 1;		}		else		{			if (worldModel->getBody().getUniNum() == 11)				return 2;			else				return 1;		}	}	if (worldModel->getPlayMode() == PM_BEFORE_KICK_OFF ||		worldModel->getPlayMode() == PM_GOAL ||		worldModel->getPlayMode() == PM_GOAL_OPP ||		worldModel->getPlayMode() == PM_KICK_OFF ||		worldModel->getPlayMode() == PM_KICK_OFF_OPP)	{#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKicker : simple" << endl;#endif		nearestDistance = 10000;		for (i = 0; i < FULL_PLAYERS_NUM; i++)		{			if (i + 1 == GOALIE_UNIFORM_NUM) continue; // Goalie

⌨️ 快捷键说明

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