kicktogoal.cpp.svn-base

来自「一个巴西大学编写的2D仿真组足球机器人程序」· SVN-BASE 代码 · 共 85 行

SVN-BASE
85
字号
#include "KickToGoal.h"SoccerCommand KickToGoal::primaryAction(){   return primarySoc;}SoccerCommand KickToGoal::cuncurrentAction(){   return turnNeckToObject( OBJECT_BALL, primarySoc );}KickToGoal::KickToGoal():Behavior(){   posGoal.setX(PITCH_LENGTH/2.0);   posGoal.setY(0.4 * SS->getGoalWidth());}void KickToGoal::kickToGoal(){   posGoal.setY( posGoal.getY() * ( getPositionYOpponent1() ) );   primarySoc = kickTo( posGoal, SS->getBallSpeedMax() );}double KickToGoal::getPositionYOpponent1(){   if( (WM->isVisible( OBJECT_OPPONENT_1 )) && (WM->getAgentGlobalPosition().getX() > 25 ))   {      if(WM->getSide() == SIDE_LEFT)      {         //verifica se o goleiro esta fora da area de chute a gol, do lado esquerdo do campo.         if( abs((int)WM->getRelativeAngle( OBJECT_FLAG_G_L_T, false) - (int)WM->getRelativeAngle( OBJECT_GOAL_L, false )) < abs( (int)WM->getRelativeAngle( OBJECT_OPPONENT_1, false) - (int)WM->getRelativeAngle( OBJECT_GOAL_L, false )))         return 0;         //verifica qual angulo esta mais aberto para o chute.         else if( abs((int)WM->getRelativeAngle( OBJECT_FLAG_G_L_T, false )-  (int)WM->getRelativeAngle(OBJECT_OPPONENT_1,false))  >  abs((int)WM->getRelativeAngle(OBJECT_OPPONENT_1,false) - (int)WM->getRelativeAngle(OBJECT_FLAG_G_L_B,false) ) )          return 1; //right         else return -1; //left      }      else if( WM->getSide() == SIDE_RIGHT)      {         //verifica se o goleiro esta fora da area de chute a gol, do lado direito do campo.         if( abs((int)WM->getRelativeAngle( OBJECT_FLAG_G_R_T, false) - (int)WM->getRelativeAngle( OBJECT_GOAL_R, false )) < abs( (int)WM->getRelativeAngle( OBJECT_OPPONENT_1, false) - (int)WM->getRelativeAngle( OBJECT_GOAL_R, false )))         return 0;          //verifica qual angulo esta mais aberto para o chute.         else if( abs( (int)WM->getRelativeAngle(OBJECT_FLAG_G_R_T,false) - (int)WM->getRelativeAngle(OBJECT_OPPONENT_1,false)) > abs( (int)WM->getRelativeAngle(OBJECT_OPPONENT_1,false) - (int)WM->getRelativeAngle(OBJECT_FLAG_G_R_B,false)))          return 1; //left          else return -1; //right      }   }   else return (-1 + 2*(WM->getCurrentCycle()%2));}/*! Este metodo configura o agente a chutar a bola para frente em direcao ao canto direito do gol com    uma potencia maxima. */void KickToGoal::kickToGoalRight(){   double pos;   pos = 0.4 * SS->getGoalWidth();   VecPosition posGoal( PITCH_LENGTH/2.0,pos);   primarySoc = kickTo( posGoal, SS->getBallSpeedMax() ); // kick maximal}/*! Este metodo configura faz o agente chutar a bola para frente em direcao ao canto esquerdo do gol com   uma potencia maxima.  */void KickToGoal::kickToGoalLeft(){   double pos;   pos = -0.4 * SS->getGoalWidth();   VecPosition posGoal( PITCH_LENGTH/2.0,pos);   primarySoc = kickTo( posGoal, SS->getBallSpeedMax() ); // kick maximal}/*! Este metodo faz o agente chutar a bola para frente em direcao ao centro do gol com    uma potencia maxima.     \return um comando de chute a goal */void KickToGoal::kickToGoalCenter(){   VecPosition posGoal( PITCH_LENGTH/2.0, 0 );   primarySoc = kickTo( posGoal, SS->getBallSpeedMax() ); // kick maximal}

⌨️ 快捷键说明

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