📄 kicktogoal.cpp.svn-base
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -