合肥工业大学机器人技术五十六题
题目要求
//拿球后行为,利用已有 Worldmodel(21)
(1)在 playOn 模式下,拿到球以后朝前方快速带球。
(2)在 PlayOn 模式下,拿到球以后朝球门方向慢速带球。
(3)在 playOn 模式下,拿到球以后把球围绕自己身体逆时针转。
(4)在 playOn 模式下,拿到球后,有人逼抢(自身周围 7 米范围有至少 1 名对方
球员),则把球踢到距离对手的另外一侧,安全带球(如对手在右侧,把球踢
到左侧,如对手仔左侧,把球踢到右侧)。
(5)在 playOn 模式下,拿到球以后,有人逼抢,传球给最近的队友;否则向球门
方向快速带球。
(6)在 playOn 模式下,如果有人逼抢(自身周围 7 米范围有至少 1 名对方球员), 则安全带球;否则向球门方向快速带球。
(7)在 PlayOn 模式下,若前方没有对方球员,则直接以最大速度向对方球门射门
(周期数为偶数,球门的右侧射门,周期为奇数,向球门的左侧射门)。
(8)在 playOn 模式下,拿到球后,在本方半场踢到球场中心点;过了半场,快速
带球到对方球门。
(9)在 PlayOn 模式下,拿到球后,把传给最近的周围没人防守的队友(没有人防
守以其周围 5 米范围是否有对方球员为准)脚下。
(10) 在 playOn 模式下,拿到球后,把球传给最靠近自己的前方的没人防守的
队友(判断队友身边 5 米范围是否有对方防守队员)。
(11) 在 playOn 模式下,拿到球后以后,在本方半场传给次近的队友;在对方
半场,非 10 号球员传球给 10 号球员,10 号球员则快速向球门方向带球。
(12) 在 playOn 模式下,如果在本方半场,则朝前方慢速带球,如果在对方半
场,则朝球门快速带球。
(13) 在 playOn 模式下,拿到球后,如果是 2 号,则把球踢到左侧边线,如果
是 5 号,则把球踢到右侧边线,并把脖子方向转向球;其他球员则向前带球。
(14) 在 playOn 模式下,拿到球后,如果 4 号,则传球给 7 号; 否则的话,传
球给最近的队友;到对方禁区后以最大速度射向空隙大的球门一侧。
(15) 在 playOn 模式下,拿球后垂直带球。
(16) 在 playOn 模式下,拿到球后带球到达球场中心;在球场中心附近位置(中 心位置周围 2 米半径范围内)传给最近的球员。
(17) 在 playOn 模式下,如果 10 号控球,则其带球前进,然后 5 号跟着 10
号一起前进,两球员在同一水平线上,且距离为 5。
(18) 在 playon 模式下,如果是 10 号球员,在可踢球的状态下,如果自身的
x 轴坐标大于 30,则直接朝着离对方球员远的球门点射门。
(19) 在 playOn 模式下,如果是 9 号拿到球,则令 9 号和 10 号同时冲至敌方
球门处,在球门前,9 号传给 10 号,由 10 号进行射门
(20) 在 playOn 模式下,如果我是 4 号球员并且拿到了球,则传给 7 号球员,
同时 7 号球员再传给 9 号球员,9 号球员继续以最大速度冲到球门处射门。
(21) 在 playOn 模式下,如果在我方半场拿到球,则向中场线以最大的速度踢,
如果在敌方半场拿到球,则向敌方球门处以最大的速度踢
//拿球以后,需要自己添加 WorldModel 函数(12)
(22) 在 playOn 模式下,拿球后传球给更靠近对方球门的最近队友。
(23) 在 playOn 模式下,拿球后,搜索前方-30~30 之间距离自己 20 米内是否
有队友,如果有则传给该队友,否则自己带球。
(24) 在 playon 模式下,求出 y 轴等于 0 的两侧的对方球员数量,将球传向对
手少的一方,并且 x 轴值最大的队友。
(25) 在 playon 模式下,如果自身 7 米范围内有两个或两个以上的对手的话,
则传球到 x 轴值最大的队友。
(26) 在 playon 模式下,求出己方的越位线,存在可以踢球的队友的话,如果
自身是 10 号。那么 10 球员垂直跑向越位线的 x 轴值-2 米,y 轴不变的点。
(27) 在 playon 的模式下,求出球运动方向(即求出其对应的直线方程),并
且求出自己到该直线的距离,如果距离小于 4 的话,那么就垂直跑向该条直
线。
(28) 在 playon 的模式下,如果是自己可以踢球的状态下,如果自身 7 米内没
有对方球员的话,则快速带球,带球方向是朝着点(53,0)方向。
(29) 在 playon 的模式下,如果距离球最近的是我方队友的话,如果我的 x
坐标小于 30 的话,并且我是 10 号,那么我跑向球的坐标加上(0,10)的坐
标位置。
(30) 在 playon 的模式下,发现前方没有队友的时候,如果自身 5 米内有两个
及两个以上的对手的话,那么将球传给最近的队友。
(31) 在 playon 的模式下,发现前方没有对方球员的时候,则快速向球门放向
带球,距离守门员 5-10 米时向空隙较大的一侧射门。
(32) 在 playon 的模式下,发现前方没有对方球员的时候,则快速向球门放向
带球,距离守门员 5-10 米时向空隙较大的一侧射门。
(33) 在 playon 的模式下,(8,9,10,11)前方没有对方球员的时候,则快 速向球门放向带球,距离守门员 5-10 米时向空隙较大的一侧射门。
//其他比赛模式下,进攻行为(8)
(34) 在本方角球模式下,如果自己是 10 号球员,则跑向角球点,并开球(球
可踢,则踢球给 9 号);如果自己是 9 号球员,则跑向距离角球点附近(随
机选一点),准备接应球,其他球员跑本位点.
(35) 在本方边线球模式下,如果自己是距离球最近的队员,跑向球;并开球
(球在自己脚下则把球传给最近的队友)。
(36) 在本方边线球模式下,在本方半场左侧,则由 2 号去发;如果是本方半
场右侧,则由 5 号去发;球在 2 号或者 5 号脚下,则踢向距离自己最近的队
友。
(37) 在本方边线球的模式下,如果我是距离第二近的队友的话,那么我也跑
朝着球的位置跑,直到距离球 7 米的范围。
(38) 在本方边线球的模式下,如果我是 4 号的话,并且距离球最近的队友不
是我,那么我将跑向球的坐标加上(5,0)的位置上去。
(39) 在本方边线球的模式下,如果我是距离球第二近的队友,那么我跑向距
离球 12 米的范围内,并且距离对方球门点(53,0)最近的点。
(40) 在本方边线球的模式下,距离球最近的队友跑向球并开球,如果我不是
距离球第二近的队友,那么我向自身向量(5,0)的方向跑去。
(41) 在本方边线球的模式下,距离球最近的队友跑向球并开球。如果我不是
距离球第二近的队友,那么求出距离球第二近的队友的坐标加上(10,5)的
点;如果该点在球场内,则跑向该点,如果该点在场外,则计算距离该点最 近的边界点。
//playOn 模式下,防守行为(8)
(42) 在 playOn 模式下,5 号球员与拿球的对方球员的距离始终为 5。
(43) 在 playOn 模式下,2 号和 4 号一起去盯防对方拿球队员。
(44) 在 playOn 模式下,如果对方 10 号拿球,如果我是 2、3、4 号,则去盯
防 10 号。
(45) 在 playOn 模式下,如对方 9 号拿球,我方 2、3、4 号距离球最近的球员
去盯防 9 号,其他队员盯防距离自己最近的对方球员
(46) 在 playOn 模式下,如果对方比我先接近球,则离球最近的队员去盯球,
其他球员盯防距离自己最近的对方球员。
(47) 在 playOn 模式下,如果对方 11 号拿到球,则 7 号球员从左边去断球,8 号球员从右边去断球。
(48) 在 playOn 模式下,防守模式下(即球不在我方球员脚下),我方 6 号球
员始终跟着敌方 9 号,我方 7 号始终跟着敌方 10 号,8 号球员始终跟着敌方
11 号球员。
(49) 在 playOn 模式下,防守模式下(即球不在我方球员脚下),我方距离球
最近的 2 名队员负责去盯防对方离球最近的球员,其他球员其他球员采用人 球都盯的方式盯防防距离自己最近的对方球员(即跑到距离自己最近的对方
球员的可能接球路线的前面位置点) //其他比赛模式下,防守行为(7)
(50) 在对方边线球的模式下,如果我是 4 号,那么我就跑向距离球最近的对
方球员处。
(51) 在对方边线球的模式下,如果我是距离球第二近的队员的话,那么我跑
向距离球第二近的对方球员的位置。
(52) 在对方角球模式情况下,如果球在我方左侧,则 2,3,6,7 号平均分布
在以球的位置为圆心,半径 10 米的圆弧上(其中 2 号的初始位置可以自行设
定,间距也可以自行设定,但是需要保证 2,3,6,7 都在场内);如果球在
我方右侧,则 4,5,7,8 号平均分布在以球的位置为圆心,半径 10 米的圆 弧上(其中 4 号的初始位置可以自行设定,间距也可以自行设定,但是需要
保证 4,5,7,8 都在场内)。
(53) 在对方边线球的模式下,如果我不是距离球最近的队友,并且我的 x 轴
坐标大于 0 的话,那么我跑向自身位置加(-10,0)的点的位置去。
(54) 在对方边线球的模式下,如果我身边 5 米内有对方球员的话,那么我跑
向身边对方球员的位置,并且我的 x 轴坐标的值要比该对方的大 2。
(55) 在对方边线球的模式下,如果球的位置的 x 轴小于 0,如果我是 4 号或 5
号的话,一起跑向距离球第二近的对方球员的位置。
(56) 在对方角球模式情况下,如果球在我方左侧,则 2,3 号负责盯防对方距 离球第二近的对方球员;如果球在我方右侧,则 4,5 号负责盯防对方距离球
第二近的对方球员。

添加函数
WorldModel.h/*************************add***************************//*----------------start---------------------*/ObjectT getTeammateClosestToGoalAndAgent();ObjectT getTeammateAtAngleDist( AngDeg ang1, AngDeg ang2, double dist );int getOpponentNumSideY( int mark );ObjectT getXMaxTeammateBySide( int mark );ObjectT getClosestFlagToPos( VecPosition pos );bool isTeammateAtAngle( AngDeg ang1, AngDeg ang2 );double getAgentDistFromGoalie();ObjectT getNearestBallObj( ObjectT obj1, ObjectT obj2);ObjectT getOppByDistAndPos( double dist, double x, double y );/*----------------end----------------------*/
WorldModel.cpp
/****************************add***************************/
/*----------------------start-------------------------------*/
ObjectT WorldModel::getTeammateClosestToGoalAndAgent()
{int iIndex;ObjectT closeAgent = OBJECT_ILLEGAL;ObjectT closeBoth = OBJECT_ILLEGAL;VecPosition posGoal( 52.5, 0 );VecPosition posAgent = getGlobalPosition( getAgentObjectType() );for( ObjectT o = iterateObjectStart(iIndex, OBJECT_SET_TEAMMATES);o == OBJECT_ILLEGAL;o = iterateObjectNext(iIndex, OBJECT_SET_TEAMMATES)){  if( closeAgent==OBJECT_ILLEGAL || posAgent.getDistanceTo( o )<posAgent.getDistanceTo( closeAgent )){closeAgent = o;if( closeBoth==OBJECT_ILLEGAL || posGoal.getDistanceTo( closeAgent )<posGoal.getDistanceTo( closeBoth ))closeBoth = closeAgent;}   }iterateObjectDone( iIndex );return closeBoth;
}ObjectT WorldModel::getTeammateAtAngleDist( AngDeg ang1, AngDeg ang2, double dist)
{VecPosition posAgent = getAgentGlobalPosition();VecPosition posTeammate;AngDeg ang;int iIndex;for( ObjectT o = iterateObjectStart(iIndex, OBJECT_SET_TEAMMATES);o == OBJECT_ILLEGAL;o = iterateObjectNext(iIndex, OBJECT_SET_TEAMMATES)){posTeammate = getGlobalPosition( o );ang = (posTeammate - posAgent).getDirection();if( (ang>=ang1 && ang<=ang2) && (posAgent.getDistanceTo(posTeammate) < dist))return o;}iterateObjectDone(iIndex);return OBJECT_UNKNOWN;
}int WorldModel::getOpponentNumSideY( int mark )// mark<0获得 Y<0半场 对方球员 数
{VecPosition posOpp;int iIndex;int oppNumT;int oppNumB;for( ObjectT o = iterateObjectStart(iIndex, OBJECT_SET_OPPONENTS);o == OBJECT_ILLEGAL;o = iterateObjectNext(iIndex, OBJECT_SET_OPPONENTS)){posOpp = getGlobalPosition( o );if( posOpp.getY() < 0 )oppNumT++;else if( posOpp.getY() > 0)oppNumB++;}iterateObjectDone(iIndex);if( mark < 0)return oppNumT;else if( mark > 0)return oppNumB;elsereturn 65001;
}ObjectT WorldModel::getXMaxTeammateBySide( int mark )// mark<0获得 Y<0半场
{int iIndex;ObjectT maxTeammate = OBJECT_ILLEGAL;for( ObjectT o = iterateObjectStart(iIndex, OBJECT_SET_TEAMMATES);o == OBJECT_ILLEGAL;o = iterateObjectNext(iIndex, OBJECT_SET_TEAMMATES)){VecPosition pos = getGlobalPosition( o );if( (pos.getY()<0 && mark<0) || (pos.getY()>0 && mark>0) ){if( maxTeammate==OBJECT_ILLEGAL || pos.getX()>getGlobalPosition( maxTeammate ).getX() )maxTeammate = o;}}iterateObjectDone( iIndex );return  maxTeammate;
}ObjectT WorldModel::getClosestFlagToPos( VecPosition pos )
{int iIndex;double dist = 65001;ObjectT flag = OBJECT_ILLEGAL; for( ObjectT o = iterateObjectStart(iIndex, OBJECT_SET_FLAGS);o == OBJECT_ILLEGAL;o = iterateObjectNext(iIndex, OBJECT_SET_FLAGS)){if( pos.getDistanceTo( o ) < dist ){dist = pos.getDistanceTo( o );flag = o;}}iterateObjectDone( iIndex );return flag;
}
bool WorldModel::isTeammateAtAngle( AngDeg ang1, AngDeg ang2 )
{VecPosition posAgent = getAgentGlobalPosition();VecPosition posTeammate;AngDeg ang;int iIndex;for( ObjectT o = iterateObjectStart(iIndex, OBJECT_SET_TEAMMATES);o == OBJECT_ILLEGAL;o = iterateObjectNext(iIndex, OBJECT_SET_TEAMMATES)){posTeammate = getGlobalPosition( o );ang = (posTeammate - posAgent).getDirection();if( ang>=ang1 && ang<=ang2 )return true;    }iterateObjectDone(iIndex);return false;
}double WorldModel::getAgentDistFromGoalie()
{VecPosition posAgent = getAgentGlobalPosition();VecPosition posGoalie = getGlobalPosition( getOppGoalieType() );return  posAgent.getDistanceTo( posGoalie );}ObjectT WorldModel::getNearestBallObj( ObjectT obj1, ObjectT obj2)
{VecPosition pos1 = getGlobalPosition( obj1 );VecPosition pos2 = getGlobalPosition( obj2 );VecPosition posBall = getGlobalPosition( OBJECT_BALL );double dist1 = posBall.getDistanceTo( pos1 );double dist2 = posBall.getDistanceTo( pos2 );if( dist1 >= dist2 )return obj1;elsereturn obj2;
}//获得与我距离dist,x轴坐标值相差x,y轴坐标值相差y的对方球员
ObjectT WorldModel::getOppByDistAndPos( const double dist, const double x, const double y )
{int iIndex;VecPosition posAgent = getAgentGlobalPosition();for( ObjectT o = iterateObjectStart(iIndex, OBJECT_SET_OPPONENTS);o == OBJECT_ILLEGAL;o = iterateObjectNext(iIndex, OBJECT_SET_OPPONENTS)){VecPosition pos = getGlobalPosition( o );if( posAgent.getDistanceTo( o )==dist && (posAgent.getX()-pos.getX())==x &&(posAgent.getY()-pos.getY())==y )return o;}iterateObjectDone( iIndex );
}
/*-----------------------end------------------------------*/PlayerTeams.cpp/*********************exam questions****************************//*---------------------------start-------------------------------*//*1*/if( WM->isBallKickable() ){AngDeg ang = 0.0;soc = dribble( ang, DRIBBLE_FAST );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*2*/if( WM->isBallKickable() ){VecPosition vec = VecPosition(52.5, 0) - WM->getAgentGlobalPosition();//我的位置到球门位置的向量AngDeg ang = vec.getDirection(); //获得角度soc = dribble( ang, DRIBBLE_SLOW );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*3*/if( WM->isBallKickable() ){soc = kickBallCloseToBody(-180);//逆时针旋转角度为负ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*4*/if( WM->isBallKickable() ){Circle cir( posAgent, 7.0 );  //建立以自身位置 为圆心,7 为半径的圆int oppNum = WM->getNrInSetInCircle( OBJECT_SET_OPPONENTS, cir ); //获得圆内 对方球员的个数if( oppNum >= 1 ){ObjectT opp = WM->getClosestInSetTo(OBJECT_SET_OPPONENTS, posAgent);//获得 离我最近的对方球员VecPosition oppPos = WM->getGlobalPosition(opp);  //获得他的  位置VecPosition  meOpp = oppPos - posAgent; // 我与他连线的向量AngDeg ang = meOpp.getDirection();if( ang >= 0 ){ang -= 60;}else{ang += 60;}soc = dribble( ang, DRIBBLE_ILLEGAL );               }else{soc = dribble( 0.0, DRIBBLE_FAST );//否则向前快速 带球,可写可不写}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*5*/if( WM->isBallKickable() ){Circle cir( posAgent, 7.0 );int oppNum = WM->getNrInSetInCircle( OBJECT_SET_OPPONENTS, cir );if( oppNum >= 1){ObjectT teammate = WM->getClosestInSetTo( OBJECT_SET_TEAMMATES, posAgent );//获得离我最 近的队友VecPosition vec = WM->getGlobalPosition( teammate ) - posAgent;soc = kickTo( vec, PS->getPassEndSpeed() );}else{soc = dribble( (VecPosition(52.5, 0) - posAgent).getDirection(), DRIBBLE_FAST );}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*6*/if( WM->isBallKickable() ){Circle cir( posAgent, 7.0 );int oppNum = WM->getNrInSetInCircle( OBJECT_SET_OPPONENTS, cir );AngDeg ang = (VecPosition(52.5, 0) - posAgent).getDirection();if( oppNum >= 1){soc = dribble( ang, DRIBBLE_ILLEGAL );}else{soc = dribble( ang, DRIBBLE_FAST );}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*7*/if( WM->isBallKickable() ){if( WM->isOpponentAtAngle(-30.0, 30.0) )//如果  我前方60度范围内没有 对方球员{VecPosition posGoal( PITCH_LENGTH/2.0,(-1 + 2*(WM->getCurrentCycle()%2)) * 0.4 * SS->getGoalWidth() );//根据当前的周期数  交替的 踢向球门的 两个死角soc = kickTo( posGoal, SS->getBallSpeedMax() );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}}/*8*/if( WM->isBallKickable() ){if( posBall.getX() < 0)// 球在我方半场{soc = kickTo( VecPosition(0.0, 0.0), PS->getPassEndSpeed() );}else{soc = dribble( (VecPosition(52.5, 0) - posAgent).getDirection(), DRIBBLE_FAST );}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*9*/if( WM->isBallKickable() ){ObjectT teammate = WM->getClosestInSetTo( OBJECT_SET_TEAMMATES, posAgent );Circle cir( WM->getGlobalPosition(teammate), 5.0 );int oppNum = WM->getNrInSetInCircle( OBJECT_SET_OPPONENTS, cir );if( oppNum <= 0 ){soc = leadingPass( teammate, PS->getPassEndSpeed() );}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*10*/if( WM->isBallKickable() ){ObjectT teammate = WM->getClosestInSetTo( OBJECT_SET_TEAMMATES, posAgent );VecPosition teammatePos = WM->getGlobalPosition( teammate );Circle cir( teammatePos, 5.0 );int oppNum = WM->getNrInSetInCircle( OBJECT_SET_OPPONENTS, cir );AngDeg ang = ( teammatePos - posAgent ).getDirection();if( oppNum<=0 && (ang>=-90 && ang<=90) )//判断 该 队友是否有人 防守 是否  在我  前方{soc = leadingPass( teammate, PS->getPassEndSpeed() );}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*11*/if( WM->isBallKickable() ){if( posBall.getX() < 0 ){soc = leadingPass( WM->getSecondClosestInSetTo( OBJECT_SET_TEAMMATES, WM->getAgentObjectType() ), PS->getPassEndSpeed() );}else{if( WM->getAgentObjectType() == OBJECT_TEAMMATE_10 )//如果 我是 10号soc = dribble( VecPosition(52.5, 0).getDirection(), DRIBBLE_FAST );elsesoc = leadingPass( OBJECT_TEAMMATE_10, PS->getPassEndSpeed() );}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*12*/if( WM->isBallKickable() ){if( posBall.getX() < 0)soc = dribble( 0.0, DRIBBLE_SLOW );elsesoc = dribble( (VecPosition(52.5, 0)- posAgent).getDirection(), DRIBBLE_FAST );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*13*/if( WM->isBallKickable() ){if( WM->getAgentObjectType() == OBJECT_TEAMMATE_2 ){soc = kickTo( VecPosition( posBall.getX(), -34 ), PS->getPassEndSpeed() );              ACT->putCommandInQueue( soc );}else if( WM->getAgentObjectType() == OBJECT_TEAMMATE_5 ){soc = kickTo( VecPosition( posBall.getX(), 34 ), PS->getPassEndSpeed() );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}else{soc = dribble( 0.0, DRIBBLE_ILLEGAL );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}}/*14*/if( WM->isBallKickable() ){if( WM->getAgentObjectType() == OBJECT_TEAMMATE_4 )soc = leadingPass( OBJECT_TEAMMATE_7, PS->getPassEndSpeed() );elsesoc = leadingPass( WM->getClosestInSetTo( OBJECT_SET_TEAMMATES, posAgent), PS->getPassEndSpeed() );if( WM->isInTheirPenaltyArea( posBall ))//如果在 对方禁区{VecPosition posGoalie = WM->getGlobalPosition( OBJECT_OPPONENT_GOALIE );//对方守门员位置AngDeg meGoalie = (posGoalie - posAgent).getDirection();AngDeg angTop = ( VecPosition(52.5, 6.0) - posAgent ).getDirection();AngDeg angBottom = ( VecPosition(52.5 -6.0) - posAgent ).getDirection();// 由于编译器不支持我使用fabs()函数,所以这里采用这种形式求绝对值AngDeg ang1 = (angTop-meGoalie)>=0 ? (angTop-meGoalie) : (-1)*(angTop-meGoalie);AngDeg ang2 = (angBottom-meGoalie)>=0 ? (angBottom-meGoalie) : (-1)*(angBottom-meGoalie);if( ang1 >= ang2 )soc = kickTo( VecPosition(52.5, 6.0) - posAgent, SS->getBallSpeedMax() );elsesoc = kickTo( VecPosition(52.5, -6.0) - posAgent, SS->getBallSpeedMax() );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}}/*15*/if( WM->isBallKickable() ){//  沿着y轴 跑if( posBall.getY() <= 0)soc = dribble( -90, DRIBBLE_SLOW );elsesoc = dribble( 90, DRIBBLE_SLOW );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*16*/if( WM->isBallKickable() ){soc = dribble( (VecPosition(0,0)-posAgent).getDirection(), DRIBBLE_WITHBALL );//拿到球后带球到达球场中心ObjectT teammate = WM->getClosestInSetTo( OBJECT_SET_TEAMMATES, posAgent );if( posAgent.getDistanceTo( teammate ) <= 2.0)soc = leadingPass( teammate, PS->getPassEndSpeed() );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*17*/if( WM->getPlayerNumber() == 10 ){soc = dribble( 0.0, DRIBBLE_WITHBALL );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}if( WM->getPlayerNumber() == 5){VecPosition pos( posBall.getX() - 5, posBall.getY() ); //保持五米soc = moveToPos( pos, PS->getPlayerWhenToTurnAngle() );ACT->putCommandInQueue( soc );}/*18*/if( WM->getPlayerNumber()==10 && WM->isBallKickable() && posAgent.getX()>30 ){VecPosition posGoalie = WM->getGlobalPosition( OBJECT_OPPONENT_GOALIE );AngDeg meGoalie = (posGoalie - posAgent).getDirection();AngDeg angTop = ( VecPosition(52.5, 6.0) - posAgent ).getDirection();AngDeg angBottom = ( VecPosition(52.5 -6.0) - posAgent ).getDirection();// 由于编译器不支持我使用fabs()函数,所以这里采用这种形式求绝对值//AngDeg ang1 = (angTop-meGoalie)>=0 ? (angTop-meGoalie) : (-1)*(angTop-meGoalie);//AngDeg ang2 = (angBottom-meGoalie)>=0 ? (angBottom-meGoalie) : (-1)*(angBottom-meGoalie);if( fabs(angTop-meGoalie) >= fabs(angBottom-meGoalie) )soc = kickTo( VecPosition(52.5, 6.0) - posAgent, SS->getBallSpeedMax() );elsesoc = kickTo( VecPosition(52.5, -6.0) - posAgent, SS->getBallSpeedMax() );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*19*/if( WM->getPlayerNumber()==9 && WM->isBallKickable() ){soc = dribble( (VecPosition(52.5, 0)-posAgent).getDirection(), DRIBBLE_FAST );//9号快速带球  到球门 处if( WM->getAgentObjectType() == OBJECT_TEAMMATE_10 )soc = dashToPoint( VecPosition(52.5, 0), WM->getCurrentCycle() );//10号跑向球门if( WM->isInTheirPenaltyArea( posBall ) ){soc = leadingPass( OBJECT_TEAMMATE_10, PS->getPassEndSpeed() );//传球给 10号if( WM->getAgentObjectType() == OBJECT_TEAMMATE_10 )soc = kickTo( (VecPosition(52.5, 0) - posAgent).getDirection(), SS->getBallSpeedMax() );}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*20*/if( WM->getPlayerNumber()==4 && WM->isBallKickable() ){soc = leadingPass( OBJECT_TEAMMATE_7, PS->getPassEndSpeed() );if( WM->getAgentObjectType()==OBJECT_TEAMMATE_7 && WM->isBallKickable() )//7号拿球    可踢soc = leadingPass( OBJECT_TEAMMATE_9, PS->getPassEndSpeed() ); // 传给9号if( WM->getAgentObjectType()==OBJECT_TEAMMATE_9 && WM->isBallKickable() )//9号拿球   可踢{if( WM->getRelativeDistance( WM->getOppGoalieType() ) >= 20 )//距离对方球门较远时soc =  dribble( (VecPosition(52.5, 0) - posAgent).getDirection(), DRIBBLE_FAST );//快速向球门带球soc = kickTo( VecPosition(52.5, 0), SS->getBallSpeedMax() );}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*21*/if( WM->isBallKickable() && posBall.getX()<0 )soc = kickTo( VecPosition( 0, posBall.getY() ), SS->getBallSpeedMax() );else if( WM->isBallKickable() && posBall.getX()>0)soc = kickTo( VecPosition(52.5, 0), SS->getBallSpeedMax() );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );/*22*/if( WM->isBallKickable() ){soc = leadingPass( WM->getTeammateClosestToGoalAndAgent(), PS->getPassEndSpeed() );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*23*/if( WM->isBallKickable() ){ObjectT o = WM->getTeammateAtAngleDist(-30, 30, 20.0);if( o != OBJECT_UNKNOWN )soc = leadingPass( o, PS->getPassEndSpeed() );elsesoc = dribble( (VecPosition(52.5, 0) - posAgent).getDirection(), DRIBBLE_ILLEGAL );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*24*/if( WM->isBallKickable() ){ObjectT maxX;if( WM->getOpponentNumSideY( -1 ) > WM->getOpponentNumSideY( 1 ))// 我方半场 对方球员 较多maxX = WM->getXMaxTeammateBySide( 1 );elsemaxX = WM->getXMaxTeammateBySide( -1 );soc = leadingPass( maxX, PS->getPassEndSpeed() );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*25*/if( WM->isBallKickable() ){Circle cir( posAgent, 7.0 );int oppNum = WM->getNrInSetInCircle( OBJECT_SET_OPPONENTS, cir );if( oppNum >= 2){ObjectT mate = WM->getClosestInSetTo( OBJECT_SET_TEAMMATES, VecPosition( 52.0, 0) );// x 最大的队友 离对方 球门最近soc = leadingPass( mate, PS->getPassEndSpeed() );}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*26*/if( WM->getPlayerNumber()==10 && WM->isBallInOurPossesion() )soc = moveToPos( VecPosition(WM->getOffsideX()-2, posAgent.getY() ), 30);ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );/*27*/Line ballLine = Line::makeLineFromPositionAndAngle( WM->getBallPos(), WM->getBallDirection() );//  根据球的位置和方向 角 创建直线if( ballLine.getDistanceWithPoint( posAgent ) < 4)soc = moveToPos( ballLine.getPointOnLineClosestTo( posAgent ), 30);ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );/*28*/if( WM->isBallKickable() ){Circle cir( posAgent, 7.0 );int oppNum = WM->getNrInSetInCircle( OBJECT_SET_OPPONENTS, cir );if( oppNum <= 0 )soc = dribble( (VecPosition(53.0, 0)-posAgent).getDirection(), DRIBBLE_FAST );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*29*/if( WM->isBallInOurPossesion() && posAgent.getX()<30 && WM->getPlayerNumber()==10 ){soc = moveToPos( (VecPosition(0, 10)+posAgent), 30);ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*30*/if( WM->isBallKickable() ){Circle cir( posAgent, 5.0 );int oppNum = WM->getNrInSetInCircle( OBJECT_SET_OPPONENTS, cir );if( oppNum>=2 && WM->isTeammateAtAngle(-30, 30) )soc = leadingPass( WM->getClosestInSetTo( OBJECT_SET_TEAMMATES, posAgent), PS->getPassEndSpeed() );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*31*/if( WM->isBallKickable() ){if( !WM->isOpponentAtAngle( -30, 30 ) )soc = dribble( (VecPosition(52.5, 0)-posAgent).getDirection(), DRIBBLE_FAST );double dist = WM->getAgentDistFromGoalie();if( dist>=5 && dist<=10 ){VecPosition posGoalie = WM->getGlobalPosition( OBJECT_OPPONENT_GOALIE );//对方守门员位置AngDeg meGoalie = (posGoalie - posAgent).getDirection();AngDeg angTop = ( VecPosition(52.5, 6.0) - posAgent ).getDirection();AngDeg angBottom = ( VecPosition(52.5, -6.0) - posAgent ).getDirection();// 由于编译器不支持我使用fabs()函数,所以这里采用这种形式求绝对值//AngDeg ang1 = (angTop-meGoalie)>=0 ? (angTop-meGoalie) : (-1)*(angTop-meGoalie);//AngDeg ang2 = (angBottom-meGoalie)>=0 ? (angBottom-meGoalie) : (-1)*(angBottom-meGoalie);if( fabs(angTop-meGoalie) >= fabs(angBottom-meGoalie) )soc = kickTo( VecPosition(52.5, 6.0) - posAgent, SS->getBallSpeedMax() );elsesoc = kickTo( VecPosition(52.5 -6.0) - posAgent, SS->getBallSpeedMax() );}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*33*/int playNum = WM->getPlayerNumber();if( (playNum==8 || playNum==9 || playNum==10 || playNum==11) && WM->isOpponentAtAngle( -30, 30 ) ){soc = dribble( (VecPosition(52.5, 0)-posAgent).getDirection(), DRIBBLE_FAST );double dist = WM->getAgentDistFromGoalie();if( dist>=5 && dist<=10 ){VecPosition posGoalie = WM->getGlobalPosition( OBJECT_OPPONENT_GOALIE );//对方守门员位置AngDeg meGoalie = (posGoalie - posAgent).getDirection();AngDeg angTop = ( VecPosition(52.5, 6.0) - posAgent ).getDirection();AngDeg angBottom = ( VecPosition(52.5, -6.0) - posAgent ).getDirection();// 由于编译器不支持我使用fabs()函数,所以这里采用这种形式求绝对值//AngDeg ang1 = (angTop-meGoalie)>=0 ? (angTop-meGoalie) : (-1)*(angTop-meGoalie);//AngDeg ang2 = (angBottom-meGoalie)>=0 ? (angBottom-meGoalie) : (-1)*(angBottom-meGoalie);if( fabs(angTop-meGoalie) >= fabs(angBottom-meGoalie) )soc = kickTo( VecPosition(52.5, 6.0) - posAgent, SS->getBallSpeedMax() );elsesoc = kickTo( VecPosition(52.5 -6.0) - posAgent, SS->getBallSpeedMax() );}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*34*/if( WM->isCornerKickUs() ){if( WM->getAgentObjectType() == OBJECT_TEAMMATE_10 ){if( WM->isBallKickable() )soc = leadingPass( OBJECT_TEAMMATE_9, PS->getPassEndSpeed() );elsesoc = moveToPos( posBall, 30);}if( WM->getAgentObjectType() == OBJECT_TEAMMATE_9 )    {VecPosition pos;pos.setX( posBall.getX() );if( posBall.getY() > 0 )pos.setY( posBall.getY() - 10 );elsepos.setY( posBall.getY() + 10 );soc = moveToPos( pos, 30 );}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*35*/if( WM->isOffsideUs() ){if( WM->getFastestInSetTo( OBJECT_SET_TEAMMATES, OBJECT_BALL ) == WM->getAgentObjectType() )soc = moveToPos( posBall, PS->getPlayerWhenToTurnAngle() );if( WM->isBallKickable() )soc = leadingPass( WM->getClosestInSetTo( OBJECT_SET_TEAMMATES, WM->getAgentObjectType() ), PS->getPassEndSpeed() );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*36*/if( WM->isOffsideUs() ){if( posBall.getX()<0 && posBall.getY()<0 && WM->getAgentObjectType()==OBJECT_TEAMMATE_2 )soc = moveToPos( posBall, PS->getPlayerWhenToTurnAngle() );else if( posBall.getX()<0 && posBall.getY()>0 && WM->getAgentObjectType()==OBJECT_TEAMMATE_5 )soc = moveToPos( posBall, PS->getPlayerWhenToTurnAngle() );if( WM->isBallKickable() && (WM->getAgentObjectType()==OBJECT_TEAMMATE_2 || WM->getAgentObjectType()==OBJECT_TEAMMATE_5) )soc = leadingPass( WM->getClosestInSetTo( OBJECT_SET_TEAMMATES, WM->getAgentObjectType() ), PS->getPassEndSpeed() );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );      }/*37*/if( WM->isOffsideUs() ){double dist = sqrt((posAgent.getX()-posBall.getX())*(posAgent.getX()-posBall.getX()) + (posAgent.getY()-posBall.getY())*(posAgent.getY()-posBall.getY()));if( WM->getSecondClosestInSetTo( OBJECT_SET_TEAMMATES, OBJECT_BALL)==WM->getAgentObjectType() && dist>=7 ){VecPosition pos = posBall - posAgent;double d = posBall.getDistanceTo( posAgent );VecPosition target( (pos.getX()/d)*7.0, (pos.getY()/d)*7.0 );soc = moveToPos( posAgent+target, PS->getPlayerWhenToTurnAngle() );}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );  }/*38*/if( WM->isOffsideUs() ){if( WM->getPlayerNumber() == 4){if( WM->getClosestInSetTo( OBJECT_SET_TEAMMATES, OBJECT_BALL ) != WM->getAgentObjectType() )soc = moveToPos( posBall+VecPosition( 5, 0 ), PS->getPlayerWhenToTurnAngle() );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );  }}/*39*/if( WM->isOffsideUs() ){if( WM->getSecondClosestInSetTo( OBJECT_SET_TEAMMATES, OBJECT_BALL ) == WM->getAgentObjectType() ){VecPosition posGoal( 53, 0 );double dist = posBall.getDistanceTo( posGoal );// 球和 球门间的 距离if( dist > 12 ){VecPosition pos = posGoal - posBall;VecPosition target( (pos.getX()/dist)*12, (pos.getY()/dist)*12 );soc = moveToPos( posBall+target, PS->getPlayerWhenToTurnAngle() );//  球员在 球与球门 连线上, 距离球12ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );  }}}/*40*/if( WM->isOffsideUs() ){ObjectT nearestMate = WM->getClosestInSetTo( OBJECT_SET_TEAMMATES, OBJECT_BALL );if( nearestMate == WM->getAgentObjectType() )soc = moveToPos( posBall, PS->getPlayerWhenToTurnAngle() );if( WM->getSecondClosestInSetTo( OBJECT_SET_TEAMMATES, OBJECT_BALL ) != WM->getAgentObjectType() )soc = moveToPos( posAgent+VecPosition( 5, 0 ), PS->getPlayerWhenToTurnAngle() );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );  }/*41*/if( WM->isOffsideUs() ){  if( WM->getClosestInSetTo( OBJECT_SET_TEAMMATES, OBJECT_BALL ) == WM->getAgentObjectType() )soc = moveToPos( posBall, PS->getPlayerWhenToTurnAngle() );ObjectT secNear = WM->getSecondClosestInSetTo( OBJECT_SET_TEAMMATES, OBJECT_BALL );if( secNear != WM->getAgentObjectType() ){VecPosition pos = WM->getGlobalPosition( secNear ) + VecPosition( 10, 5 );if( WM->isInField( pos ) )soc = moveToPos( pos, PS->getPlayerWhenToTurnAngle() );else{ObjectT o = WM->getClosestFlagToPos( pos );soc = moveToPos( WM->getGlobalPosition( o ), PS ->getPlayerWhenToTurnAngle() );}   }ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );  }/*42*/if( WM->getPlayerNumber() == 5){ObjectT oppBallKeeper = WM->getClosestInSetTo( OBJECT_SET_OPPONENTS, OBJECT_BALL );VecPosition posOpp = WM->getGlobalPosition( oppBallKeeper );VecPosition pos =  posAgent - posOpp;double d = posOpp.getDistanceTo( posAgent );VecPosition target( (pos.getX()/d)*5, (pos.getY()/d)*5 );soc = moveToPos( posOpp+target, PS->getPlayerWhenToTurnAngle() );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );  }/*43*/if( WM->getPlayerNumber()==2 || WM->getPlayerNumber()==4){ObjectT oppBallKeeper = WM->getClosestInSetTo( OBJECT_SET_OPPONENTS, OBJECT_BALL );soc = mark( oppBallKeeper, 0.0, MARK_BALL );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );  }/*44*/ObjectT oppBallKeeper = WM->getClosestInSetTo( OBJECT_SET_OPPONENTS, OBJECT_BALL );if( oppBallKeeper == OBJECT_OPPONENT_10 ){if( WM->getAgentObjectType()==OBJECT_TEAMMATE_2|| WM->getAgentObjectType()==OBJECT_TEAMMATE_3|| WM->getAgentObjectType()==OBJECT_TEAMMATE_4 ){soc = mark( oppBallKeeper, 0.0, MARK_BISECTOR );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );  } }/*45*/ObjectT oppBallKeeper = WM->getClosestInSetTo( OBJECT_SET_OPPONENTS, OBJECT_BALL );if( oppBallKeeper == OBJECT_OPPONENT_9 ){ObjectT nearestBall = WM->getNearestBallObj( OBJECT_TEAMMATE_2, WM->getNearestBallObj( OBJECT_TEAMMATE_3, OBJECT_TEAMMATE_4 ) );if( nearestBall == WM->getAgentObjectType() )soc = mark( oppBallKeeper, 0.0, MARK_BISECTOR );else{ObjectT nearestOpp = WM->getClosestInSetTo( OBJECT_SET_OPPONENTS, WM->getAgentObjectType() );soc = mark( nearestOpp, 0.0, MARK_ILLEGAL );}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );  }/*46*/double *dist1;double *dist2;WM->getClosestInSetTo( OBJECT_SET_OPPONENTS, OBJECT_BALL, dist1 );WM->getClosestInSetTo( OBJECT_SET_TEAMMATES, OBJECT_BALL, dist2 );if( *dist1 < *dist2 ){ObjectT nearestBall = WM->getClosestInSetTo( OBJECT_SET_TEAMMATES, OBJECT_BALL );if( nearestBall == WM->getAgentObjectType() )soc = mark( nearestBall, 0.0, MARK_BISECTOR );elsesoc = mark( WM->getClosestInSetTo( OBJECT_SET_OPPONENTS, WM->getAgentObjectType() ), 5.0, MARK_ILLEGAL );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*47*///这个所谓的左右,你就当自己是 站在球场上的球员,来判断左右。  注意 球场上y轴正方向 朝下if( !WM->isBallKickable() && WM->getAgentObjectType()==OBJECT_OPPONENT_11 ){if( WM->getPlayerNumber() == 7){soc = moveToPos( WM->getGlobalPosition( OBJECT_OPPONENT_11 )+VecPosition( 0, -5 ), PS->getPlayerWhenToTurnAngle() );soc = intercept( true );}else if( WM->getPlayerNumber() == 8 ){soc = moveToPos( WM->getGlobalPosition( OBJECT_OPPONENT_11 )+VecPosition( 0, 5 ), PS->getPlayerWhenToTurnAngle() );soc = intercept( true );}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*48*/if( !WM->isBallInOurPossesion() ){if( WM->getPlayerNumber() == 6 )soc = moveToPos( WM->getGlobalPosition( OBJECT_OPPONENT_9 ), PS->getPlayerWhenToTurnAngle() );else if( WM->getPlayerNumber() == 7 )soc = moveToPos( WM->getGlobalPosition( OBJECT_OPPONENT_10 ), PS->getPlayerWhenToTurnAngle() ); else if( WM->getPlayerNumber() == 8 )soc = moveToPos( WM->getGlobalPosition( OBJECT_OPPONENT_11 ), PS->getPlayerWhenToTurnAngle() ); ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*49*/if( !WM->isBallInOurPossesion() ){ObjectT teammate1 = WM->getClosestInSetTo( OBJECT_SET_TEAMMATES, OBJECT_BALL );ObjectT teammate2 = WM->getSecondClosestInSetTo( OBJECT_SET_TEAMMATES, OBJECT_BALL );ObjectT opp = WM->getClosestInSetTo( OBJECT_SET_OPPONENTS, OBJECT_BALL );//ObjectT opp2 = WM->getSecondClosestInSetTo( OBJECT_SET_OPPONENTS, OBJECT_BALL );if( WM->getAgentObjectType()==teammate1 || WM->getAgentObjectType()==teammate2 ) soc = mark( opp, 0.0, MARK_ILLEGAL );else{ObjectT nearestOpp = WM->getClosestInSetTo( OBJECT_SET_OPPONENTS, WM->getAgentObjectType() );VecPosition posOpp = WM->getGlobalPosition( nearestOpp );VecPosition oppToBall = posBall - posOpp;VecPosition target( oppToBall.getX()/2.0, oppToBall.getY()/2.0 );soc = moveToPos( posAgent+target, PS->getPlayerWhenToTurnAngle() );// 跑到对方球员 与球连线的 中点}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*50*/if( WM->isOffsideThem() ){if( WM->getPlayerNumber() == 4)soc = moveToPos( WM->getClosestInSetTo( OBJECT_SET_OPPONENTS, OBJECT_BALL ), PS->getPlayerWhenToTurnAngle() );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*51*/if( WM->isOffsideThem() ){ObjectT o = WM->getSecondClosestInSetTo( OBJECT_SET_TEAMMATES, OBJECT_BALL );if( WM->getAgentObjectType() == o ){ObjectT opp = WM->getSecondClosestInSetTo( OBJECT_SET_OPPONENTS, OBJECT_BALL );soc = moveToPos( WM->getGlobalPosition( opp ), PS->getPlayerWhenToTurnAngle() );   }ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*52*/if( WM->isCornerKickThem() ){if( posBall.getY() < 0 ){VecPosition pos2 = WM->getGlobalPosition( OBJECT_TEAMMATE_2 );VecPosition pos3 = WM->getGlobalPosition( OBJECT_TEAMMATE_3 );VecPosition pos6 = WM->getGlobalPosition( OBJECT_TEAMMATE_6 );VecPosition pos7 = WM->getGlobalPosition( OBJECT_TEAMMATE_7 );if( WM->isInField( pos2 ) && WM->isInField( pos3 ) && WM->isInField( pos6 ) && WM->isInField( pos7 )){if( WM->getAgentObjectType() == OBJECT_TEAMMATE_2 )soc = moveToPos( posBall+VecPosition( 10, 0 ), PS->getPlayerWhenToTurnAngle() );if( WM->getAgentObjectType() == OBJECT_TEAMMATE_3 )soc = moveToPos( posBall+VecPosition( -10, 0 ), PS->getPlayerWhenToTurnAngle() );if( WM->getAgentObjectType() == OBJECT_TEAMMATE_6 )soc = moveToPos( posBall+VecPosition( 0, 10 ), PS->getPlayerWhenToTurnAngle() );if( WM->getAgentObjectType() == OBJECT_TEAMMATE_7 )soc = moveToPos( posBall+VecPosition( 0, -10 ), PS->getPlayerWhenToTurnAngle() );}}else{VecPosition pos4 = WM->getGlobalPosition( OBJECT_TEAMMATE_4 );VecPosition pos5 = WM->getGlobalPosition( OBJECT_TEAMMATE_5 );VecPosition pos7 = WM->getGlobalPosition( OBJECT_TEAMMATE_7 );VecPosition pos8 = WM->getGlobalPosition( OBJECT_TEAMMATE_8 );if( WM->isInField( pos4 ) && WM->isInField( pos5 ) && WM->isInField( pos7 ) && WM->isInField( pos8 )){if( WM->getAgentObjectType() == OBJECT_TEAMMATE_4 )soc = moveToPos( posBall+VecPosition( 10, 0 ), PS->getPlayerWhenToTurnAngle() );if( WM->getAgentObjectType() == OBJECT_TEAMMATE_5 )soc = moveToPos( posBall+VecPosition( -10, 0 ), PS->getPlayerWhenToTurnAngle() );if( WM->getAgentObjectType() == OBJECT_TEAMMATE_7 )soc = moveToPos( posBall+VecPosition( 0, 10 ), PS->getPlayerWhenToTurnAngle() );if( WM->getAgentObjectType() == OBJECT_TEAMMATE_8 )soc = moveToPos( posBall+VecPosition( 0, -10 ), PS->getPlayerWhenToTurnAngle() );}}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*53*/if( WM->isOffsideThem() ){ObjectT o = WM->getClosestInSetTo( OBJECT_SET_TEAMMATES, OBJECT_BALL );ObjectT agent = WM->getAgentObjectType();if( agent!=o && WM->getGlobalPosition( agent ).getX()>0 )soc = moveToPos( posAgent+VecPosition( -10, 0 ), PS->getPlayerWhenToTurnAngle() );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*54*/if( WM->isOffsideThem() ){Circle cir( posAgent, 5 );int num = WM->getNrInSetInCircle( OBJECT_SET_OPPONENTS, cir );if( num > 0 )soc = moveToPos( WM->getGlobalPosition( WM->getOppByDistAndPos( 5, 2, 0 )), PS->getPlayerWhenToTurnAngle() );ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*55*/if( WM->isOffsideThem() ){if( posBall.getX() < 0 ){ObjectT agent = WM->getAgentObjectType();if( agent==OBJECT_TEAMMATE_4 || agent==OBJECT_TEAMMATE_5 ){ObjectT opp = WM->getSecondClosestInSetTo( OBJECT_SET_OPPONENTS, OBJECT_BALL );soc = moveToPos( WM->getGlobalPosition( opp ), PS->getPlayerWhenToTurnAngle() );}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}}/*56*/if( WM->isCornerKickThem() ){ObjectT agent = WM->getAgentObjectType();ObjectT oppSecNearBall = WM->getSecondClosestInSetTo( OBJECT_SET_OPPONENTS, OBJECT_BALL );if( posBall.getY() < 0){if( agent==OBJECT_TEAMMATE_2 || agent==OBJECT_TEAMMATE_3 )soc = moveToPos( WM->getGlobalPosition( oppSecNearBall ), PS->getPlayerWhenToTurnAngle() );}else{if( agent==OBJECT_TEAMMATE_4 || agent==OBJECT_TEAMMATE_5 )soc = moveToPos( WM->getGlobalPosition( oppSecNearBall ), PS->getPlayerWhenToTurnAngle() );}ACT->putCommandInQueue( soc );ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );}/*-----------------------------end---------------------------------*/

注:本代码为同学分享版,未经过严格测试,如需要准确代码,可下载本人分享资源中的代码!

合肥工业大学机器人技术五十六题相关推荐

  1. 合肥工业大学机器人技术作业一

    合肥工业大学机器人技术作业一 题目: 在机器人足球比赛中,server和球员client之间通过发送字符串来进行信息交互,其中server要把某球员的听觉和视觉信息发送给该球员,信息的格式如下所示: ...

  2. 合肥工业大学机器人技术期末_合肥工业大学 机器人技术 作业和实验

    简介 你好! 在这篇文章中,我将免费共享合肥工业大学<机器人技术>作业和实验环节的代码和个人报告,以供交流学习.为了方便更多的同学搜索到这篇博客,我会在下面贴出一部分实验题目. 共享资源包 ...

  3. 合工大php期末试卷_完美起航-合肥工业大学机器人技术作业和实验

    简介 你好! 在这篇文章中,我将免费共享合肥工业大学<机器人技术>作业和实验环节的代码和个人报告,以供交流学习.为了方便更多的同学搜索到这篇博客,我会在下面贴出一部分实验题目. 共享资源包 ...

  4. 合肥工业大学机器人技术实验五十六题

    注:非原创,仅仅做了整理工作. //PlayerTeams.cpp130行到138行是PlayOn模式开球后拿球到决策 //把原来到soc注释,在后面添加代码;每次修改后构建之后才能看到效果 在 pl ...

  5. webpack打包后引用cdn的js_JS逆向:Webpack打包后的代码怎么搞?猿人学爬虫比赛第十六题详细题解...

    实战地址 http://match.yuanrenxue.com/match/16 抓包分析 地址栏输入 地址,按下F12并回车,发现数据在这里: 查看cookie,无加密相关的字段.请求的接口倒是有 ...

  6. 合肥工业大学机器人技术期末_机器人技术第三次作业(HFUT)

    第三次作业 本人代码水平十分有限,仅供参考,有错误请指出 java源码: package robathomework3; import java.lang.Math; //点类 class point ...

  7. 第五十六题(最长公共子串)

    最长公共字串. 题目:假设字符串一的全部字符按其在字符串中的顺序出如今另外一个字符串二中, 则字符串一称之为字符串二的子串. 注意,并不要求子串(字符串一)的字符必须连续出如今字符串二中. 请编写一个 ...

  8. 猿人学题库十六题——js加密_表情包+sojson6.0——满天坑

    猿人学题库十六题--js加密_表情包+sojson6.0 1.  首先 进入 浏览器的开发者工具, 进去后首先还是 无线debug ,找到 debugg 对应的行数,右击选择 never pause ...

  9. 中国五十六个民族简介

    56个民族是中华人民共和国灿烂星空中(五十六个星座). 中华民族共包括56个民族,汉族是中国的主体民族,占全部人口的91.51%,其他还有55个民族,占8.49%(第六次人口普查).汉族和55个少数民 ...

最新文章

  1. Scala for循环示例
  2. java logfaction_Java调试的变迁:从System.out.println到log4j
  3. python怎么处理文字_使用python进行简单的文本处理
  4. 利用记录型信号量机制: wait(s), signal(s)解决进程同步问题
  5. Python 让所有奇数都在偶数前面,而且奇数升序排列,偶数降序排序
  6. Morph-UGATIT:一种支持渐进式域迁移的图像翻译方法
  7. .net core精彩实例分享 -- 网络编程
  8. asp 文件上传 代码
  9. java正则表达式所有字符串_“JAVA”正则表达式如何匹配所有符合要求的子字符串?...
  10. theadClasses设置Bootstrap Table表头样式
  11. typescript探索(一)
  12. 使用自定义函数替代Linux rm命令
  13. vlan网络隔离实验
  14. CuteFTP9.0安装,破解,服务器传递文件。
  15. 18.06.27 16年期末11:张三丰的传人
  16. 【Python】从0开始写爬虫——扒一下狗东
  17. repo的安装和使用
  18. Javascript 声明时用“var”跟不用var的区别
  19. xxl-job(大众点评-许雪里)
  20. 次世代游戏:科技巨头对游戏业未来的看法

热门文章

  1. 香港美食(3)——源记喳咋
  2. B站首页(推荐页)分析
  3. 如何把地址导航生成二维码?
  4. java实现PDF转Word(无水印无页数限制)完全开放
  5. C/C++ | 23-12 用指针的方法,将字符串“ABCD1234efgh”前后对调显示
  6. 从play store下载apk
  7. Idea 使用YapiUpload上传接口到Yapi
  8. 免费的PDF转换器哪个更好用?这几款软件一定要知道!
  9. Dell电脑如何设置Fn键和其它功能键的组合
  10. 单例模式、适配器模式