basicplayer_8c-source.html

来自「仿真人工智能是指用人工的方法和技术」· HTML 代码 · 共 526 行 · 第 1/5 页

HTML
526
字号
00354 00355 <a name="l00361"></a><a class="code" href="classBasicPlayer.html#b10">00361</a> <a class="code" href="classSoccerCommand.html">SoccerCommand</a> <a class="code" href="classBasicPlayer.html#b10">BasicPlayer::communicate</a>( <font class="keywordtype">char</font> *str )00362 {00363   <font class="keywordflow">return</font> <a class="code" href="classSoccerCommand.html">SoccerCommand</a>( <a class="code" href="SoccerTypes_8h.html#a247a189">CMD_SAY</a>, str );00364 }00365 <a name="l00370"></a><a class="code" href="classBasicPlayer.html#b11">00370</a> <a class="code" href="classSoccerCommand.html">SoccerCommand</a> <a class="code" href="classBasicPlayer.html#b11">BasicPlayer::teleportToPos</a>( <a class="code" href="classVecPosition.html">VecPosition</a> pos )00371 {00372   <font class="keywordflow">return</font> <a class="code" href="classSoccerCommand.html">SoccerCommand</a>( <a class="code" href="SoccerTypes_8h.html#a247a187">CMD_MOVE</a>, pos.<a class="code" href="classVecPosition.html#a26">getX</a>(), pos.<a class="code" href="classVecPosition.html#a28">getY</a>() );00373 00374 }00375 00376 <font class="comment">/********************** INTERMEDIATE LEVEL SKILLS ****************************/</font>00377 <a name="l00386"></a><a class="code" href="classBasicPlayer.html#b12">00386</a> <a class="code" href="classSoccerCommand.html">SoccerCommand</a> <a class="code" href="classBasicPlayer.html#b12">BasicPlayer::turnBodyToObject</a>( <a class="code" href="SoccerTypes_8h.html#a240">ObjectT</a> o )00387 {00388   <font class="keywordflow">return</font> <a class="code" href="classBasicPlayer.html#b1">turnBodyToPoint</a>( <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a107">predictPosAfterNrCycles</a>(o, 1) );00389 }00390 <a name="l00406"></a><a class="code" href="classBasicPlayer.html#b13">00406</a> <a class="code" href="classSoccerCommand.html">SoccerCommand</a> <a class="code" href="classBasicPlayer.html#b13">BasicPlayer::turnNeckToObject</a>( <a class="code" href="SoccerTypes_8h.html#a240">ObjectT</a> o, <a class="code" href="classSoccerCommand.html">SoccerCommand</a> soc )00407 {00408   <font class="keywordflow">return</font> <a class="code" href="classBasicPlayer.html#b3">turnNeckToPoint</a>( <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a107">predictPosAfterNrCycles</a>(o, 1), soc );00409 }00410 <a name="l00442"></a><a class="code" href="classBasicPlayer.html#b14">00442</a> <a class="code" href="classSoccerCommand.html">SoccerCommand</a> <a class="code" href="classBasicPlayer.html#b14">BasicPlayer::moveToPos</a>( <a class="code" href="classVecPosition.html">VecPosition</a> posTo, <a class="code" href="Geometry_8h.html#a2">AngDeg</a> angWhenToTurn,00443                                       <font class="keywordtype">double</font> dDistBack, <font class="keywordtype">bool</font> bMoveBack )00444 {00445   <a class="code" href="classVecPosition.html">VecPosition</a> posPred   = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a108">predictAgentPos</a>( 1, 0 );00446   <a class="code" href="Geometry_8h.html#a2">AngDeg</a>      angBody   = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a38">getAgentGlobalBodyAngle</a>();00447   <a class="code" href="classVecPosition.html">VecPosition</a> posAgent  = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a43">getAgentGlobalPosition</a>();  00448   <a class="code" href="Geometry_8h.html#a2">AngDeg</a>      angTo     = ( posTo - posPred ).getDirection();00449               angTo     = <a class="code" href="classVecPosition.html#d1">VecPosition::normalizeAngle</a>( angTo - angBody );00450   <a class="code" href="Geometry_8h.html#a2">AngDeg</a>      angBackTo = <a class="code" href="classVecPosition.html#d1">VecPosition::normalizeAngle</a>( angTo + 180 );00451   <font class="keywordtype">double</font>      dDist     = posAgent.<a class="code" href="classVecPosition.html#a30">getDistanceTo</a>( posTo );00452 00453   <font class="keywordflow">if</font>( bMoveBack )00454   {00455     <font class="keywordflow">if</font>( fabs( angBackTo ) &lt; angWhenToTurn )00456       <font class="keywordflow">return</font> <a class="code" href="classBasicPlayer.html#b5">dashToPoint</a>( posTo );00457     <font class="keywordflow">else</font>00458       <font class="keywordflow">return</font> <a class="code" href="classBasicPlayer.html#b2">turnBackToPoint</a>( posTo );00459   }00460   <font class="keywordflow">else</font> <font class="keywordflow">if</font>(  fabs( angTo     ) &lt; angWhenToTurn ||00461            (fabs( angBackTo ) &lt; angWhenToTurn &amp;&amp; dDist &lt; dDistBack ) )00462     <font class="keywordflow">return</font> <a class="code" href="classBasicPlayer.html#b5">dashToPoint</a>( posTo );00463   <font class="keywordflow">else</font>00464     <font class="keywordflow">return</font> <a class="code" href="classBasicPlayer.html#b1">turnBodyToPoint</a>( posTo );00465 }00466 <a name="l00531"></a><a class="code" href="classBasicPlayer.html#b15">00531</a> <a class="code" href="classSoccerCommand.html">SoccerCommand</a> <a class="code" href="classBasicPlayer.html#b15">BasicPlayer::interceptClose</a>( )00532 {00533   <a class="code" href="classSoccerCommand.html">SoccerCommand</a> soc;00534   <font class="keywordtype">double</font>        dPower, dDist;00535   <a class="code" href="Geometry_8h.html#a2">AngDeg</a>        ang,    ang2;00536   <a class="code" href="classVecPosition.html">VecPosition</a>   s1,     s2;00537 00538   <font class="comment">// first determine whether if distance to ball is not too large</font>00539   dDist = 2*<a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a14">getPlayerSpeedMax</a>()00540           + (1.0 + <a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a60">getBallDecay</a>())*<a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a66">getBallSpeedMax</a>()00541           + <a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a210">getMaximalKickDist</a>();00542   <font class="keywordflow">if</font>( <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a54">getRelativeDistance</a>( <a class="code" href="SoccerTypes_8h.html#a240a24">OBJECT_BALL</a> ) &gt; dDist )00543     <font class="keywordflow">return</font> <a class="code" href="classSoccerCommand.html">SoccerCommand</a>( <a class="code" href="SoccerTypes_8h.html#a247a180">CMD_ILLEGAL</a> );00544 00545   <font class="comment">// initialize all variables with information from worldmodel.</font>00546   <a class="code" href="classVecPosition.html">VecPosition</a>   posAgent = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a43">getAgentGlobalPosition</a>( );00547   <a class="code" href="classVecPosition.html">VecPosition</a>   posPred  = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a108">predictAgentPos</a>( 1, 0 );00548   <a class="code" href="classVecPosition.html">VecPosition</a>   posBall  = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a107">predictPosAfterNrCycles</a>( <a class="code" href="SoccerTypes_8h.html#a240a24">OBJECT_BALL</a>, 1 );00549   <a class="code" href="classVecPosition.html">VecPosition</a>   velMe    = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a41">getAgentGlobalVelocity</a>( );00550   <a class="code" href="classStamina.html">Stamina</a>       sta      = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a39">getAgentStamina</a>( );00551   <a class="code" href="Geometry_8h.html#a2">AngDeg</a>        angBody  = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a38">getAgentGlobalBodyAngle</a>( );00552 00553   <font class="comment">// make a line from center of body in next cycle with direction of body</font>00554   <font class="comment">// use next cycle since current velocity is always propogated to position in</font>00555   <font class="comment">// next cycle.  Make a circle around the ball with a radius equal to the</font>00556   <font class="comment">// sum of your own body, the ball size and a small buffer. Then calculate</font>00557   <font class="comment">// the intersection between the line and this circle. These are the (two)</font>00558   <font class="comment">// points that denote the possible agent locations close to the ball</font>00559   <font class="comment">// From these two points we take the point where the body direction of the</font>00560   <font class="comment">// agent makes the smallest angle with the ball (with backward</font>00561   <font class="comment">// dashing we sometime have to dash "over" the ball to face it up front)</font>00562   <a class="code" href="classLine.html">Line</a> line = <a class="code" href="classLine.html#d1">Line::makeLineFromPositionAndAngle</a>(posPred,angBody);00563   dDist     = <a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a6">getPlayerSize</a>()+<a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a58">getBallSize</a>()+<a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a76">getKickableMargin</a>()/6;00564   <font class="keywordtype">int</font>  iSol = line.<a class="code" href="classLine.html#a3">getCircleIntersectionPoints</a>( <a class="code" href="classCircle.html">Circle</a>(posBall,dDist), &amp;s1, &amp;s2);00565   <font class="keywordflow">if</font> (iSol &gt; 0)                                          <font class="comment">// if a solution</font>00566   {00567     <font class="keywordflow">if</font> (iSol == 2)                                       <font class="comment">// take the best one</font>00568     {00569      ang  = <a class="code" href="classVecPosition.html#d1">VecPosition::normalizeAngle</a>((posBall - s1).getDirection() -angBody);00570      ang2 = <a class="code" href="classVecPosition.html#d1">VecPosition::normalizeAngle</a>((posBall - s2).getDirection() -angBody);00571      <font class="keywordflow">if</font> ( fabs(ang2) &lt; 90)00572        s1 = s2;                                          <font class="comment">// and put it in s1</font>00573     }00574 00575     <font class="comment">// try one dash</font>00576     <font class="comment">// now we have the interception point we try to reach in one cycle. We</font>00577     <font class="comment">// calculate the needed dash power from the current position to this point,</font>00578     <font class="comment">// predict were we will stand if we execute this command and check whether</font>00579     <font class="comment">// we are in the kickable distance</font>00580     dPower  = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a151">getPowerForDash</a>(s1-posAgent, angBody, velMe,sta.<a class="code" href="classStamina.html#a4">getEffort</a>() );00581     posPred = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a108">predictAgentPos</a>( 1, (<font class="keywordtype">int</font>)dPower);00582     <font class="keywordflow">if</font> ( posPred.<a class="code" href="classVecPosition.html#a30">getDistanceTo</a>( posBall ) &lt; <a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a210">getMaximalKickDist</a>() )00583       <font class="keywordflow">return</font> <a class="code" href="classSoccerCommand.html">SoccerCommand</a>( <a class="code" href="SoccerTypes_8h.html#a247a181">CMD_DASH</a>, dPower );00584   }00585 00586   <font class="comment">// try turn and then dash</font>

⌨️ 快捷键说明

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