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

📄 nonplayondecision.cpp

📁 mersad源码 03年robocup 季军 可以研究一下大家
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/* *  Copyright 2002-2004, Mersad Team, Allame Helli High School (NODET). * *  This program is free software, you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *  GNU Library General Public License for more details. * *  Created by: Mohammad Salehe *  Released on Friday 1 April 2005 by Mersad RoboCup Team. *  For more information please read README file.*/#include <cassert>#include <math.h>#include <Logger.h>#include <Types.h>#include <Command.h>#include <BasicTurn.h>#include <BasicKick.h>#include <BasicDash.h>#include <Pass.h>#include <Shoot.h>#include <NonPlayOn.h>#include <Offense.h>#include <Defense.h>#include <NonPlayOnDecision.h>#include <Intercept.h>#include <GoaliePositioning.h>using namespace std;#define NON_PLAY_ON_DECISION_LOG1#define NON_PLAY_ON_DECISION_LOG2#define GOALIE_UNIFORM_NUM 1#define FREE_KICK_ADVICER 5#define GOTOKICK_NUM 0#define BACKBALL_NUM 1#define BEFOREKICKOFF_NUM 2#define DEFENSE_NUM 3#define OFFENSE_NUM 4 #define PASS_NUM 5#define SHOOT_NUM 6#define INTERCEPT_NUM 7#define GOALIE_POSITIONING_NUM 8#define GOALIE_CATCH_OFFENSE_NUM 9// NOTE : All of player numbers in this file are Uniform Numbers (not Post Numbers)NonPlayOnDecision::NonPlayOnDecision(const WorldModel *worldModel,				const Positioning &positioning, SayDecisionFlags &sayFlags,				TurnNeckMode &turnNeckMode):				BodyDecision(worldModel, sayFlags, turnNeckMode){	addAdvancedAction(new NonPlayOnGotoKick(worldModel), //0		AdvancedActionWeights(0, 1, 1), 1);	addAdvancedAction(new NonPlayOnBackBall(worldModel), //1		AdvancedActionWeights(0, 1, 1), 1);	addAdvancedAction(new NonPlayOnBeforeKickOff(worldModel), //2		AdvancedActionWeights(0, 1, 1), 1);	addAdvancedAction(new Defense(worldModel, positioning), //3		AdvancedActionWeights(0, 1, 1), 1);	addAdvancedAction(new Offense(worldModel, positioning), //4		AdvancedActionWeights(0, 1, 1), 1);	addAdvancedAction(new Pass(worldModel), //5		AdvancedActionWeights(0, 1, 1), 1);	addAdvancedAction(new Shoot(worldModel), //6		AdvancedActionWeights(0, 1, 1), 1);	addAdvancedAction(new Intercept(worldModel), //7		AdvancedActionWeights(0, 1, 1), 1);	addAdvancedAction(new GoaliePositioning(worldModel), //8		AdvancedActionWeights(0, 1, 1), 0);	addAdvancedAction(new GoalieCatchOffense(worldModel), //9		AdvancedActionWeights(0, 1, 1), 0);	dynamic_cast<Pass *>(advancedActions[PASS_NUM])->			setCurKickCalculate(&worldModel->getCurKickCalculate());}NonPlayOnDecision::~NonPlayOnDecision(){}DecideType NonPlayOnDecision::decide(int quickLevel){	Point positions[11];#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NonPlayOnDecision" << endl;#endif	turnNeckMode = TNM_LOOK_NORMALLY;	sayFlags.reset();	if (DefenseOffenseChoice() == 0)	{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NonPlayOnDecision Returning empty" << endl;#endif		command = new EmptyCommand();		return DT_NONE;	}	resetQuickLevels();	command = NULL;		getCurrentHomePoints(positions);	switch (worldModel->getPlayMode())	{	case PM_BEFORE_KICK_OFF:	case PM_GOAL:	case PM_GOAL_OPP:#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE1" << endl;#endif		if (selectBallKicker(positions) == 1)			dynamic_cast<NonPlayOnBeforeKickOff *>(advancedActions[BEFOREKICKOFF_NUM])->				setIsKicker(false);		else			dynamic_cast<NonPlayOnBeforeKickOff *>(advancedActions[BEFOREKICKOFF_NUM])->				setIsKicker(true);		advancedActions[BEFOREKICKOFF_NUM]->getValue();		advancedActions[BEFOREKICKOFF_NUM]->execute(sayFlags);		command = advancedActions[BEFOREKICKOFF_NUM]->getCommand();		return advancedActions[BEFOREKICKOFF_NUM]->getType();		break;			case PM_KICK_OFF:  #ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE2" << endl;#endif		if (selectBallKicker(positions) == 1)		{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE2 1" << endl;#endif			if (selectBallKicker(positions) == 1)				dynamic_cast<NonPlayOnBeforeKickOff *>(advancedActions[BEFOREKICKOFF_NUM])->					setIsKicker(false);			else				dynamic_cast<NonPlayOnBeforeKickOff *>(advancedActions[BEFOREKICKOFF_NUM])->					setIsKicker(true);			advancedActions[BEFOREKICKOFF_NUM]->getValue();			advancedActions[BEFOREKICKOFF_NUM]->execute(sayFlags);			command = advancedActions[BEFOREKICKOFF_NUM]->getCommand();			return advancedActions[BEFOREKICKOFF_NUM]->getType();		}		else		{			turnNeckMode = TNM_LOOK_CAREFULLY;#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE2 2" << endl;#endif			advancedActions[GOTOKICK_NUM]->getValue();			if (dynamic_cast<NonPlayOnGotoKick *>(advancedActions[GOTOKICK_NUM])					->getStatus() == 1)			{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE2 3" << endl;#endif				advancedActions[GOTOKICK_NUM]->execute(sayFlags);				command = advancedActions[GOTOKICK_NUM]->getCommand();				return advancedActions[GOTOKICK_NUM]->getType();			}			else if (backBallChoice() == 1)			{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE2 4" << 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;				sayFlags.reset();				return BodyDecision::decide(quickLevel);			}			else			{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE2 5" << endl;#endif				// No need to the following line				if (advancedActions[GOTOKICK_NUM]->getCommand())					delete advancedActions[GOTOKICK_NUM]->getCommand();				advancedActions[BACKBALL_NUM]->getValue();				advancedActions[BACKBALL_NUM]->execute(sayFlags);				command = advancedActions[BACKBALL_NUM]->getCommand();				return advancedActions[BACKBALL_NUM]->getType();			}		}		break;	case PM_KICK_OFF_OPP:#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE3" << endl;#endif		if (selectBallKicker(positions) == 1)			dynamic_cast<NonPlayOnBeforeKickOff *>(advancedActions[BEFOREKICKOFF_NUM])->				setIsKicker(false);		else			dynamic_cast<NonPlayOnBeforeKickOff *>(advancedActions[BEFOREKICKOFF_NUM])->				setIsKicker(true);		advancedActions[BEFOREKICKOFF_NUM]->getValue();		advancedActions[BEFOREKICKOFF_NUM]->execute(sayFlags);		command = advancedActions[BEFOREKICKOFF_NUM]->getCommand();		return advancedActions[BEFOREKICKOFF_NUM]->getType();		break;	case PM_FREE_KICK:	case PM_KICK_IN:	case PM_CORNER_KICK:#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE4" << endl;#endif		selectBallKickerSay(positions);		if (selectBallKicker(positions) == 1)		{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE4 1" << endl;#endif			if (worldModel->getBody().isGoalie())			{				advancedActions[GOALIE_POSITIONING_NUM]->getValue();				advancedActions[GOALIE_POSITIONING_NUM]->execute(sayFlags);				command = advancedActions[GOALIE_POSITIONING_NUM]->getCommand();				return advancedActions[GOALIE_POSITIONING_NUM]->getType();			}			else			{					if (!worldModel->getBody().isGoalie() &&					worldModel->getPlayMode() == PM_FREE_KICK &&					worldModel->getVirtualPlayMode() == VPM_GOALIE_CATCH_BALL)				{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE4 1 2" << endl;#endif					advancedActions[GOALIE_CATCH_OFFENSE_NUM]->getValue();					advancedActions[GOALIE_CATCH_OFFENSE_NUM]->						execute(sayFlags);					command = advancedActions[GOALIE_CATCH_OFFENSE_NUM]->						getCommand();					return advancedActions[GOALIE_CATCH_OFFENSE_NUM]->getType();				}				advancedActions[OFFENSE_NUM]->getValue();				advancedActions[OFFENSE_NUM]->execute(sayFlags);				command = advancedActions[OFFENSE_NUM]->getCommand();				return advancedActions[OFFENSE_NUM]->getType();			}		}		else		{			turnNeckMode = TNM_LOOK_CAREFULLY;#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE4 2" << endl;#endif			if (worldModel->getBody().isGoalie() &&				worldModel->getPlayMode() == PM_FREE_KICK &&				worldModel->getVirtualPlayMode() == VPM_GOALIE_CATCH_BALL)			{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE4 3 1" << endl;#endif				if (backBallChoice() == 1)				{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE4 3 1 1" << endl;#endif					advancedActions[GOALIE_CATCH_OFFENSE_NUM]->getValue();					advancedActions[GOALIE_CATCH_OFFENSE_NUM]->execute(sayFlags);					if (dynamic_cast<GoalieCatchOffense *>							(advancedActions[GOALIE_CATCH_OFFENSE_NUM])->							getStatus() == 1)					{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE4 3.2" << endl;#endif						command = advancedActions[GOALIE_CATCH_OFFENSE_NUM]->							getCommand();						return advancedActions[GOALIE_CATCH_OFFENSE_NUM]->							getType();					}					else					{						if (worldModel->getPlayMode() == PM_FREE_KICK &&							worldModel->getVirtualPlayMode() == 							VPM_GOALIE_CATCH_BALL)						{							Point virtualPassPoint(-33, 28);														LOG << "NPP FKick to " << virtualPassPoint << endl;							command = FastKickToPoint(virtualPassPoint,							worldModel->getBall(), worldModel->getBody()).								getCommand();							LOG << "NPO cmd:" << command->toString() << endl;							sayFlags.interceptNum = 6;							sayFlags.beforePassSay = true;							sayFlags.freeKickSay = false;							return DT_PASS;						}						delete advancedActions[GOALIE_CATCH_OFFENSE_NUM]->getCommand();						quickLevels[PASS_NUM] = 1;						sayFlags.reset();						return BodyDecision::decide(quickLevel);					}				}				else				{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE4 3 1 2" << endl;#endif					advancedActions[BACKBALL_NUM]->getValue();					advancedActions[BACKBALL_NUM]->execute(sayFlags);					command = advancedActions[BACKBALL_NUM]->getCommand();					return advancedActions[BACKBALL_NUM]->getType();				}				break;			}			advancedActions[GOTOKICK_NUM]->getValue();			if (dynamic_cast<NonPlayOnGotoKick *>(advancedActions[GOTOKICK_NUM])					->getStatus() == 1)			{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE4 3" << endl;#endif				advancedActions[GOTOKICK_NUM]->execute(sayFlags);				command = advancedActions[GOTOKICK_NUM]->getCommand();				return advancedActions[GOTOKICK_NUM]->getType();			}			else if (backBallChoice() == 1)			{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE4 4" << 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;				if (worldModel->getPlayMode() == PM_FREE_KICK &&					worldModel->getVirtualPlayMode() == VPM_INDIRECT_FREE_KICK)				{					quickLevels[SHOOT_NUM] = -1;				}				sayFlags.reset();				return BodyDecision::decide(quickLevel);			}			else			{#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE4 5" << endl;#endif				// No need to the following line				if (advancedActions[GOTOKICK_NUM]->getCommand())					delete advancedActions[GOTOKICK_NUM]->getCommand();				advancedActions[BACKBALL_NUM]->getValue();				advancedActions[BACKBALL_NUM]->execute(sayFlags);				command = advancedActions[BACKBALL_NUM]->getCommand();				return advancedActions[BACKBALL_NUM]->getType();			}		}		break;	case PM_FREE_KICK_OPP:	case PM_KICK_IN_OPP:	case PM_CORNER_KICK_OPP:#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE5" << endl;#endif		if (worldModel->getBody().isGoalie())		{			advancedActions[GOALIE_POSITIONING_NUM]->getValue();			advancedActions[GOALIE_POSITIONING_NUM]->execute(sayFlags);			command = advancedActions[GOALIE_POSITIONING_NUM]->getCommand();			return advancedActions[GOALIE_POSITIONING_NUM]->getType();		}		else		{				advancedActions[DEFENSE_NUM]->getValue();			advancedActions[DEFENSE_NUM]->execute(sayFlags);			command = advancedActions[DEFENSE_NUM]->getCommand();			return advancedActions[DEFENSE_NUM]->getType();		}		break;

⌨️ 快捷键说明

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