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

📄 groupworks.cpp

📁 mersad源码 03年robocup 季军 可以研究一下大家
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		return;	}	bool setFlag = false;	LOG << "suggested interceptNum: " << uniNum << endl;	if (sender == interceptNum ||		sender == worldModel->getBody().getUniNum())		setFlag = true;	else if (!uniNum)		return; // No suggestion.	else if (uniNum == worldModel->getBody().getUniNum())		setFlag = true;	else if (worldModel->getFullPlayer(TID_TEAMMATE, uniNum - 1).getPosDeviation() > 2 ||			 worldModel->getFullPlayer(TID_TEAMMATE, interceptNum - 1).getPosDeviation() > 2)		setFlag = true;	if (setFlag)	{		if (uniNum <= 11) // GoToBall Mode		{			interceptNum = uniNum;			interceptBlock = false;			interceptSay = true;		}		else // Block Mode		{			interceptNum = uniNum - 11;			interceptBlock = true;			interceptSay = true;		}		LOG << "setting interceptNum (Bl, Sy, Pn):"			<< " " << interceptBlock			<< " " << interceptSay			<< " " << interceptNum << endl;	}}WithoutBallSelection GroupWorks::getWithoutBallSelection(		DecideType lastWithBallDecide) const{	WithoutBallSelection selection;	if (isLastWithBallDecideValid() &&		lastWithBallDecide == DT_SRPDRIBBLE)			selection = WOBS_INTERCEPT;	else	{		if (interceptNum == worldModel->getBody().getUniNum())		{			if (interceptBlock)				selection = WOBS_BLOCK;			else   				selection = WOBS_INTERCEPT;		}		else			selection = WOBS_POSITIONING;		if (!getChangeInterceptNumPermission())		{			LOG << "GroupWorks::getWithoutBallSelection > return: "				<< selection << endl;			return selection;		}		if (selection == WOBS_POSITIONING && 			(worldModel->getBallStatus() == BS_FREE_BALL_BODY /*||			worldModel->getBallStatus() == BS_FREE_BALL_BODY_TMM*/))			selection = WOBS_INTERCEPT; 		if (selection == WOBS_INTERCEPT)			{			if (worldModel->getBallStatus() == BS_KICKABLE_OPP || 				worldModel->getBallStatus() == BS_FREE_BALL_OPP)				selection = WOBS_BLOCK;					if (worldModel->getBody().getPostNum() <= 5 ||				worldModel->getBody().getPostNum() == 8)				if (worldModel->getBallStatus() == BS_FREE_BALL_BODY_OPP ||					 worldModel->getBallStatus() == BS_FREE_BALL_TMM_OPP)					selection = WOBS_BLOCK;		}		LOG << "SALAM man asabaniam : " << (bool)(worldModel->getBallStatus() 			== BS_FREE_BALL_TMM_OPP) << endl;		if (selection == WOBS_POSITIONING &&			(worldModel->getBody().getPostNum() <= 5 ||				(worldModel->getBody().getPostNum() == 8 && worldModel->getBall().getPos().getX() < 5)))		{			if (worldModel->getBallStatus() == BS_KICKABLE_OPP || 				worldModel->getBallStatus() == BS_FREE_BALL_OPP ||				worldModel->getBallStatus() == BS_FREE_BALL_BODY_OPP ||				worldModel->getBallStatus() == BS_FREE_BALL_TMM_OPP)			{				float homeDeltaX = worldModel->getBall().getPos().getX() - 								positioning.getHomePoint(								worldModel->getBody().getUniNum()).x;											float homeDeltaY = worldModel->getBall().getPos().getY() - 								positioning.getHomePoint(								worldModel->getBody().getUniNum()).y;							LOG << "Intelligent Section of GrourWorks :-----------------------------------" << endl;				LOG << "DeltaX : " << homeDeltaX << endl;				LOG << "DeltaY : " << homeDeltaY << endl;				LOG << "----------------------------------------------------------------------" << endl;							if (worldModel->getBody().getPostNum() == 2)					if (homeDeltaY < 6 && (homeDeltaX < 8 || 							worldModel->getBody().getPos().getX() > 							worldModel->getBall().getPos().getX()))					{						LOG << "intelligent su.. " << endl;								selection = WOBS_BLOCK;					}				if (worldModel->getBody().getPostNum() == 3)					if (fabs(homeDeltaY) < 6 && (homeDeltaX < 6 || 							worldModel->getBody().getPos().getX() > 							worldModel->getBall().getPos().getX()))					{						LOG << "intelligent su.. " << endl;								selection = WOBS_BLOCK;					}				if (worldModel->getBody().getPostNum() == 4)					if (fabs(homeDeltaY) < 6 && (homeDeltaX < 6 || 							worldModel->getBody().getPos().getX() > 							worldModel->getBall().getPos().getX()))					{						LOG << "intelligent su.. " << endl;								selection = WOBS_BLOCK;					}				if (worldModel->getBody().getPostNum() == 5)					if (homeDeltaY > -6 && (homeDeltaX < 8 || 							worldModel->getBody().getPos().getX() > 							worldModel->getBall().getPos().getX()))					{						LOG << "intelligent su.. " << endl;								selection = WOBS_BLOCK;					}				if (worldModel->getBody().getPostNum() == 8)					if (fabs(homeDeltaY) < 12 && (homeDeltaX < 6 || 							worldModel->getBody().getPos().getX() > 							worldModel->getBall().getPos().getX()))					{						LOG << "intelligent su.. " << endl;								selection = WOBS_BLOCK;					}			}		}	}//////////////////////////BLOCK FOR 6 & 7 : begin	if (selection == WOBS_POSITIONING &&		(worldModel->getBody().getPostNum() == 6 ||			worldModel->getBody().getPostNum() == 7))	{		if (worldModel->getBallStatus() == BS_KICKABLE_OPP || 			worldModel->getBallStatus() == BS_FREE_BALL_OPP ||			worldModel->getBallStatus() == BS_FREE_BALL_BODY_OPP ||			worldModel->getBallStatus() == BS_FREE_BALL_TMM_OPP)		{			Point localHomePoint;			localHomePoint = positioning.getHomePoint(							worldModel->getBody().getUniNum());			float homeDeltaX = worldModel->getBall().getPos().getX() - 							localHomePoint.x;									float homeDeltaY = worldModel->getBall().getPos().getY() - 							localHomePoint.y;						LOG << "Intelligent Section of GrourWorks :-----------------------------------" << endl;			LOG << "DeltaX : " << homeDeltaX << endl;			LOG << "DeltaY : " << homeDeltaY << endl;			LOG << "----------------------------------------------------------------------" << endl;			if (worldModel->getBody().getPostNum() == 6 && 				worldModel->getBall().getPos().getY() > 4.5 && 				homeDeltaX > -10 && 				(localHomePoint.x - worldModel->getBody().getPos().getX()) > -14							&& homeDeltaY > -10)			{				LOG << "intelligent su.. " << endl;						selection = WOBS_BLOCK;			}			if (worldModel->getBody().getPostNum() == 7 && 				worldModel->getBall().getPos().getY() < -4.5 && 				homeDeltaX > -10 && 				(localHomePoint.x - worldModel->getBody().getPos().getX()) > -14				&& homeDeltaY > -10)										{				LOG << "intelligent su.. " << endl;						selection = WOBS_BLOCK;			}		}	}//////////////////////////BLOCK FOR 6 & 7 : end	LOG << "GroupWorks::getWithoutBallSelection > return: "		<< selection << endl;	return selection;}unsigned GroupWorks::getInterceptNumForSay(){	if (interceptNum == 0)		return 0;	if ((interceptNum == worldModel->getBody().getUniNum() ||		 worldModel->getFullPlayer(TID_TEAMMATE, interceptNum - 1).		 		getPosDeviation() < 2) &&		worldModel->getBall().getPosDeviation() < 2 && interceptSay)	{		if (interceptBlock)			return interceptNum + 11; // It means Block Mode		else			return interceptNum;	}	return  0; // I reset it because I am not sure.}bool GroupWorks::getChangeInterceptNumPermission() const{	if (worldModel->getCurTime() - lastPassHearTime > 3 ||		interceptNum == 0)		return true;	return false;}bool GroupWorks::isLastWithBallDecideValid() const{	return lastWithBallDecideValidFlag;}void GroupWorks::setLastWithBallDecideValid(bool lastWithBallDecideValidFlagArg){	lastWithBallDecideValidFlag = lastWithBallDecideValidFlagArg;}void GroupWorks::checkForLastWithBallDecideValid(){	if (worldModel->getBallStatus() == BS_KICKABLE_TMM ||		worldModel->getBallStatus() == BS_KICKABLE_OPP ||		worldModel->getBallStatus() == BS_KICKABLE_TMM_OPP)		setLastWithBallDecideValid(false);}void GroupWorks::suggestPassSayManager(){	LOG << "GroupWorks::suggestPassSayManager" << endl;	turnNeckMode = TNM_LOOK_NORMALLY_TO_BALL;	sayFlags.attentionNum = hearedRequestPassSender;	if (worldModel->getTimer().now() > ZERO_QUICK_LEVEL_MS ||		worldModel->getCurTime() - worldModel->getBall().getSeeTime() > 2)	{		LOG << "Not enough time or informations." << endl;		return; // my informations or my time are not enough.	}	const Player &kickPlayer = worldModel->getNearestTmmToBall();	virtualKickCalc.update(worldModel, kickPlayer);	float value = virtualPass.getValue(kickPlayer);	if (value <= -50 || value == AD_MIN_VALUE)	{		LOG << "There is no good pass." << endl;		return;	}	sayFlags.suggestPassSay = true;	sayFlags.passDir = virtualPass.getPassInterCalc()->			getFirstBall().getVel().getDirection();	sayFlags.passSpeed = virtualPass.getPassInterCalc()->			getFirstBall().getVel().getMagnitude();	sayFlags.passWeight = value;	sayFlags.passPlayerNum = virtualPass.getPassPlayer()->getUniNum();	LOG << "VirtualPass:" << endl		<< "\tPlayer: " << virtualPass.getPassPlayer()->getTeamId()		<< " " << virtualPass.getPassPlayer()->getUniNum() << endl		<< "\tWeight: " << virtualPass.getPassValue() << endl		<< "\tModel: " << virtualPass.getPassModel() << endl		<< "\tDir: " << sayFlags.passDir << endl		<< "\tSpeed: " << sayFlags.passSpeed << endl;}bool GroupWorks::getPassSayRequestPermittion(){	unsigned bodyNum = worldModel->getCurInterCalculate().			getCheckedListNum(worldModel->getBody());	if (bodyNum == NOVALUE || worldModel->getCurInterCalculate().			getCheckedInterPlayer(bodyNum).getInterTime() > 3)		return false;	return true;}void GroupWorks::requestSuggestPassSayManager(){	LOG << "GroupWorks::requestSuggestPassSayManager" << endl;/*	if (worldModel->getBody().getPostNum() == 6 ||		worldModel->getBody().getPostNum() == 7)		requestNum = Player::postNumToUniNum(8);	else*/ if (worldModel->getBody().getPostNum() == 9 ||		worldModel->getBody().getPostNum() == 10 ||		worldModel->getBody().getPostNum() == 11)	{		if (fabs(worldModel->getBall().getPos().getY()) > 5)		{			if (worldModel->getBall().getPos().getY() > 0)				requestNum = Player::postNumToUniNum(6);			else				requestNum = Player::postNumToUniNum(7);		}		else			requestNum = lastRequestNum;	}	sayFlags.attentionNum = requestNum;	sayFlags.requestPassSayNum = requestNum;}void GroupWorks::updateAfterSenseBody(){	lastRequestNum = requestNum;}void GroupWorks::decide(){	LOG << "GroupWorks::decide" << endl;	if (getPassSayRequestPermittion())		requestSuggestPassSayManager();	if (hearedRequestPassTime == worldModel->getCurTime() &&		hearedRequestPassNum == worldModel->getBody().getUniNum())		suggestPassSayManager();}// setting functionsvoid GroupWorks::setHearedRequestPassNum(unsigned hearedRequestPassNumArg){	hearedRequestPassNum = hearedRequestPassNumArg;}void GroupWorks::setHearedRequestPassTime(unsigned hearedRequestPassTimeArg){	hearedRequestPassTime = hearedRequestPassTimeArg;}void GroupWorks::setHearedRequestPassSender(unsigned hearedRequestPassSenderArg){	hearedRequestPassSender = hearedRequestPassSenderArg;}

⌨️ 快捷键说明

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