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

📄 positioning.cpp

📁 mersad源码 03年robocup 季军 可以研究一下大家
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			maxDashPower = 60;					if (worldModel->getBody().getStamina() < 2300)				maxDashPower = worldModel->getBody().getStaminaIncMax();		}		if (worldModel->getBall().getPos().getX() > 0 && 			!((worldModel->getBody().getPos().getX() - homePoint.x) > 4) && 			worldModel->getBody().getStamina() < 2800)			maxDashPower = worldModel->getBody().getStaminaIncMax() / 2; 		if (worldModel->getBall().getPos().getX() > 15 && 			!((worldModel->getBody().getPos().getX() - homePoint.x) > 6) && 			worldModel->getBody().getStamina() < 2800)			maxDashPower = worldModel->getBody().getStaminaIncMax() / 3; 	}			if (worldModel->getBody().getPostNum() == 8 || 				worldModel->getBody().getPostNum() == 7)	{		maxDashPower = 85;		if (worldModel->getBody().getStamina() < 2300)			maxDashPower = worldModel->getBody().getStaminaIncMax();		if (worldModel->getBody().getStamina() < 2000)			maxDashPower = worldModel->getBody().getStaminaIncMax() / 2;	}			if (worldModel->getBody().getPostNum() == 11 || 		worldModel->getBody().getPostNum() == 9 || 		worldModel->getBody().getPostNum() == 10 || 		worldModel->getBody().getPostNum() == 6)  	{		maxDashPower = 100;		if (worldModel->getBody().getPos().getX() > homePoint.x)		{			if (worldModel->getBall().getPos().getX() < 20)			{				maxDashPower = 80;						if (worldModel->getBody().getStamina() < 1700)					maxDashPower = worldModel->getBody().getStaminaIncMax();				if (worldModel->getBody().getStamina() < 1600)					maxDashPower = worldModel->getBody().getStaminaIncMax() / 2;			}			if (worldModel->getBall().getPos().getX() < 5)			{				maxDashPower = 65;						if (worldModel->getBody().getStamina() < 2300)					maxDashPower = worldModel->getBody().getStaminaIncMax();				if (worldModel->getBody().getStamina() < 2000)					maxDashPower = worldModel->getBody().getStaminaIncMax() / 2;			}			if (worldModel->getBall().getPos().getX() < -10)			{				maxDashPower = 40;						if (worldModel->getBody().getStamina() < 2700)					maxDashPower = worldModel->getBody().getStaminaIncMax();				if (worldModel->getBody().getStamina() < 2300)					maxDashPower = worldModel->getBody().getStaminaIncMax() / 3;			}									if (hypot(worldModel->getBody().getPos().getX() - homePoint.x, 					worldModel->getBody().getPos().getY() - homePoint.y) < 7)				maxDashPower = worldModel->getBody().getStaminaIncMax() / 2;			if (hypot(worldModel->getBody().getPos().getX() - homePoint.x, 					worldModel->getBody().getPos().getY() - homePoint.y) < 3)				maxDashPower = 0;		}		else		{			if (hypot(worldModel->getBody().getPos().getX() - homePoint.x, 					worldModel->getBody().getPos().getY() - homePoint.y) < 5)				maxDashPower = 80;			if (hypot(worldModel->getBody().getPos().getX() - homePoint.x, 					worldModel->getBody().getPos().getY() - homePoint.y) < 3)				maxDashPower = 50;			if (hypot(worldModel->getBody().getPos().getX() - homePoint.x, 					worldModel->getBody().getPos().getY() - homePoint.y) < 1.5)				maxDashPower = 0;		}	}		float idealBodyDir = 0;		if (worldModel->getPlayMode() != PM_PLAY_ON)	{		LOG << "Positioning NPO " << endl;		if (worldModel->getPlayMode() == PM_OFFSIDE)		{			LOG << "Positioning  NPO Offside NPOX" << endl;			ForbiddenAreaGotoPoint doGotoPoint(homePoint, worldModel->getBall().getPos(), 				9.15, worldModel->getBody(), true);			if (doGotoPoint.getStatus() == 0)			{				if (doGotoPoint.getCommand())					delete doGotoPoint.getCommand();				return TurnToPoint(worldModel->getBall().getPos(),						worldModel->getBody(), 5).getCommand();			}			else				return doGotoPoint.getCommand();		}		else if (worldModel->getPlayMode() == PM_GOAL_KICK_OPP)		{			LOG << "Positioning  NPO GoalKickOpp NPOX" << endl;			ForbiddenAreaGotoPoint doGotoPoint(getOppGoalieKickHome(homePoint),				   	36, -20, 20, worldModel->getBody());			if (doGotoPoint.getStatus() == 0)			{				if (doGotoPoint.getCommand())					delete doGotoPoint.getCommand();				return TurnToPoint(worldModel->getBall().getPos(),						worldModel->getBody(), 5).getCommand();			}			else				return doGotoPoint.getCommand();		}		else if (worldModel->getPlayMode() == PM_FREE_KICK_OPP &&				 worldModel->getVirtualPlayMode() == VPM_GOALIE_CATCH_BALL_OPP)		{			LOG << "Positioning  NPO GoalieCatchOpp NPOX" << endl;			ForbiddenAreaGotoPoint doGotoPoint(getOppGoalieKickHome(homePoint),					worldModel->getBall().getPos(), 9.15,				   	worldModel->getBody());			if (doGotoPoint.getStatus() == 0)			{				if (doGotoPoint.getCommand())					delete doGotoPoint.getCommand();				return TurnToPoint(worldModel->getBall().getPos(),						worldModel->getBody(), 5).getCommand();			}			else				return doGotoPoint.getCommand();		}		else		{			LOG << "Positioning  NPO Other  NPOX" << endl;			ForbiddenAreaGotoPoint doGotoPoint(homePoint, worldModel->getBall().					getPos(), 9.15, worldModel->getBody());			if (doGotoPoint.getStatus() == 0)			{				if (doGotoPoint.getCommand())					delete doGotoPoint.getCommand();				return TurnToPoint(worldModel->getBall().getPos(),						worldModel->getBody(), 5).getCommand();			}			else				return doGotoPoint.getCommand();		}	}		if (worldModel->getBody().getPostNum() >= 9)	{		idealBodyDir = 0; 		return DashNormalGotoPoint(homePoint, 1.5, worldModel->getBody(), idealBodyDir,				maxDashPower).getCommand();	}	if ((worldModel->getBody().getPostNum() <= 5 || 		(worldModel->getBody().getPostNum() == 8 && 		worldModel->getBall().getPos().getX() < 10)) &&		worldModel->getBall().getPos().getX() > -32)	{		if (worldModel->getBall().getPos().getY() > homePoint.y)			idealBodyDir = 90; 		else			idealBodyDir = -90;		if (worldModel->getBody().getPostNum() == 8)		{			if (fabs(worldModel->getBall().getPos().getY()) > 12)				idealBodyDir = 180;		}		if (worldModel->getBody().getPostNum() == 4)		{			if (worldModel->getBall().getPos().getY() < 0)				idealBodyDir = 180;			if (worldModel->getBall().getPos().getY() > 15)				idealBodyDir = 135;		}		if (worldModel->getBody().getPostNum() == 3)		{			if (worldModel->getBall().getPos().getY() > 0)				idealBodyDir = 180;			if (worldModel->getBall().getPos().getY() < -15)				idealBodyDir = -135;		}		if (worldModel->getBody().getPostNum() == 5)		{			if (worldModel->getBall().getPos().getY() < 12)				idealBodyDir = 180;		}		if (worldModel->getBody().getPostNum() == 2)		{			if (worldModel->getBall().getPos().getY() > -12)				idealBodyDir = 180;		}		return DashNormalGotoPoint(homePoint, 1.5, worldModel->getBody(), idealBodyDir,				maxDashPower).getCommand();	}	return DashNormalGotoPoint(homePoint, 1.5, worldModel->getBody(),			maxDashPower).getCommand();	}float Positioning::getMaxXFor34(){	float maxXFor34 = 0;	unsigned i;	float xTmmFullPlayer[FULL_PLAYERS_NUM];	float xTmmHalfPlayer[HALF_PLAYERS_NUM];	for (int i = 0; i < FULL_PLAYERS_NUM; i++)		xTmmFullPlayer[i] = 0;			for (int i = 0; i < HALF_PLAYERS_NUM; i++)		xTmmHalfPlayer[i] = 0;			if (worldModel->getBody().getPostNum() == 3)	{		xTmmFullPlayer[7] = 0;			if (worldModel->getFullPlayer(TID_TEAMMATE, 6).isValid()) 			xTmmFullPlayer[6] = worldModel->getFullPlayer(TID_TEAMMATE, 6).getPos().							getX() + 15;		else			xTmmFullPlayer[6] = 0;	}		if (worldModel->getBody().getPostNum() == 4)	{		if (worldModel->getFullPlayer(TID_TEAMMATE, 7).isValid()) 			xTmmFullPlayer[7] = worldModel->getFullPlayer(TID_TEAMMATE, 7).getPos().							getX() + 15;		else			xTmmFullPlayer[7] = 0;		xTmmFullPlayer[6] = 0;	}					for (int i = 0; i < FULL_PLAYERS_NUM; i++)		if (i != 6 && i != 7)				if (worldModel->getFullPlayer(TID_TEAMMATE,i).isValid() &&				!worldModel->getFullPlayer(TID_TEAMMATE,i).isGoalie())				xTmmFullPlayer[i] = worldModel->getFullPlayer(TID_TEAMMATE,i).										getPos().getX();					xTmmFullPlayer[4] = 0;		for (int i = 0; i < HALF_PLAYERS_NUM; i++)		if (worldModel->getHalfPlayer(TID_TEAMMATE,i).isValid() &&			!worldModel->getHalfPlayer(TID_TEAMMATE,i).isGoalie())			xTmmHalfPlayer[i] = worldModel->getHalfPlayer(TID_TEAMMATE,i).								getPos().getX();					bool isGoalieInList = false;		for (int i = 0; i < FULL_PLAYERS_NUM; i++)		if (worldModel->getFullPlayer(TID_TEAMMATE,i).isValid() &&			worldModel->getFullPlayer(TID_TEAMMATE,i).isGoalie())			isGoalieInList = true;	for (int i = 0; i < HALF_PLAYERS_NUM; i++)		if (worldModel->getHalfPlayer(TID_TEAMMATE,i).isValid() &&			worldModel->getHalfPlayer(TID_TEAMMATE,i).isGoalie())			isGoalieInList = true;								if (isGoalieInList)	{		maxXFor34 = 0xFFFF;		for (i = 0; i < FULL_PLAYERS_NUM; i++)			if (xTmmFullPlayer[i] < maxXFor34)				maxXFor34 = xTmmFullPlayer[i];		for (i = 0; i < HALF_PLAYERS_NUM; i++)			if (xTmmHalfPlayer[i] < maxXFor34)				maxXFor34 = xTmmHalfPlayer[i];	}	else	{		float firstMinX = 0xFFFF, secMinX = 0xFFFF;		for (i = 0; i < FULL_PLAYERS_NUM; i++)			if (xTmmFullPlayer[i] < secMinX)				{					secMinX = xTmmFullPlayer[i];					if (secMinX < firstMinX)						swap(firstMinX, secMinX);				}		for (i = 0; i < HALF_PLAYERS_NUM; i++)			if (xTmmHalfPlayer[i] < secMinX)				{					secMinX = xTmmHalfPlayer[i];					if (secMinX < firstMinX)						swap(firstMinX, secMinX);				}		maxXFor34 = secMinX;				}	if (maxXFor34 > 0)		maxXFor34 = 0;			return maxXFor34;}float Positioning::getMaxXFor7(){	float maxXFor7 = 0;	unsigned i;	float xTmmFullPlayer[FULL_PLAYERS_NUM];	float xTmmHalfPlayer[HALF_PLAYERS_NUM];	for (int i = 0; i < FULL_PLAYERS_NUM; i++)		xTmmFullPlayer[i] = 0;			for (int i = 0; i < HALF_PLAYERS_NUM; i++)		xTmmHalfPlayer[i] = 0;			/////.		xTmmFullPlayer[4] = 0;	////.						for (int i = 0; i < FULL_PLAYERS_NUM; i++)		if (i != 4)				if (worldModel->getFullPlayer(TID_TEAMMATE,i).isValid() &&				!worldModel->getFullPlayer(TID_TEAMMATE,i).isGoalie())				xTmmFullPlayer[i] = worldModel->getFullPlayer(TID_TEAMMATE,i).										getPos().getX();					for (int i = 0; i < HALF_PLAYERS_NUM; i++)		if (worldModel->getHalfPlayer(TID_TEAMMATE,i).isValid() &&			!worldModel->getHalfPlayer(TID_TEAMMATE,i).isGoalie())			xTmmHalfPlayer[i] = worldModel->getHalfPlayer(TID_TEAMMATE,i).								getPos().getX();					bool isGoalieInList = false;		for (int i = 0; i < FULL_PLAYERS_NUM; i++)		if (worldModel->getFullPlayer(TID_TEAMMATE,i).isValid() &&			worldModel->getFullPlayer(TID_TEAMMATE,i).isGoalie())			isGoalieInList = true;	for (int i = 0; i < HALF_PLAYERS_NUM; i++)		if (worldModel->getHalfPlayer(TID_TEAMMATE,i).isValid() &&			worldModel->getHalfPlayer(TID_TEAMMATE,i).isGoalie())			isGoalieInList = true;								if (isGoalieInList)	{		maxXFor7 = 0xFFFF;		for (i = 0; i < FULL_PLAYERS_NUM; i++)			if (xTmmFullPlayer[i] < maxXFor7)				maxXFor7 = xTmmFullPlayer[i];		for (i = 0; i < HALF_PLAYERS_NUM; i++)			if (xTmmHalfPlayer[i] < maxXFor7)				maxXFor7 = xTmmHalfPlayer[i];	}	else	{		float firstMinX = 0xFFFF, secMinX = 0xFFFF;		for (i = 0; i < FULL_PLAYERS_NUM; i++)			if (xTmmFullPlayer[i] < secMinX)				{					secMinX = xTmmFullPlayer[i];					if (secMinX < firstMinX)						swap(firstMinX, secMinX);				}		for (i = 0; i < HALF_PLAYERS_NUM; i++)			if (xTmmHalfPlayer[i] < secMinX)				{					secMinX = xTmmHalfPlayer[i];					if (secMinX < firstMinX)						swap(firstMinX, secMinX);				}		maxXFor7 = secMinX;				}	if (maxXFor7 > 0)		maxXFor7 = 0;			return maxXFor7;}Point Positioning::getBasicPos(unsigned num) const{	return basicPos[num];}Point Positioning::getHomePoint(unsigned playerUniNum) const{	return basicPos[Player::uniNumToPostNum(playerUniNum) - 1];}Point Positioning::getOppGoalieKickHome(Point homePoint) const{	Point newHomePoint;	newHomePoint = homePoint;	if (worldModel->getPlayMode() == PM_FREE_KICK_OPP &&				 worldModel->getVirtualPlayMode() == VPM_GOALIE_CATCH_BALL_OPP)	{		LOG << "Positioning GoalieCatchOppHome model=catch" << endl;		if (worldModel->getBody().getPostNum() == 6)			newHomePoint = Point(18, 10);		if (worldModel->getBody().getPostNum() == 7)			newHomePoint = Point(18, -10);		if (worldModel->getBody().getPostNum() == 9)			newHomePoint = Point(25, 0);		if (worldModel->getBody().getPostNum() == 10)			newHomePoint = Point(30, -20);		if (worldModel->getBody().getPostNum() == 11)			newHomePoint = Point(30, 20);		newHomePoint.y += worldModel->getBall().getPos().getY() * .15;	}	if (worldModel->getPlayMode() == PM_GOAL_KICK_OPP)	{		LOG << "Positioning GoalieCatchOppHome model=goalkick" << endl;		if (worldModel->getBody().getPostNum() == 6)			newHomePoint = Point(28, 10);		if (worldModel->getBody().getPostNum() == 7)			newHomePoint = Point(28, -10);		if (worldModel->getBody().getPostNum() == 9)			newHomePoint = Point(35, 0);		if (worldModel->getBody().getPostNum() == 10)			newHomePoint = Point(35, -20);		if (worldModel->getBody().getPostNum() == 11)			newHomePoint = Point(35, 20);		newHomePoint.y += worldModel->getBall().getPos().getY() * .15;	}	return newHomePoint;}

⌨️ 快捷键说明

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