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

📄 groupworks.cpp

📁 RoboCup 2D 仿真组老牌强队Mersad 2005的完整源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
void GroupWorks::changeInterceptNumByHear(unsigned sender, unsigned uniNum){	if (!getChangeInterceptNumPermission())	{		LOG << "Changing interceptNum is not permitted." << endl;		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(		const Library &library) const{	WithoutBallSelection selection;	if (!worldModel->getBall().isValid())		selection = WOBS_LOOKFORBALL;	else if (interceptNum == worldModel->getBody().getUniNum())	{		if (interceptBlock)			selection = WOBS_BLOCK;		else			selection = WOBS_INTERCEPT;	}	else		selection = WOBS_POSITIONING;	if (!getChangeInterceptNumPermission())	{		SpecifyOffenseDefense(selection);		LOG << "GroupWorks::getWithoutBallSelection > return: "			<< selection << endl;		return selection;	}	if (lastSRPDribbleTime > worldModel->getCurTime() - 5)		selection = WOBS_INTERCEPT;	LOG << " Meisam2005 GroupWorks1 : selection = " << selection << endl;	if (selection == WOBS_POSITIONING && 		(worldModel->getBallStatus() == BS_FREE_BALL_BODY /*||		worldModel->getBallStatus() == BS_FREE_BALL_BODY_TMM*/))		selection = WOBS_INTERCEPT; // Be careful of this line. 	if (selection == WOBS_INTERCEPT)		{		if (worldModel->getBallStatus() == BS_KICKABLE_OPP || 			worldModel->getBallStatus() == BS_FREE_BALL_OPP)			selection = WOBS_BLOCK;			if (worldModel->getBody().getPostNum() <= 5)			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 &&			worldModel->getBallStatus() != BS_FREE_BALL_BODY_OPP)))	{		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() - 							library.positioning.getHomePoint(							worldModel->getBody().getUniNum()).x;								LOG << "Meisam2005 : aaaaah : homePoint : " << 							library.positioning.getHomePoint(							worldModel->getBody().getUniNum()) << endl;													float homeDeltaY = worldModel->getBall().getPos().getY() - 							library.positioning.getHomePoint(							worldModel->getBody().getUniNum()).y;						LOG << "Meisam2005 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 << "Meisam2005 intelligent su..1 " << endl;							selection = WOBS_BLOCK;				}			if (worldModel->getBody().getPostNum() == 3)			{		    if (worldModel->getBall().getPos().getX() > 0)		    {					if (fabs(homeDeltaY) < 6 && (homeDeltaX < 6 || 							worldModel->getBody().getPos().getX() > 							worldModel->getBall().getPos().getX()))					{					LOG << "Meisam2005 intelligent su..2 " << endl;								selection = WOBS_BLOCK;					}		    }		    else						if (abs(homeDeltaY) < 10 && (homeDeltaX < 10 || 							worldModel->getBody().getPos().getX() > 							worldModel->getBall().getPos().getX()))					{					LOG << "Meisam2005 intelligent su..3 " << endl;								selection = WOBS_BLOCK;					}			}			if (worldModel->getBody().getPostNum() == 4)			{		    	if (worldModel->getBall().getPos().getX() > 0)		    	{					if (fabs(homeDeltaY) < 6 && (homeDeltaX < 6 || 							worldModel->getBody().getPos().getX() > 							worldModel->getBall().getPos().getX()))					{						LOG << "Meisam2005 intelligent su..4 " << endl;								selection = WOBS_BLOCK;					}		    	}		    	else						if (abs(homeDeltaY) < 10 && (homeDeltaX < 10 || 							worldModel->getBody().getPos().getX() > 							worldModel->getBall().getPos().getX()))					{						LOG << "Meisam2005 intelligent su..5 " << endl;								selection = WOBS_BLOCK;					}			}						if (worldModel->getBody().getPostNum() == 5)				if (homeDeltaY > -6 && (homeDeltaX < 8 || 						worldModel->getBody().getPos().getX() > 						worldModel->getBall().getPos().getX()))				{					LOG << "Meisam2005 intelligent su..6 " << endl;							selection = WOBS_BLOCK;				}			if (worldModel->getBody().getPostNum() == 8)				if (abs(homeDeltaY) < 12 && (homeDeltaX < 6 || 						worldModel->getBody().getPos().getX() > 						worldModel->getBall().getPos().getX()))				{					LOG << "Meisam2005 intelligent su..7 " << 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 = library.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 << "Meisam2005 intelligent su..7 " << 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 << "Meisam2005 intelligent su..8 " << endl;						selection = WOBS_BLOCK;			}		}	}//////////////////////////BLOCK FOR 6 & 7 : end	SpecifyOffenseDefense(selection);	LOG << "GroupWorks::getWithoutBallSelection > return: "		<< selection << endl;	return selection;}void GroupWorks::signInterceptNum(SayDecisionForm &sayForm){	if (interceptNum == 0)	{		sayForm.gwInterceptNum = 0;		sayForm.gwAttentionNum = 0;		return;	}	else		sayForm.gwAttentionNum = interceptNum;	if ((interceptNum == worldModel->getBody().getUniNum() ||		 worldModel->getFullPlayer(TID_TEAMMATE, interceptNum - 1).		 		getPosDeviation() < 2) &&		worldModel->getBall().getPosDeviation() < 2 && interceptSay)	{		if (interceptBlock)			sayForm.gwInterceptNum = interceptNum + 11; // It means Block Mode		else			sayForm.gwInterceptNum = interceptNum;	}	else		sayForm.gwInterceptNum = 0; // I reset it because I am not sure.}bool GroupWorks::getChangeInterceptNumPermission() const{	if (worldModel->getBall().getSeeTime() > worldModel->getCurTime() - 2 &&		worldModel->getCurTime() - lastPassHearTime > 2 &&		(worldModel->getBallStatus() == BS_KICKABLE_TMM ||		 worldModel->getBallStatus() == BS_KICKABLE_OPP ||		 worldModel->getBallStatus() == BS_KICKABLE_BODY ||		 worldModel->getBallStatus() == BS_KICKABLE_BODY_TMM ||		 worldModel->getBallStatus() == BS_KICKABLE_BODY_OPP ||		 worldModel->getBallStatus() == BS_KICKABLE_TMM_OPP))		 return true;	if (worldModel->getCurTime() - lastPassHearTime > 4 ||		interceptNum == 0)		return true;	return 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 (abs(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();*/}void GroupWorks::SpecifyOffenseDefense(WithoutBallSelection &selection) const{	if (selection == WOBS_POSITIONING)	{		if (interceptBlock)			selection = WOBS_DEFENSE;		else			selection = WOBS_OFFENSE;	}	if (selection == WOBS_DEFENSE &&			(isInPlayers(worldModel->getBody().getUniNum(), "234") ||			(isInPlayers(worldModel->getBody().getUniNum(), "AB5") &&			worldModel->getBody().getPos().getX() >= 20)))		selection = WOBS_OFFENSE;	if (selection == WOBS_OFFENSE &&			(isInPlayers(worldModel->getBody().getUniNum(), "6789") ||			(isInPlayers(worldModel->getBody().getUniNum(), "AB5") &&			worldModel->getBody().getPos().getX() < -20)))		 selection = WOBS_DEFENSE;}// setting functions/*void 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 + -