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

📄 fielddata.cpp

📁 RoboCup 2D 仿真组老牌强队Mersad 2005的完整源代码
💻 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 <FieldData.h>#include <assert.h>// Temp#include <iostream>using namespace std;FieldData::FieldData(){	rightSideRate = 1;	penaltySideRate = 1;}int FieldData::getFlagId(const SExpression &exp) const{	switch (exp[1]->toString()[0])	{		case 'c':			if (exp.size() <= 2)				return 0;			switch (exp[2]->toString()[0])			{				case 't': return 3;				case 'b': return 4;			}			assert(0);		case 't':			switch (exp[2]->toString()[0])			{				case '0': return 19;				case 'l':					switch (exp[3]->toString()[0])					{						case '1': return 21;						case '2': return 22;						case '3': return 23;						case '4': return 24;						case '5': return 25;					}					assert(0);				case 'r':					switch (exp[3]->toString()[0])					{						case '1': return 26;						case '2': return 27;						case '3': return 28;						case '4': return 29;						case '5': return 30;					}					assert(0);			}		case 'b':			switch (exp[2]->toString()[0])			{				case '0': return 20;				case 'l':					switch (exp[3]->toString()[0])					{						case '1': return 31;						case '2': return 32;						case '3': return 33;						case '4': return 34;						case '5': return 35;					}					assert(0);				case 'r':					switch (exp[3]->toString()[0])					{						case '1': return 36;						case '2': return 37;						case '3': return 38;						case '4': return 39;						case '5': return 40;					}					assert(0);			}		case 'l':			switch (exp[2]->toString()[0])			{				case '0': return 17;				case 't':					if (exp.size() <= 3)						return 1;					switch (exp[3]->toString()[0])					{					case '1': 						return 41;					case '2': 						return 42;					case '3': 						return 43;					}					assert(0);				case 'b':					if (exp.size() <= 3)						return 2;					switch (exp[3]->toString()[0])					{					case '1': 						return 44;					case '2': 						return 45;					case '3': 						return 46;					}					assert(0);			}				case 'r':			switch (exp[2]->toString()[0])			{				case '0': return 18;				case 't':					if (exp.size() <= 3)						return 5;					switch (exp[3]->toString()[0])					{					case '1': 						return 47;					case '2': 						return 48;					case '3': 						return 49;					}					assert(0);				case 'b':					if (exp.size() <= 3)						return 6;					switch (exp[3]->toString()[0])					{					case '1': 						return 50;					case '2':						return 51;					case '3': 						return 52;					}					assert(0);			}		case 'p':			switch (exp[2]->toString()[0])			{				case 'l':					switch (exp[3]->toString()[0])					{					case 't': 						return 7;					case 'c': 						return 8;					case 'b': 						return 9;					}					assert(0);				case 'r':					switch (exp[3]->toString()[0])					{					case 't': 						return 10;					case 'c': 						return 11;					case 'b': 						return 12;					}					assert(0);			}					case 'g':			switch (exp[2]->toString()[0])			{				case 'l':					switch (exp[3]->toString()[0])					{					case 't': 						return 13;					case 'b': 						return 14;					}					assert(0);				case 'r':					switch (exp[3]->toString()[0])					{					case 't': 						return 15;					case 'b': 						return 16;					}					assert(0);			}	}	assert(0);	return 0;}int FieldData::getGoalId(const SExpression &exp) const{	if (exp[1]->toString()[0] == 'l') return 0;	if (exp[1]->toString()[0] == 'r') return 1;	assert(0);	return 0;}int FieldData::getLineId(const SExpression &exp) const{	if (exp[1]->toString()[0] == 'l') return 0;	if (exp[1]->toString()[0] == 'r') return 1;	if (exp[1]->toString()[0] == 't') return 2;	if (exp[1]->toString()[0] == 'b') return 3;	assert(0);	return 0;}float FieldData::getPrependOrient(int id) const{	int reverseValue;		reverseValue = rightSideRate * penaltySideRate;	if (reverseValue == 1)		switch(id)		{		case 0: // Left Line			return 180;		case 1: // Right Line			return 0;		case 2: // Top Line			return 90;		case 3: // Button Line			return -90;		}	else		switch(id)		{		case 1: // Right Line			return 180;		case 0: // Left Line			return 0;		case 3: // Button Line			return 90;		case 2: // Top Line			return -90;		}	assert(0);	return 0;}Point FieldData::getFlagPos(int flagId) const{	Point returnPos;	int reverseValue = rightSideRate * penaltySideRate;	if (flagId == 0)	{		returnPos.x = 0;		returnPos.y = 0;	}		else if (flagId == 1)	{		returnPos.x = -52.5;		returnPos.y = +34;	}		else if (flagId == 2)	{		returnPos.x = -52.5;		returnPos.y = -34;	}		else if (flagId == 3)	{		returnPos.x = 0;		returnPos.y = +34;	}		else if (flagId == 4)	{		returnPos.x = 0;		returnPos.y = -34;	}		else if (flagId == 5)	{		returnPos.x = 52.5;		returnPos.y = +34;	}	else if (flagId == 6)	{		returnPos.x = 52.5;		returnPos.y = -34;	}	else if (flagId == 7)	{		returnPos.x = -36.2;		returnPos.y = +20;	}	else if (flagId == 8)	{		returnPos.x = -36.2;		returnPos.y = 0;	}	else if (flagId == 9)	{		returnPos.x = -36.2;		returnPos.y = -20;	}	else if (flagId == 10)	{		returnPos.x = 36.2;		returnPos.y = +20;	}	else if (flagId == 11)	{		returnPos.x = 36.2;		returnPos.y = 0;	}	else if (flagId == 12)	{		returnPos.x = 36.2;		returnPos.y = -20;	}	else if (flagId == 13)	{		returnPos.x = -52.5;		returnPos.y = 7.32;	}	else if (flagId == 14)	{		returnPos.x = -52.5;		returnPos.y = -7.32;	}	else if (flagId == 15)	{		returnPos.x = 52.5;		returnPos.y = +7.32;	}	else if (flagId == 16)	{		returnPos.x = 52.5;		returnPos.y = -7.32;	}	else if (flagId == 17)	{		returnPos.x = -57.5;		returnPos.y = 0;	}	else if (flagId == 18)	{		returnPos.x = 57.5;		returnPos.y = 0;	}		else if (flagId == 19)	{		returnPos.x = 0;		returnPos.y = +39;	}		else if (flagId == 20)	{		returnPos.x = 0;		returnPos.y = -39;	}	else if (flagId == 21)	{		returnPos.x = -10;		returnPos.y = 39;	}	else if (flagId == 22)	{		returnPos.x = -20;		returnPos.y = 39;	}		else if (flagId == 23)	{		returnPos.x = -30;		returnPos.y = 39;	}		else if (flagId == 24)	{		returnPos.x = -40;		returnPos.y = 39;	}	else if (flagId == 25)	{		returnPos.x = -50;		returnPos.y = 39;	}	else if (flagId == 26)	{		returnPos.x = 10;		returnPos.y = 39;	}		else if (flagId == 27)	{		returnPos.x = 20;		returnPos.y = 39;	}	else if (flagId == 28)	{		returnPos.x = 30;		returnPos.y = 39;	}	else if (flagId == 29)	{		returnPos.x = 40;		returnPos.y = 39;	}	else if (flagId == 30)	{		returnPos.x = 50;		returnPos.y = 39;	}	else if (flagId == 31)	{		returnPos.x = -10;		returnPos.y = -39;	}	else if (flagId == 32)	{		returnPos.x = -20;		returnPos.y = -39;	}		else if (flagId == 33)	{		returnPos.x = -30;		returnPos.y = -39;	}		else if (flagId == 34)	{		returnPos.x = -40;		returnPos.y = -39;	}		else if (flagId == 35)	{		returnPos.x = -50;		returnPos.y = -39;	}		else if (flagId == 36)	{		returnPos.x = 10;		returnPos.y = -39;	}		else if (flagId == 37)	{		returnPos.x = 20;		returnPos.y = -39;	}		else if (flagId == 38)	{		returnPos.x = 30;		returnPos.y = -39;	}		else if (flagId == 39)	{		returnPos.x = 40;		returnPos.y = -39;	}	else if (flagId == 40)	{		returnPos.x = 50;		returnPos.y = -39;	}	else if (flagId == 41)	{		returnPos.x = -57.5;		returnPos.y = 10;	}	else if (flagId == 42)	{		returnPos.x = -57.5;		returnPos.y = 20;	}	else if (flagId == 43)	{		returnPos.x = -57.5;		returnPos.y = 30;	}	else if (flagId == 44)	{		returnPos.x = -57.5;		returnPos.y = -10;	}		else if (flagId == 45)	{		returnPos.x = -57.5;		returnPos.y = -20;	}	else if (flagId == 46)	{		returnPos.x = -57.5;		returnPos.y = -30;	}	else if (flagId == 47)	{		returnPos.x = 57.5;		returnPos.y = 10;	}	else if (flagId == 48)	{		returnPos.x = 57.5;		returnPos.y = 20;	}	else if (flagId == 49)	{		returnPos.x = 57.5;		returnPos.y = 30;	}	else if (flagId == 50)	{		returnPos.x = 57.5;		returnPos.y = -10;	}	else if (flagId == 51)	{		returnPos.x = 57.5;		returnPos.y = -20;	}	else if (flagId == 52)	{		returnPos.x = 57.5;		returnPos.y = -30;	}	else		assert(0);	returnPos.x *= reverseValue;	returnPos.y *= reverseValue;	return returnPos;}Point FieldData::getGoalPos(int goalId) const{	Point returnPos;	int reverseValue = rightSideRate * penaltySideRate;		if(goalId == 0)	{		returnPos.x = -52.5;		returnPos.y = 0;	}	else if(goalId == 1)	{		returnPos.x = 52.5;		returnPos.y = 0;	}	else		assert(0);	returnPos.x *= reverseValue;	returnPos.y *= reverseValue;		return returnPos;}Point FieldData::getLinePos(int lineId) const{	Point returnPos;	int reverseValue = rightSideRate * penaltySideRate;	if(lineId == 0)	{		returnPos.x = -52.5;		returnPos.y = 0;	}	else if(lineId == 1)	{		returnPos.x = 52.5;		returnPos.y = 0;	}	else if(lineId == 2)	{		returnPos.x = 0;		returnPos.y = 34;	}	else if(lineId == 3)	{		returnPos.x = 0;		returnPos.y = -34;	}	else		assert(0);	returnPos.x *= reverseValue;	returnPos.y *= reverseValue;	return returnPos;}void FieldData::setRightSideRate(int rightSideRateArg){	rightSideRate = rightSideRateArg;}void FieldData::setPenaltySideRate(int penaltySideRateArg){	penaltySideRate = penaltySideRateArg;}

⌨️ 快捷键说明

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