亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? shoot.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: Mostafa Rokooey * *  Released on Monday 1 August 2005, 10 Mordad 1384 by Mersad RoboCup Team. *  For more information please read README file.*/#include <cmath>#include <Command.h>#include <Degree.h>#include <Line.h>#include <Shoot.h>#include <Logger.h>#include <Basics.h>#include <Defines.h>#include <BasicKick.h>#include <AdvancedAgent.h>#define SHOOT_LOG_LEVEL 0using namespace std;Shoot::Shoot(const WorldModel *worldModel): AdvancedAction(worldModel){	int i;    for (i = 0;i <= NUMBEROFSHOOTPOINTS;i++)    {		shootPoints[i].x = SHOOTPOINTSX;		shootPoints[i].y = -6.3 + (12.6 / NUMBEROFSHOOTPOINTS) * (i); // Sassan    }	shootLogLevel = SHOOT_LOG_LEVEL;}Shoot::~Shoot(){}float Shoot::getValue(const Library &library){	LOG<< "Shoot::getValue" << endl;	int i;	if (worldModel->getBody().getPos().getX() <= 25.0) // Sassan 30		return AD_MIN_VALUE;			setShootRates();		for (i = 0; i <= NUMBEROFSHOOTPOINTS; i++)	{		if (shootLogLevel >= 2)			LOG << " --------------- Shoot Number " << i << " ---------------" << endl;		if (!getFastest(i))		{			shootWeights[i] = 0;			if (shootLogLevel >= 2)				LOG << "I cant't kick the ball." << endl;			continue;		}				shootWeights[i] = getCatchWeight(i) * catchRate;		shootWeights[i] += getNoiseWeight(i) * noiseRate;		shootWeights[i] += getFarToGoalieWeight(i) * farToGoalieRate;		shootWeights[i] += getGoalieMistakeWeight() * goalieMistakeRate;		shootWeights[i] += getBallFastMovingWeight(library) * ballFastMovingRate;		shootWeights[i] += getGoaliePosDeviationWeight() * 						goaliePosDeviationRate;		shootWeights[i] += getGoalSeenWeight(i) * goalSeenRate;					if (shootLogLevel >= 2)		{			LOG << "catchWeight = " << getCatchWeight(i) << endl;			LOG << "noiseWeight = " << getNoiseWeight(i) << endl;			LOG << "farToGoalieWeight = " << getFarToGoalieWeight(i) << endl;			LOG << "goalieMistakeWeight = " << getGoalieMistakeWeight() << endl;			LOG << "ballFastMovingWeight = " << getBallFastMovingWeight(library) << endl;			LOG << "goaliePosDeviationWeight = " << getGoaliePosDeviationWeight() << endl;			LOG << "goalSeenWeight = " << getGoalSeenWeight(i) << endl;			LOG << "shootWeight is = " << shootWeights[i] << endl;		}				if (getCatchWeight(i) <= 10)		{			if (shootLogLevel >= 2)				LOG << "shootWeight changed to 0." << endl;			shootWeights[i] = 0;		}		if (getGoalSeenWeight(i) <= 10)		{			if (shootLogLevel >= 2)				LOG << "shootWeight changed to 0. (goalSeen)" << endl;			shootWeights[i] = 0;		}	}		float weightsHistory[NUMBEROFSHOOTPOINTS];		for (i = 0; i <= NUMBEROFSHOOTPOINTS; i++)		weightsHistory[i] = shootWeights[i];			for (i = 0; i <= NUMBEROFSHOOTPOINTS; i++)	{		if (i > 0)			shootWeights[i] += weightsHistory[i - 1] / 10;		else			shootWeights[i] += weightsHistory[i + 1] / 10;				if (i < NUMBEROFSHOOTPOINTS)			shootWeights[i] += weightsHistory[i + 1] / 10;			else			shootWeights[i] += weightsHistory[i - 1] / 10;	}		float bestShootWeight = -0xFFFF;	int bestShootNum = NOVALUE;		for (i = 0; i <= NUMBEROFSHOOTPOINTS; i++)	{		if (shootLogLevel >= 1)			LOG << "shootWeights[" << i << "] = " << shootWeights[i] << endl;		if (shootWeights[i] > bestShootWeight)		{			bestShootWeight = shootWeights[i];			bestShootNum = i;		}	}		if (bestShootNum != NOVALUE)	{		shootCommand = shootCommands[bestShootNum];	}	else	{		shootCommand = new KickCommand(AT_SHOOT, 100, 0);	}		if (shootLogLevel >= 1)	{		LOG << " bestShootWeight = " << bestShootWeight << endl;		LOG << " bestShootNum = " << bestShootNum << endl;		LOG << " FINAL shootCommand = " << shootCommand->toString() << endl;	}	if (bestShootWeight >= 5000)		return AD_ALWAYS_RUN_VALUE;	else		return AD_MIN_VALUE;}void Shoot::execute(Form &form, const Library &library){	LOG<< "Shoot::execute" << endl;		command = shootCommand;}bool Shoot::getFastest(int shootNum){	shootIntercept.startSession(1, &worldModel->getBody());	if (shootLogLevel >= 3)		shootIntercept.setLogging(true);	//	Setting goalie configurations	shootIntercept.setTmmSlowDashPower(40);	shootIntercept.setTmmFastDashPower(100);	if (worldModel->getPlayMode() == PM_PENALTY_SETUP ||		worldModel->getPlayMode() == PM_PENALTY_SETUP_OPP ||		worldModel->getPlayMode() == PM_PENALTY_READY_OPP ||		worldModel->getPlayMode() == PM_PENALTY_READY)	{		shootIntercept.setTmmDirectDashPower(67);		shootIntercept.setTmmGoalieDirectDashPower(67);	}	else	{		shootIntercept.setTmmDirectDashPower(60);		shootIntercept.setTmmGoalieDirectDashPower(60);	}		shootIntercept.setTmmGoalieSeeBallDelay(0);	shootIntercept.setTmmSeeBallDelay(0);	if (worldModel->getPlayMode() == PM_PENALTY_SETUP ||		worldModel->getPlayMode() == PM_PENALTY_SETUP_OPP ||		worldModel->getPlayMode() == PM_PENALTY_READY_OPP ||		worldModel->getPlayMode() == PM_PENALTY_READY)	{		shootIntercept.setTmmPosDevRate(0.78);	}	else	{		shootIntercept.setTmmPosDevRate(0.75);	}	//	Setting players configurations	shootIntercept.setOppSlowDashPower(10);	shootIntercept.setOppFastDashPower(50);	shootIntercept.setOppDirectDashPower(20);	shootIntercept.setOppSeeBallDelay(2);	shootIntercept.setOppGoalieDirectDashPower(20);	shootIntercept.setOppGoalieSeeBallDelay(2);	shootIntercept.setOppPosDevRate(0.15);		for (int i = 0; i < FULL_PLAYERS_NUM; i++)		if (worldModel->getFullPlayer(TID_OPPONENT, i).isValid())			if (!worldModel->getFullPlayer(TID_OPPONENT, i).isGoalie())			{				if (shootLogLevel >= 2)					LOG << "full Opp added, num = " << i << endl;				shootIntercept.addPlayer(worldModel->							getFullPlayer(TID_OPPONENT, i));			}				for (int i = 0; i < HALF_PLAYERS_NUM; i++)		if (worldModel->getHalfPlayer(TID_OPPONENT, i).isValid())			if (!worldModel->getHalfPlayer(TID_OPPONENT, i).isGoalie())			{				if (shootLogLevel >= 2)					LOG << "half Opp added, num = " << i << endl;				shootIntercept.addPlayer(worldModel->							getHalfPlayer(TID_OPPONENT, i));			}	if (worldModel->getOppGoalie() != NULL)	{		if (shootLogLevel >= 2)			LOG << "OppGoalie added." << endl;		Player opponentGoalie;		opponentGoalie = *(worldModel->getOppGoalie());		opponentGoalie.setTeamId(TID_TEAMMATE);		shootIntercept.addPlayer(opponentGoalie, false, false, false);	}		if (!kickMaxPower(shootNum))		return false;			if ((getGoalSeenWeight((int)(NUMBEROFSHOOTPOINTS / 2)) < 84) && (shootIntercept.getPlayersNum() == 0))		return false;	if (shootLogLevel >= 2)	{		LOG << "addedPlayersNum = " << shootIntercept.getPlayersNum();		LOG << "shootNum = " << shootNum << endl;		LOG << "shootCommands[shootNum] = " << shootCommands[shootNum]->toString() << endl;	}		Ball shootedBall;	shootedBall = worldModel->getBall();	shootedBall.simulateByAction(worldModel->getBody(), 				shootCommands[shootNum]);	shootIntercept.setVirtualBall(shootedBall);	shootIntercept.setKickCycles(1);	shootIntercept.run();	return true;}bool Shoot::kickMaxPower(int shootNum){	Point targetShootPoint;	float shootedBallFirstVelocity;	bool iCantShoot = false;	KickToPointVelocity *kickForShoot;	Command *kickCommand;	kickCommand = new KickCommand(AT_SHOOT, 100, 0);			targetShootPoint = shootPoints[shootNum];	shootedBallFirstVelocity = 4.0;	while(1)	{		if (shootedBallFirstVelocity < 0.0001)		{				iCantShoot = true;								break;		}				kickForShoot = new KickToPointVelocity(AT_SHOOT, targetShootPoint,					shootedBallFirstVelocity,worldModel->getBall(),					worldModel->getBody());		delete kickCommand;		kickCommand = kickForShoot->getCommand();				if (!kickForShoot->isPossible())			shootedBallFirstVelocity -= .1;		else			break;	}	shootCommands[shootNum] = 				new KickCommand(*dynamic_cast<KickCommand *>(kickCommand));	if(shootedBallFirstVelocity <= 0.05)		return false;	if(iCantShoot)		return false;	return true;	}float Shoot::getCatchWeight(int shootNum){	Point shootPoint = shootPoints[shootNum];	Point catchPoint;	if (!shootIntercept.existFastestPlayer())	{		if (shootLogLevel >= 2)			LOG << "don't exist fastest player." << endl;		catchPoint = Point(55, 0);	}	else	{		if (shootLogLevel >= 2)			LOG << "exist fastest player." << endl;		catchPoint = shootIntercept.getFastestInterPlayer().getInterPoint();	}		if (shootLogLevel >= 2)		LOG << "catchPoint = " << catchPoint << endl;		Vector shootVec;	shootVec.setByPoints(worldModel->getBall().getPos(), catchPoint);	float aveRange = 52.5 - (shootVec.getX() / 10);	if (fabs(worldModel->getBody().getPos().getX()) >= 8.5) // Sassan: getX ? (or Y)		aveRange = 52.7;		if (shootLogLevel >= 2)		LOG << "aveRange = " << aveRange << endl;			if (catchPoint.x >= 55)		return 100;	else if (catchPoint.x >= 52.5)		return 80;	return Basics::reRate(catchPoint.x, aveRange, 52.5, 0, 20);}float Shoot::getNoiseWeight(int shootNum){	Point shootPoint = shootPoints[shootNum];	Vector shootVector;	shootVector.setByPoints(worldModel->getBall().getPos(), shootPoint);	if (shootVector.getMagnitude() <= 2)	{		if (fabs(shootPoint.y) >= 6)			return 50;		if (fabs(shootPoint.y) >= 5)			return 70;		return 100;	}	else if (shootVector.getMagnitude() <= 6)	{		if (fabs(shootPoint.y) <= 4)			return 100;		if (fabs(shootPoint.y) > 5.8)			return 40;		return Basics::reRate(fabs(shootPoint.y), 4, 6, 40, 100, RRM_REVERSE);	}	else	{		if (fabs(shootPoint.y) <= 4)			return 100;		if (fabs(shootPoint.y) > 5.8)			return 25;		return Basics::reRate(fabs(shootPoint.y), 4, 5.8, 25, 100, RRM_REVERSE);	}}float Shoot::getGoalSeenWeight(int shootNum){	Point shootPoint = shootPoints[shootNum];	Point goalSeenCheckPoint;	Vector meToCheckVector;	float goalSeenValue;	if(shootPoint.y <= -2.5 && shootPoint.y > -7)		goalSeenCheckPoint.y = -5;	else if(shootPoint.y <= 2.5 && shootPoint.y > -2.5)		goalSeenCheckPoint.y = 0;	else if(shootPoint.y <= 7 && shootPoint.y > 2.5)		goalSeenCheckPoint.y = 5;	else		goalSeenCheckPoint.y = 0;	goalSeenCheckPoint.x = SHOOTPOINTSX;	meToCheckVector.setByPoints(worldModel->getBody().getPos(), 					goalSeenCheckPoint);	goalSeenValue = worldModel->getSeeDeltaCycle(meToCheckVector.getDirection(), 					0.2);	if (getGoaliePosDeviationWeight() >= 75)		return 85;	if (goalSeenValue > 7)		return 0;	else if (goalSeenValue > 5)		return 40;	else		return Basics::reRate(goalSeenValue, 0, 5, 60, 100, RRM_REVERSE);}float Shoot::getGoaliePosDeviationWeight(void){	if (worldModel->getOppGoalie() != NULL)		return Basics::reRate(worldModel->getOppGoalie()->getPosDeviation(),					0.6, 7, 0, 100, RRM_REVERSE);	return 60;}float Shoot::getGoalieMistakeWeight(void){	if (worldModel->getOppGoalie() != NULL)	{		Line upTir, downTir;		Line halfMaker;		Line goalieXLine;			upTir.setByPoints(worldModel->getBall().getPos(), Point(52.5, 6.5));		downTir.setByPoints(worldModel->getBall().getPos(), Point(52.5, -6.5));		float halfDir = Degree::normalizeAngle((upTir.getDirection() + downTir.getDirection()) / 2);			halfMaker.setBySourceDir(worldModel->getBall().getPos(), halfDir);		goalieXLine.setBySourceDir(Point(51.5, 0), 90);		Point goalieBestPoint;		halfMaker.getLineIntersect(goalieXLine, goalieBestPoint);		Vector goalieMistake;		goalieMistake.setByPoints(worldModel->getOppGoalie()->getPos(), 					goalieBestPoint);		return Basics::reRate(goalieMistake.getY(), 1.5, 7, 0, 100, RRM_DIRECT);	}	return 20;}float Shoot::getFarToGoalieWeight(int shootNum){	Point shootPoint = shootPoints[shootNum];	if (worldModel->getOppGoalie() != NULL)		return Basics::reRate(worldModel->getOppGoalie()->					getDistance(shootPoint), 0, 14, 0, 100, RRM_DIRECT);	return 60;}float Shoot::getBallFastMovingWeight(const Library &library){	float value;	if (library.lastBodyCycleCommand->getCreator() == AT_INTERCEPT)	{		value = (fabs(worldModel->getBall().getVel().getX()) / 4) + 				(fabs(worldModel->getBall().getVel().getY()) * 1);		return Basics::reRate(value, .75, 2.75, 0, 100, RRM_DIRECT);  	}	return 0;}void Shoot::setShootRates(void){    catchRate = 30;    noiseRate = 5;    goaliePosDeviationRate = 5;    farToGoalieRate = 25;    goalSeenRate = 8;	goalieMistakeRate = 10;	ballFastMovingRate = 8;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人综合婷婷国产精品久久| 亚洲最大的成人av| 紧缚奴在线一区二区三区| 欧美一区二区三区四区在线观看| 亚洲国产成人porn| 91麻豆精品国产91久久久久久久久| 午夜欧美电影在线观看| 91麻豆精品国产自产在线| 久久99国产精品久久| 亚洲国产成人私人影院tom| 97精品视频在线观看自产线路二| 亚洲影视在线观看| 欧美一区二区三区免费视频| 激情综合亚洲精品| 国产精品美女视频| 欧美天天综合网| 免费在线观看成人| 中文字幕欧美日韩一区| 欧美图区在线视频| 精品一区二区三区香蕉蜜桃| 国产精品国产三级国产普通话99| 99re成人精品视频| 日本怡春院一区二区| 久久久久久电影| 91浏览器打开| 日本成人在线视频网站| 中文字幕高清一区| 欧美人xxxx| 国产成人免费视频网站| 一区二区三区中文免费| 精品国免费一区二区三区| 99久久精品费精品国产一区二区| 亚洲成人av福利| 久久免费的精品国产v∧| 欧美三级韩国三级日本三斤| 韩国女主播一区二区三区| 亚洲乱码一区二区三区在线观看| 欧美一区二区三区公司| 99re成人精品视频| 国产乱理伦片在线观看夜一区| 亚洲视频一二区| 欧美精品一区二区三区一线天视频| 99视频热这里只有精品免费| 蜜乳av一区二区三区| 亚洲激情五月婷婷| 国产欧美视频一区二区三区| 欧美日韩国产首页| 91视频www| 粉嫩欧美一区二区三区高清影视| 丝袜美腿亚洲一区| 亚洲三级在线免费| 国产精品无码永久免费888| 欧美一级艳片视频免费观看| 色婷婷久久久亚洲一区二区三区 | 在线亚洲+欧美+日本专区| 精品一区二区三区久久| 午夜久久久影院| 亚洲日本青草视频在线怡红院| 久久久夜色精品亚洲| 欧美一区二区视频在线观看| 欧美日产在线观看| 色婷婷综合久久久中文一区二区| 成人黄色a**站在线观看| 国产综合色视频| 久久精品国产亚洲5555| 麻豆精品视频在线观看视频| 午夜精品久久久久久久99水蜜桃 | 欧美久久婷婷综合色| 91久久精品网| 色呦呦国产精品| 91性感美女视频| www.亚洲色图.com| 丁香婷婷综合网| 成人一区二区三区视频 | 亚洲欧美自拍偷拍色图| 中文在线一区二区| 国产亚洲午夜高清国产拍精品| 精品精品国产高清a毛片牛牛| 精品美女在线观看| 精品国产网站在线观看| 日韩欧美国产系列| 精品国产亚洲一区二区三区在线观看| 91精品国产乱码| 精品久久久影院| 精品国产精品网麻豆系列| 2020国产精品自拍| 久久久久国产精品麻豆| 日本一区二区电影| 亚洲婷婷综合久久一本伊一区| 亚洲欧美色综合| 亚洲一卡二卡三卡四卡 | 国产一区二区三区日韩| 国产suv精品一区二区6| 成人的网站免费观看| 色综合婷婷久久| 欧美男男青年gay1069videost| 欧美一区三区二区| 26uuu成人网一区二区三区| 欧美激情在线观看视频免费| 亚洲精品视频免费观看| 亚洲福利一区二区三区| 久久精品av麻豆的观看方式| 极品尤物av久久免费看| 99在线精品视频| 91精品国产色综合久久| 久久新电视剧免费观看| 成人免费小视频| 日韩精品久久久久久| 国产成人亚洲精品青草天美| 色八戒一区二区三区| 日韩午夜激情电影| 国产精品麻豆久久久| 亚洲va中文字幕| 国产精品综合二区| 在线观看网站黄不卡| 日韩无一区二区| 1024亚洲合集| 六月丁香婷婷久久| 色综合中文字幕国产| 欧美午夜影院一区| 久久久综合激的五月天| 亚洲第一av色| 成人一区在线观看| 欧美一区二区在线不卡| 亚洲欧洲在线观看av| 老司机午夜精品| 日本韩国视频一区二区| 精品少妇一区二区三区| 悠悠色在线精品| 国产精品亚洲а∨天堂免在线| 在线观看亚洲精品| 国产精品污网站| 美国三级日本三级久久99| 日本电影亚洲天堂一区| 国产欧美久久久精品影院| 日本中文字幕一区| 色88888久久久久久影院按摩| 久久色.com| 免费高清成人在线| 欧美视频一二三区| 日韩理论在线观看| 国产精品一区在线观看乱码| 制服丝袜在线91| 亚洲国产成人91porn| 91视频xxxx| 国产精品久久三区| 国产精品77777竹菊影视小说| 欧美日韩国产首页在线观看| 亚洲精品国产a| av午夜一区麻豆| 国产精品视频九色porn| 国产呦萝稀缺另类资源| 欧美一级欧美三级在线观看| 亚洲福利视频一区| 日本道精品一区二区三区| 亚洲视频 欧洲视频| 波多野结衣在线一区| 久久日一线二线三线suv| 精品在线免费视频| 日韩欧美的一区二区| 日韩二区在线观看| 欧美喷水一区二区| 日韩精品五月天| 欧美一级片在线看| 激情都市一区二区| 久久五月婷婷丁香社区| 国模大尺度一区二区三区| 久久夜色精品一区| 国产乱码精品1区2区3区| 久久精品在线免费观看| 成人午夜在线视频| 1000精品久久久久久久久| 91丨九色丨国产丨porny| 亚洲欧美日韩小说| 欧美午夜影院一区| 日韩国产欧美在线观看| 欧美一级二级在线观看| 蜜臀av性久久久久蜜臀aⅴ| 精品日韩99亚洲| 国产99久久久精品| 自拍偷拍亚洲综合| 欧美亚洲动漫精品| 日韩va亚洲va欧美va久久| 欧美r级在线观看| 懂色av一区二区夜夜嗨| 亚洲日本在线a| 欧美男同性恋视频网站| 久久99精品视频| 国产精品理伦片| 91精品办公室少妇高潮对白| 天天综合网天天综合色| 日韩欧美黄色影院| www.欧美色图| 亚洲一区二区三区在线看| 欧美一区二区性放荡片| 大胆欧美人体老妇| 五月天精品一区二区三区| 久久久午夜精品| 91福利在线播放| 激情国产一区二区|