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

📄 soccertypes.c

📁 uva trilearn的robocup源程序
💻 C
📖 第 1 页 / 共 5 页
字号:
      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        {          case 1:  o = OBJECT_TEAMMATE_1;  break;     // and find team member          case 2:  o = OBJECT_TEAMMATE_2;  break;          case 3:  o = OBJECT_TEAMMATE_3;  break;          case 4:  o = OBJECT_TEAMMATE_4;  break;          case 5:  o = OBJECT_TEAMMATE_5;  break;          case 6:  o = OBJECT_TEAMMATE_6;  break;          case 7:  o = OBJECT_TEAMMATE_7;  break;          case 8:  o = OBJECT_TEAMMATE_8;  break;          case 9:  o = OBJECT_TEAMMATE_9;  break;          case 10: o = OBJECT_TEAMMATE_10; break;          case 11: o = OBJECT_TEAMMATE_11; break;          default: o = OBJECT_ILLEGAL;        }        if( ptrStr[0] != ')' && ptrStr[1] == 'g' ) // goalie          *isGoalie = true;      }      else        o = OBJECT_TEAMMATE_UNKNOWN;                  // (p team) but no nr    }    else                                              // not a teammate    {      ptrStr++;      if( Parse::gotoFirstSpaceOrClosingBracket( &ptrStr ) == ' ' )      {                                               // also team number        switch( Parse::parseFirstInt( &ptrStr ) )     // get team numer        {          case 1:  o = OBJECT_OPPONENT_1;  break;     // and return opponent          case 2:  o = OBJECT_OPPONENT_2;  break;          case 3:  o = OBJECT_OPPONENT_3;  break;          case 4:  o = OBJECT_OPPONENT_4;  break;          case 5:  o = OBJECT_OPPONENT_5;  break;          case 6:  o = OBJECT_OPPONENT_6;  break;          case 7:  o = OBJECT_OPPONENT_7;  break;          case 8:  o = OBJECT_OPPONENT_8;  break;          case 9:  o = OBJECT_OPPONENT_9;  break;          case 10: o = OBJECT_OPPONENT_10; break;          case 11: o = OBJECT_OPPONENT_11; break;          default: o = OBJECT_ILLEGAL;        }        if( ptrStr[0] != ')' && ptrStr[1] == 'g' ) // goalie          *isGoalie = true;      }      else        o = OBJECT_OPPONENT_UNKNOWN;                  // number not known    }    break;  default:    cerr << "(SoccerTypes::getObjectFromStr) Unknown msg: " <<  ptrStr << endl;    char buf[1000];    printf("%d, %s\n", o, SoccerTypes::getObjectStr(buf,o,"1") );    break;  }  // go to the end of the object  Parse::gotoFirstOccurenceOf( ')', &ptrStr );  *str=ptrStr;  return o;}/*! This method returns the index of an object relative to the first object    in that set.    The index is always 1 smaller than its number, so OBJECT_OPPONENT_1    will become 0. This can be used for indexing an array of objects.    \param o ObjectT type of object of which the index has to be calculated    \return index of object or -1 when o was not a correct object */int SoccerTypes::getIndex( ObjectT o ){  if( o >= OBJECT_OPPONENT_1 && o <= OBJECT_OPPONENT_11 )    return o - OBJECT_OPPONENT_1;  else if( o >= OBJECT_TEAMMATE_1 && o <= OBJECT_TEAMMATE_11 )    return o - OBJECT_TEAMMATE_1;  else if( o >= OBJECT_GOAL_L && o <= OBJECT_GOAL_R )    return o - OBJECT_GOAL_L;  else if( o >= OBJECT_FLAG_L_T && o <= OBJECT_FLAG_C )    return o - OBJECT_FLAG_L_T + 2; // 2 added for the two goals  else if( o >= OBJECT_LINE_L && o <= OBJECT_LINE_T )    return o - OBJECT_LINE_L;  else    return -1;}/*! This method returns the object type of a teammate with index iIndex. When    iIndex equals 3 for example OBJECT_TEAMMATE_4 is returned.    \param iIndex index of teammate range is [0..10]    \return object type corresponding to this index */ObjectT SoccerTypes::getTeammateObjectFromIndex( int iIndex ){  return (ObjectT) ( OBJECT_TEAMMATE_1 + iIndex );}/*! This method returns the object type of an opponent with index iIndex. When    iIndex equals 9 for example OBJECT_OPPONENT_10 is returned.    \param iIndex index of opponent range is [0..10]    \return object type corresponding to this index */ObjectT SoccerTypes::getOpponentObjectFromIndex( int iIndex ){  return (ObjectT) ( OBJECT_OPPONENT_1 + iIndex );}/*! This method returns a boolean indicating whether the object o is part of the    object set o_s. OBJECT_TEAMMATE_1 as o and OBJECT_SET_TEAMMATES will    return for example the value true.    \param o ObjectT of which should be checked whether it is a part of o_s    \param o_s ObjectSet in which o should be    \return true when o is included in set o_s, false otherwise */bool SoccerTypes::isInSet( ObjectT o, ObjectSetT o_g ){  switch( o_g )  {    case OBJECT_SET_TEAMMATES: return isTeammate( o ) && isKnownPlayer( o );    case OBJECT_SET_OPPONENTS: return isOpponent( o ) && isKnownPlayer( o );    case OBJECT_SET_PLAYERS:   return isPlayer  ( o ) && isKnownPlayer( o );    case OBJECT_SET_FLAGS:     return isFlag    ( o );    case OBJECT_SET_LINES:     return isLine    ( o );    case OBJECT_SET_ILLEGAL:    default:                   return false;  }  return false;}/*! This method determines whether object o is a flag.    \param o an object type    \return bool indicating whether o is a flag (return true) or not (false) */bool SoccerTypes::isFlag( ObjectT o ){  return ( o >= OBJECT_FLAG_L_T && o <= OBJECT_FLAG_C ) ||         ( o >= OBJECT_GOAL_L   && o <= OBJECT_GOAL_R        );}/*! This method determines whether object o is a line.     \param o an object type     \return bool indicating whether o is a line return true) or not (false) */bool SoccerTypes::isLine( ObjectT o ){  return o >= OBJECT_LINE_L && o <= OBJECT_LINE_T;}/*! This method determines whether object o is a goal    \param o an object type    \return bool indicating whether o is a goal (return true) or not (false) */bool SoccerTypes::isGoal( ObjectT o ){  return o == OBJECT_GOAL_L || o == OBJECT_GOAL_R;}/*! This method determines whether object o is a teammate    \param o an object type    \return bool indicating whether o is a teammate (true) or not (false) */bool SoccerTypes::isTeammate( ObjectT o ){  return o >= OBJECT_TEAMMATE_1 && o <= OBJECT_TEAMMATE_UNKNOWN;}/*! This method determines whether object o is an opponent    \param o an object type    \return bool indicating whether o is an opponent (true) or not (false) */bool SoccerTypes::isOpponent( ObjectT o ){  return o >= OBJECT_OPPONENT_1 && o <= OBJECT_OPPONENT_UNKNOWN;}

⌨️ 快捷键说明

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