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

📄 soccertypes.cpp

📁 2003年RoboCup仿真组世界冠军源代码 足球机器人 仿真组 的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/*! This method sets the sense time for a feature.    \param time sense time that applies to this feature. */bool Feature::setTimeSense( Time time ){  m_timeSense = time;  return true;}/*! This method returns the sense time for a feature.    \return time that is related to this feature. */Time Feature::getTimeSense( ){  return m_timeSense;}/*! This method sets the hear time for a feature.    \param time hear time that applies to this feature. */bool Feature::setTimeHear( Time time ){  m_timeHear = time;  return true;}/*! This method returns the hear time for a feature.    \return time that is related to this feature. */Time Feature::getTimeHear( ){  return m_timeHear;}/*! This method sets the object for a feature.    \param object object type that applies to this feature. */bool Feature::setObject ( ObjectT object ){  m_object = object;  return true;}/*! This method returns the object related to this feature.    \return object stored with this feature. */ObjectT Feature::getObject( ){  return m_object;}/*! This method sets the information for a feature.    \param d double information that applies to this feature. */bool Feature::setInfo( double d ){  m_dInfo = d;  return true;}/*! This method returns the information for a feature.    \return information stored with this feature. */double Feature::getInfo( ){  return m_dInfo;}/*! This method sets the posiiton corresponding to this feature.    \return boolean indicating whether update was succesfull. */bool Feature::setVec( VecPosition   pos ){  m_vec = pos;  return true;}/*! This method returns the position information for a feature.    \return position information stored with this feature. */VecPosition Feature::getVec( ){  return m_vec;}/*! This method sets the command corresponding to this feature.    \return boolean indicating whether update was succesfull. */bool Feature::setCommand( SoccerCommand soc ){  m_soc = soc;  return true;}/*! This method returns the command corresponding to this feature.    \return command stored with this feature. */SoccerCommand Feature::getCommand( ){  return m_soc;}/*****************************************************************************//********************* CLASS SOCCERTYPES *************************************//*****************************************************************************//*! This constant defines the string names corresponding to the    ObjectT names, defined in SoccerTypes.h. Players are not added    since they depend on the team name. Note that the order is    important, since the names are in the same order as the ObjectT    enumeration. */const char * ObjectNames[] ={"(b)", "(g l)", "(g r)", "(g ?)", "(l l)", "(l r)", "(l b)", "(l t)", "(f l t)","(f t l 50)", "(f t l 40)", "(f t l 30)", "(f t l 20)", "(f t l 10)", "(f t 0)","(f c t)","(f t r 10)", "(f t r 20)", "(f t r 30)", "(f t r 40)","(f t r 50)", "(f r t)", "(f r t 30)", "(f r t 20)","(f r t 10)","(f g r t)" , "(f r 0)", "(f g r b)" , "(f r b 10)", "(f r b 20)","(f r b 30)", "(f r b)"   , "(f b r 50)", "(f b r 40)", "(f b r 30)","(f b r 20)", "(f b r 10)", "(f c b)"   , "(f b 0)"   , "(f b l 10)","(f b l 20)", "(f b l 30)", "(f b l 40)", "(f b l 50)", "(f l b)","(f l b 30)", "(f l b 20)", "(f l b 10)", "(f g l b)" , "(f l 0)","(f g l t)" , "(f l t 10)", "(f l t 20)", "(f l t 30)", "(f p l t)","(f p l c)", "(f p l b)",   "(f p r t)",  "(f p r c)",  "(f p r b)", "(f c)" };/*! This method returns the string that corresponds to a specific object. This    string name is exactly the same as the (short) name of the RoboCup    Simulation.    \param strBuf is the string in which the string representation is stored    \param o ObjectT that has to be converted to the string representation    \param strTeamName teamname that should be placed in case of player object    \return pointer to strBuf, which contains the string representation */char* SoccerTypes::getObjectStr( char* strBuf, ObjectT o,                                  const char *strTeamName ){  if( o >= OBJECT_BALL && o <=   OBJECT_FLAG_C )    sprintf( strBuf, ObjectNames[(int)o] );  else if( isKnownPlayer( o ) && strTeamName != NULL )    sprintf( strBuf, "(p %s %d)", strTeamName, getIndex( o ) + 1);  else if( isKnownPlayer( o ) && isTeammate( o ) )    sprintf( strBuf, "(p l %d)", getIndex( o ) + 1);  else if( isKnownPlayer( o ) && isOpponent( o ) )    sprintf( strBuf, "(p r %d)", getIndex( o ) + 1);  else if( o == OBJECT_OPPONENT_UNKNOWN || o == OBJECT_TEAMMATE_UNKNOWN )    sprintf( strBuf, "(p %s)", strTeamName );  else if( o == OBJECT_PLAYER_UNKNOWN )    sprintf( strBuf, "(p)" );  else if( o == OBJECT_UNKNOWN )    sprintf( strBuf, "(unknown)" );  else    sprintf( strBuf, "illegal: %d", (int)o );  return strBuf;}/*! This method returns an ObjectT that corresponds to the string    passed as the first argument. The string representation equals the    representation used in the Soccer Server. Format is with    parenthesis, so possible arguments for str are (ball), (p Team_L    1), etc.    \param str pointer to string containing string representation of object    \param isGoalie bool representing the fact whether object is a goalie    \param strMyTeamName in case of player or opponent object, own teamname           has to be matched, when it matches it is teammate otherwise opponent    \return return the corresponding ObjectT, OBJECT_ILLEGAL in case    of error */ObjectT SoccerTypes::getObjectFromStr( char** str, bool *isGoalie,                                       const char* strMyTeamName ){  ObjectT o = OBJECT_ILLEGAL;  char* ptrStr = *str;  *isGoalie = false;  switch( ptrStr[1] )  {    case 'b':                       // (ball)    case 'B':                       // (B) in case of ball very close       o = OBJECT_BALL; break;    case 'G':       o = OBJECT_GOAL_UNKNOWN;      // (G) in case of goal very close, ignored      break;                        // (g l) or (g r) goal left or goal right    case 'g': o = (ptrStr[3] == 'l') ? OBJECT_GOAL_L : OBJECT_GOAL_R; break;    case 'l':                       // (l l), (l r), (l b) or (l t)      switch( ptrStr[3] )      {        case 'l': o = OBJECT_LINE_L;  break;        case 'r': o = OBJECT_LINE_R;  break;        case 'b': o = OBJECT_LINE_B;  break;        case 't': o = OBJECT_LINE_T;  break;        default:  o = OBJECT_ILLEGAL; break;      }      break;    case 'F':                       // (F) unkown flag very close.. ignored      o = OBJECT_UNKNOWN; break;    case 'f':                       // (f ...),  many options...      switch( ptrStr[3] )      {        case 'l':                   // (f l ... lines on left part of field          if( ptrStr[6] == ')' )    // only one character at index '5'          {            switch( ptrStr[5] )            {              case '0': o = OBJECT_FLAG_L_0; break; // (f l 0)              case 't': o = OBJECT_FLAG_L_T; break; // (f l t)              case 'b': o = OBJECT_FLAG_L_B; break; // (f l b)              default:  o = OBJECT_ILLEGAL;  break;            }          }          else                      // more than one character from index '5'          {            switch( ptrStr[7] )            {              case '1':             // (f l t 10) or (f l b 10)                o = (ptrStr[5]=='t')? OBJECT_FLAG_L_T_10 :OBJECT_FLAG_L_B_10;                break;              case '2':             // (f l t 20) or (f l b 20)                o = (ptrStr[5]=='t')? OBJECT_FLAG_L_T_20 :OBJECT_FLAG_L_B_20;                break;              case '3':             // (f l t 30) or (f l b 30)                o = (ptrStr[5]=='t')? OBJECT_FLAG_L_T_30 :OBJECT_FLAG_L_B_30;                break;              default:                o = OBJECT_ILLEGAL;                break;            }          }          break;        case 'r':                   // (f r ... lines on right side of field          if( ptrStr[6] == ')' )    // only one character at index '5'          {            switch( ptrStr[5] )            {              case '0': o = OBJECT_FLAG_R_0; break; // (f l 0)              case 't': o = OBJECT_FLAG_R_T; break; // (f l t)              case 'b': o = OBJECT_FLAG_R_B; break; // (f l b)            }          }          else          {            switch( ptrStr[7] )     // more than one character from index '5'            {              case '1':                o = (ptrStr[5]=='t')? OBJECT_FLAG_R_T_10 :OBJECT_FLAG_R_B_10;                break;              case '2':             // (f r t 10) or (f r b 10)                o = (ptrStr[5]=='t')? OBJECT_FLAG_R_T_20 :OBJECT_FLAG_R_B_20;                break;              // (f r t 20) or (f r b 20)              case '3':                o = (ptrStr[5]=='t')? OBJECT_FLAG_R_T_30 :OBJECT_FLAG_R_B_30;                break;              // (f r t 30) or (f r b 30)              default:                o = OBJECT_ILLEGAL;                break;            }          }          break;        case 't':                   // lines on top part of field          if( ptrStr[5] == '0' )            o = OBJECT_FLAG_T_0;    // (f t 0) center flag          else          {            switch( ptrStr[7] )     // rest of the top flags            {              case '1':             // (f t l 10) or (f t r 10)                o = (ptrStr[5]=='l') ? OBJECT_FLAG_T_L_10 : OBJECT_FLAG_T_R_10;                break;              case '2':             // (f t l 20) or (f t r 20)                o = (ptrStr[5]=='l') ? OBJECT_FLAG_T_L_20 : OBJECT_FLAG_T_R_20;                break;              case '3':             // (f t l 30) or (f t r 30)                o = (ptrStr[5]=='l') ? OBJECT_FLAG_T_L_30 : OBJECT_FLAG_T_R_30;                break;              case '4':             // (f t l 40) or (f t r 40)                o = (ptrStr[5]=='l') ? OBJECT_FLAG_T_L_40 : OBJECT_FLAG_T_R_40;                break;              case '5':             // (f t l 50) or (f t r 50)                o = (ptrStr[5]=='l') ? OBJECT_FLAG_T_L_50 : OBJECT_FLAG_T_R_50;                break;            }          }          break;        case 'b':                   // lines on bottom part of field          if( ptrStr[5] == '0')            o = OBJECT_FLAG_B_0;    // (f b 0) center flag          else          {            switch( ptrStr[7] )     // rest of the bottom flags            {              case '1':             // (f b l 10) or (f b r 10)                o = (ptrStr[5]=='l') ? OBJECT_FLAG_B_L_10 : OBJECT_FLAG_B_R_10;                break;              case '2':             // (f b l 20) or (f b r 20)                o = (ptrStr[5]=='l') ? OBJECT_FLAG_B_L_20 : OBJECT_FLAG_B_R_20;                break;              case '3':             // (f b l 30) or (f b r 30)                o = (ptrStr[5]=='l') ? OBJECT_FLAG_B_L_30 : OBJECT_FLAG_B_R_30;                break;              case '4':             // (f b l 40) or (f b r 40)                o = (ptrStr[5]=='l') ? OBJECT_FLAG_B_L_40 : OBJECT_FLAG_B_R_40;                break;              case '5':             // (f b l 50) or (f b r 50)                o = (ptrStr[5]=='l') ? OBJECT_FLAG_B_L_50 : OBJECT_FLAG_B_R_50;                break;            }          }          break;        case 'c':                   // center flags          if( ptrStr[4] == ')' )            o = OBJECT_FLAG_C;      // (f c) flag in midpoint field          else                      // (f c t) or (f c b)            o = (ptrStr[5] == 't') ? OBJECT_FLAG_C_T : OBJECT_FLAG_C_B;          break;        case 'g':                   // goal flags          if( ptrStr[5] == 'l' )    // (g l t) or (g l b)            o = (ptrStr[7] == 't') ? OBJECT_FLAG_G_L_T : OBJECT_FLAG_G_L_B;          else                      // (g r t) or (g r b)            o = (ptrStr[7] == 't') ? OBJECT_FLAG_G_R_T : OBJECT_FLAG_G_R_B;          break;        case 'p':                   // flags at sides penalty area          switch( ptrStr[7] )          {            case 't':               // (p l t) or (p r t) top penalty area              o = (ptrStr[5] == 'l') ? OBJECT_FLAG_P_L_T : OBJECT_FLAG_P_R_T;              break;            case 'c':               // (p l c) or (p r c) center penalty area              o = (ptrStr[5] == 'l') ? OBJECT_FLAG_P_L_C : OBJECT_FLAG_P_R_C;              break;            case 'b':               // (p l b) or (p r b) bottom penalty area              o = (ptrStr[5] == 'l') ? OBJECT_FLAG_P_L_B : OBJECT_FLAG_P_R_B;              break;            default:              o = OBJECT_ILLEGAL;              break;          }          break;        default:          o = OBJECT_ILLEGAL;      }      break; // end flags (finally)  case 'p': // (p team nr) or (p team) or (p) player teammate or opponent  case 'P': // or (P)    ptrStr += 2;    if( Parse::gotoFirstSpaceOrClosingBracket(&ptrStr) == ')' )      o = OBJECT_PLAYER_UNKNOWN; // if (p) or (P) player is unknown.    // check also with quotes since later versions use string around "teamname"    else if( strncmp( ptrStr+1, strMyTeamName, strlen( strMyTeamName )) == 0 ||             strncmp( ptrStr+2, strMyTeamName, strlen( strMyTeamName )) == 0 )    {      ptrStr++;      if( Parse::gotoFirstSpaceOrClosingBracket(&ptrStr) == ' ' )      {                                               // also team number        switch( Parse::parseFirstInt( &ptrStr ) )     // get team number        {

⌨️ 快捷键说明

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