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

📄 offense.cpp

📁 2006年世界杯足球赛2D仿真组第16名的源代码。在此代码上随便改改
💻 CPP
字号:
/* *  Copyright 2002-2005, Mersad Team, Allameh 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. * *  This file is created by: Ahmad Boorghany * *  Released on Monday 1 August 2005, 10 Mordad 1384 by Mersad RoboCup Team. *  For more information please read README file.*/#include <cmath>#include <Pass.h>#include <Logger.h>#include <Basics.h>#include <Defines.h>#include <Offense.h>#include <BasicDash.h>#include <BasicTurn.h>#include <AdvancedAgent.h>using namespace std;Offense::Offense(const WorldModel *worldModel): AdvancedAction(worldModel){}Offense::~Offense(){}float Offense::getValue(const Library &library){	LOG << "Offense::getValue" << endl;/*	if (worldModel->getPlayMode() != PM_PLAY_ON)	{		nonPlayOnOffense();		return AD_NORMAL_VALUE;	}	offenseDecision = getOffenseDecision();	if (offenseDecision == OD_GETTING_CROSS)	{		resetWeights();//		logWeights();		applyInterceptCalcWeights();//		logWeights();		applyHomeWeights();//		logWeights();		applyShootWeights();//		logWeights();		offenseMax = getMaxWeight();		if (offenseMax == NOVALUE)			offensePoint = positioning.getHomePoint(					worldModel->getBody().getUniNum());		else			offensePoint = getWeightPoint(offenseMax);	}	else	{		offenseMax = NOVALUE;		offensePoint = positioning.getHomePoint(				worldModel->getBody().getUniNum());	}*/	return AD_MIN_VALUE;}void Offense::execute(Form &form, const Library &library){	LOG << "Offense::execute" << endl;	Point offensePoint =			library.positioning.getHomePoint(worldModel->getBody().getUniNum());	command = library.positioning.getPositioningCommand(offensePoint);	command->setCreator(AT_OFFENSE);/*	if (worldModel->getPlayMode() != PM_PLAY_ON)	{		command = DashNormalGotoPoint(		positioning.getHomePoint(worldModel->getBody().getUniNum()), 1, 		worldModel->getBody()).getCommand();		if (!command)		{			command = new EmptyCommand();		}	}	if (worldModel->getBody().getDistance(offensePoint) < 2)		command = TurnToObject(worldModel->getBall(),				worldModel->getBody(), 5).getCommand();	else		command = DashNormalGotoPoint(offensePoint, 1,				worldModel->getBody()).getCommand();	if (!command)		command = new EmptyCommand();*/}Point Offense::getHomePoint(int playerUniNum, const Library &library){	return library.positioning.getHomePoint(playerUniNum);}/*Point Offense::getWeightPoint(unsigned num){	return Point(52 - OFFENSE_X_SIZE + (num % OFFENSE_X_NUM),			floor((float)num / OFFENSE_X_NUM) - OFFENSE_Y_SIZE / 2);}void Offense::applyInterceptCalcWeights(){	LOG << "Offense::applyInterceptCalcWeights" << endl;	interCalc.startSession(0);	interCalc.updateByWorldModel(worldModel);	Vector vector;	vector.setByPoints(worldModel->getBall().getPos(), CROSS_CENTER_POINT);	vector.setAsPolar(2.7, vector.getDirection());	Ball simBall;	for (unsigned i = 0; i < CROSS_CALCULATES_NUM; i++)	{		simBall = worldModel->getBall();		simBall.setVel() = vector;		simBall.setVel().rotate(((int)i - CROSS_CALCULATES_NUM / 2.00) *				CROSS_DIR_STEP);//LOG << "New interCalc." << endl//	<< "simBall pos: " << simBall.getPos() << endl//	<< "simBall vel: " << simBall.getVel() << endl;		simBall.simulateByDynamics(worldModel->getBody());		interCalc.setVirtualBall(simBall);		interCalc.run();		if (interCalc.existFastestPlayer() &&			interCalc.getFastestPlayer().getTeamId() == TID_OPPONENT)			applyOneInterceptCalcWeight(interCalc.getFastestInterPlayer());	}}void Offense::applyOneInterceptCalcWeight(const InterceptPlayer &checkPlayer){	LOG << "Offense::applyOneInterceptCalcWeight" << endl;	float dist = checkPlayer.getPlayer().getDistance(			checkPlayer.getInterPoint());//LOG << "dist: " << dist << endl;//LOG << "interPoint: " << checkPlayer.getInterPoint() << endl;//LOG << "fastestPos: " << checkPlayer.getPlayer().getPos() << endl;	for (unsigned i = 0;i < OFFENSE_POINTS_NUM; i++)		if (getWeightPoint(i).getDistance(checkPlayer.getInterPoint()) <				dist - FASTEST_DELTA_DIST)		{//LOG << "i entered: " << i << endl;//LOG << "point: " << getWeightPoint(i) << endl;			if (!valids[i])				continue;//LOG << "i added: " << i << endl;			if (checkPlayer.getPlayer().isGoalie())				weights[i] += INTERCEPT_CALC_WEIGHT;			else				weights[i] += INTERCEPT_CALC_WEIGHT;		}}void Offense::applyHomeWeights(){	LOG << "Offense::applyHomeWeights" << endl;	Point homePoint(positioning.getHomePoint(			worldModel->getBody().getUniNum()));	for (unsigned i = 0;i < OFFENSE_POINTS_NUM; i++)	{		if (!valids[i])			continue;		weights[i] += Basics::reRate(getWeightPoint(i).getDistance(homePoint),				0, 15, 0, HOME_DIST_WEIGHT, RRM_REVERSE);	}}void Offense::applyShootWeights(){	LOG << "Offense::applyShootWeights" << endl;	float shootDir, shootDist, shootValue;	for (unsigned i = 0;i < OFFENSE_POINTS_NUM; i++)	{		if (!valids[i])			continue;		shootDir = Pass::getShootDirValue(getWeightPoint(i), worldModel);		shootDist = hypot(getWeightPoint(i).x - 52.5,				fmin(getWeightPoint(i).y - 4,					 getWeightPoint(i).y + 4));		shootValue = shootDir - shootDist / 3;		weights[i] += Basics::reRate(shootValue,				35, 90, 0, SHOOT_WEIGHT, RRM_DIRECT);	}}unsigned Offense::getMaxWeight(){	unsigned maxer = NOVALUE;	for (unsigned i = 1; i < OFFENSE_POINTS_NUM; i++)	{		if (!valids[i])			continue;		if (maxer == NOVALUE ||			weights[i] > weights[maxer])			maxer = i;	}	if (maxer != NOVALUE)		LOG << "Offense max weight: " << weights[maxer] << endl;	return maxer;}void Offense::resetWeights(void){	float offsideX = worldModel->getOppOffsideLine();	for (unsigned i = 0; i < OFFENSE_POINTS_NUM; i++)	{		weights[i] = 0;		if (getWeightPoint(i).x > offsideX - OFFSIDE_SURE_DIST)			valids[i] = false;		else			valids[i] = true;	}}OffenseDecision Offense::getOffenseDecision(){	if (worldModel->getBall().getPos().getX() > CROSS_PERMITTED_X &&		(worldModel->getBallStatus() == BS_KICKABLE_TMM ||		 worldModel->getBallStatus() == BS_KICKABLE_TMM_OPP ||		 worldModel->getBallStatus() == BS_FREE_BALL_TMM ||		 worldModel->getBallStatus() == BS_FREE_BALL_TMM_OPP) &&		 worldModel->getBody().getPostNum() >= 9)		return OD_GETTING_CROSS;	return OD_NONE;}void Offense::logWeights(){	float lastY = getWeightPoint(0).y;	LOG << "Offense points:" << endl;	for (unsigned i = 0; i < OFFENSE_POINTS_NUM; i++)	{		if (lastY != getWeightPoint(i).y)		{			LOG << endl;			lastY = getWeightPoint(i).y;		}		LOG << "P" << getWeightPoint(i) << "V" << valids[i] << "W" << weights[i] << "\t";	}	LOG << endl;}void Offense::nonPlayOnOffense(){	offensePoint = positioning.getHomePoint(			worldModel->getBody().getUniNum());	return;}*/

⌨️ 快捷键说明

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