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

📄 soccertypes.cpp

📁 2003年RoboCup仿真组世界冠军源代码 足球机器人 仿真组 的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
          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 << "\n";    o = OBJECT_ILLEGAL;    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, ObjectT objGoalie ){  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_TEAMMATES_NO_GOALIE:                                return isTeammate( o ) && isKnownPlayer( o ) &&                                      o != objGoalie;        case OBJECT_SET_ILLEGAL:    default:                   break;  }  return false;}/*! This method returns a boolean value which indicates whether a given player    type belongs to a specific set. The set PS_DEFENDERS for example contains    both the defender sweeper and the wing defenders. */bool SoccerTypes::isPlayerTypeInSet( PlayerT p, PlayerSetT p_s ){  switch( p_s )  {    case PS_DEFENDERS:       return p == PT_DEFENDER_CENTRAL || p == PT_DEFENDER_WING;    case PS_MIDFIELDERS:      return p == PT_MIDFIELDER_CENTER || p ==  PT_MIDFIELDER_WING;    case PS_ATTACKERS:      return p == PT_ATTACKER_WING || p == PT_ATTACKER;    case PS_ALL:      return true;    default:       break;  }  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;}/*! This method determines whether object o is a player without checking    whether its number or side is available.    \param o an object type    \return bool indicating whether o is a known player (true) or not    (false) */bool SoccerTypes::isPlayer( ObjectT o ){  return isKnownPlayer( o )           || o == OBJECT_TEAMMATE_UNKNOWN ||         o == OBJECT_OPPONENT_UNKNOWN || o == OBJECT_PLAYER_UNKNOWN;}/*! This method determines whether object o is a known player, thus    containing a number    \param o an object type    \return bool indicating whether o is a known player (true) or not    (false) */bool SoccerTypes::isKnownPlayer( ObjectT o ){  return (o >= OBJECT_OPPONENT_1 && o <= OBJECT_OPPONENT_11) ||         (o >= OBJECT_TEAMMATE_1 && o <= OBJECT_TEAMMATE_11);}/*! This method determines whether object o is a goalie = teammate number is 1    (for now)    \param o an object type    \return bool indicating whether o is a goalie (true) or not (false) */bool SoccerTypes::isGoalie( ObjectT o ){  return o == OBJECT_TEAMMATE_1 || o == OBJECT_OPPONENT_1;}/*! This method determines whether object o is the ball    \param o an object type    \return bool indicating whether o is the ball (true) or not (false) */bool SoccerTypes::isBall( ObjectT o ){  return o == OBJECT_BALL;}/*! This method returns the object representing the own goal    \param s own side    \return object of the own goal, OBJECT_ILLEGAL when s is SIDE_ILLEGAL*/ObjectT SoccerTypes::getOwnGoal( SideT s ){  if( SIDE_LEFT == s )    return OBJECT_GOAL_L;  else if( SIDE_RIGHT == s )    return OBJECT_GOAL_R;  cerr << "(SoccerTypes::isOwnGoal) Wrong side argument" << "\n";  return OBJECT_ILLEGAL;}/*! This method returns the object representing the opponent goal    \param s own side    \return object of the goal opponent, OBJECT_ILLEGAL when s is    SIDE_ILLEGAL*/ObjectT SoccerTypes::getGoalOpponent( SideT s ){  if( SIDE_LEFT == s )    return OBJECT_GOAL_R;  else if( SIDE_RIGHT == s )    return OBJECT_GOAL_L;  cerr << "(SoccerTypes::isGoalOpponent) Wrong side argument" << "\n";  return OBJECT_ILLEGAL;}/*! This method returns the global position on the field of a flag (a goal    is also a flag). Since the global positions for both teams differ, the    side of the agent team is also needed. Note that the global    positions of the flags will not change in the second half.    \param o flag of which global position should be determined    \param s side of your team.    \param dGoalWidth for some flags the goalWidth is necessary (default 14.02)    \return VecPosition representing the global position. x and y value are            both UnknownDoubleValue when o is not a flag or goal. */VecPosition SoccerTypes::getGlobalPositionFlag( ObjectT o, SideT s,                                                double dGoalWidth ){  VecPosition pos;  if( !(isFlag(o) || isGoal(o)) )      return VecPosition(UnknownDoubleValue, UnknownDoubleValue);  switch( o ) // for every object the global position is entered  {    case OBJECT_GOAL_L:      pos.setVecPosition( -PITCH_LENGTH/2.0, 0.0 );                  break;    case OBJECT_GOAL_R:      pos.setVecPosition(  PITCH_LENGTH/2.0, 0.0 );                  break;    case OBJECT_FLAG_L_T:      pos.setVecPosition( -PITCH_LENGTH/2.0, -PITCH_WIDTH/2.0 );     break;    case OBJECT_FLAG_T_L_50:      pos.setVecPosition( -50.0, -PITCH_WIDTH/2.0 - PITCH_MARGIN );  break;    case OBJECT_FLAG_T_L_40:      pos.setVecPosition( -40.0, -PITCH_WIDTH/2.0 - PITCH_MARGIN );  break;    case OBJECT_FLAG_T_L_30:      pos.setVecPosition( -30.0, -PITCH_WIDTH/2.0 - PITCH_MARGIN );  break;    case OBJECT_FLAG_T_L_20:      pos.setVecPosition( -20.0, -PITCH_WIDTH/2.0 - PITCH_MARGIN );  break;    case OBJECT_FLAG_T_L_10:      pos.setVecPosition( -10.0, -PITCH_WIDTH/2.0 - PITCH_MARGIN );  break;    case OBJECT_FLAG_T_0:      pos.setVecPosition(   0.0, -PITCH_WIDTH/2.0 - PITCH_MARGIN );  break;    case OBJECT_FLAG_C_T:      pos.setVecPosition(   0.0, -PITCH_WIDTH/2.0);                  break;    case OBJECT_FLAG_T_R_10:      pos.setVecPosition(  10.0,  -PITCH_WIDTH/2.0 - PITCH_MARGIN);  break;    case OBJECT_FLAG_T_R_20:      pos.setVecPosition(  20.0,  -PITCH_WIDTH/2.0 - PITCH_MARGIN);  break;    case OBJECT_FLAG_T_R_30:      pos.setVecPosition(  30.0,  -PITCH_WIDTH/2.0 - PITCH_MARGIN);  break;    case OBJECT_FLAG_T_R_40:      pos.setVecPosition(  40.0,  -PITCH_WIDTH/2.0 - PITCH_MARGIN);  break;    case OBJECT_FLAG_T_R_50:      pos.setVecPosition(  50.0,  -PITCH_WIDTH/2.0 - PITCH_MARGIN);  break;    case OBJECT_FLAG_R_T:      pos.setVecPosition( PITCH_LENGTH/2.0,  -PITCH_WIDTH/2.0 );     break;    case OBJECT_FLAG_R_T_30:      pos.setVecPosition( PITCH_LENGTH/2.0 + PITCH_MARGIN,  -30.0 ); break;    case OBJECT_FLAG_R_T_20:      pos.setVecPosition( PITCH_LENGTH/2.0 + PITCH_MARGIN,  -20.0 ); break;    case OBJECT_FLAG_R_T_10:      pos.setVecPosition( PITCH_LENGTH/2.0 + PITCH_MARGIN,  -10.0 ); break;    case OBJECT_FLAG_G_R_T:      pos.setVecPosition( PITCH_LENGTH/2.0,  -dGoalWidth/2.0 );      break;    case OBJECT_FLAG_R_0:      pos.setVecPosition( PITCH_LENGTH/2.0 + PITCH_MARGIN,  0.0 );   break;    case OBJECT_FLAG_G_R_B:      pos.setVecPosition( PITCH_LENGTH/2.0,  dGoalWidth/2.0 );       break;    case OBJECT_FLAG_R_B_10:      pos.setVecPosition( PITCH_LENGTH/2.0 + PITCH_MARGIN,  10.0 );  break;    case OBJECT_FLAG_R_B_20:      pos.setVecPosition( PITCH_LENGTH/2.0 + PITCH_MARGIN,  20.0 );  break;    case OBJECT_FLAG_R_B_30:      pos.setVecPosition( PITCH_LENGTH/2.0 + PITCH_MARGIN,  30.0 );  break;    case OBJECT_FLAG_R_B:      pos.setVecPosition( PITCH_LENGTH/2.0,  PITCH_WIDTH/2.0 );      break;    case OBJECT_FLAG_B_R_50:      pos.setVecPosition(  50.0, PITCH_WIDTH/2.0 + PITCH_MARGIN );   break;    case OBJECT_FLAG_B_R_40:      pos.setVecPosition(  40.0, PITCH_WIDTH/2.0 + PITCH_MARGIN );   break;    case OBJECT_FLAG_B_R_30:      pos.setVecPosition(  30.0, PITCH_WIDTH/2.0 + PITCH_MARGIN );   break;    case OBJECT_FLAG_B_R_20:      pos.setVecPosition(  20.0, PITCH_WIDTH/2.0 + PITCH_MARGIN );   break;    case OBJECT_FLAG_B_R_10:      pos.setVecPosition(  10.0, PITCH_WIDTH/2.0 + PITCH_MARGIN );   break;    case OBJECT_FLAG_C_B:      pos.setVecPosition(   0.0, PITCH_WIDTH/2.0 );                  break;    case OBJECT_FLAG_B_0:      pos.setVecPos

⌨️ 快捷键说明

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