basicplayer_8c-source.html

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

HTML
526
字号
00729     ang     = <a class="code" href="classVecPosition.html#d1">VecPosition::normalizeAngle</a>( ang - angBody );00730     <font class="keywordflow">if</font> (fabs( ang ) &gt; <a class="code" href="classBasicPlayer.html#n3">PS</a>-&gt;<a class="code" href="classPlayerSettings.html#a9">getPlayerWhenToTurnAngle</a>() ) <font class="comment">// if we want to turn</font>00731     {00732       soc = <a class="code" href="classBasicPlayer.html#b1">turnBodyToPoint</a>( posBall, 2 );             <font class="comment">// perform turn</font>00733       <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a103">predictAgentStateAfterCommand</a>(soc,&amp;posPred,&amp;velMe,&amp;angBody,&amp;ang,&amp;sta );00734       dPower=<a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a151">getPowerForDash</a>(posBall-posPred,angBody,velMe,sta.<a class="code" href="classStamina.html#a4">getEffort</a>());00735       <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a105">predictStateAfterDash</a>( dPower, &amp;posPred, &amp;velMe, &amp;sta, angBody);00736       <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#a48">getCatchableAreaL</a>() )00737         <font class="keywordflow">return</font> soc;00738     }00739   }00740 00741   <font class="comment">// did not succeed</font>00742   <font class="keywordflow">return</font> <a class="code" href="classSoccerCommand.html">SoccerCommand</a>( <a class="code" href="SoccerTypes_8h.html#a247a180">CMD_ILLEGAL</a> );00743 }00744 <a name="l00775"></a><a class="code" href="classBasicPlayer.html#b17">00775</a> <a class="code" href="classSoccerCommand.html">SoccerCommand</a> <a class="code" href="classBasicPlayer.html#b17">BasicPlayer::kickTo</a>( <a class="code" href="classVecPosition.html">VecPosition</a> posTarget, <font class="keywordtype">double</font> dEndSpeed )00776 {00777   <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#a47">getBallPos</a>();00778   <a class="code" href="classVecPosition.html">VecPosition</a> velBall = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a53">getGlobalVelocity</a>(<a class="code" href="SoccerTypes_8h.html#a240a24">OBJECT_BALL</a>);00779   <a class="code" href="classVecPosition.html">VecPosition</a> posTraj = posTarget - posBall;00780   <a class="code" href="classVecPosition.html">VecPosition</a> velDes  = <a class="code" href="classVecPosition.html">VecPosition</a>(00781                <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a145">getKickSpeedToTravel</a>( posTraj.<a class="code" href="classVecPosition.html#a32">getMagnitude</a>(), dEndSpeed ),00782                posTraj.<a class="code" href="classVecPosition.html#a33">getDirection</a>(),00783                POLAR                                                        );00784   <font class="keywordtype">double</font>      dPower;00785   <a class="code" href="Geometry_8h.html#a2">AngDeg</a>      angActual;00786 00787   Log.log( 101, <font class="stringliteral">"glob pos ball (%f,%f), glob pos agent (%f,%f), ang %f %f"</font> , 00788           <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a47">getBallPos</a>().<a class="code" href="classVecPosition.html#a26">getX</a>(), <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a47">getBallPos</a>().<a class="code" href="classVecPosition.html#a28">getY</a>(),00789           <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a43">getAgentGlobalPosition</a>().<a class="code" href="classVecPosition.html#a26">getX</a>(),00790           <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a43">getAgentGlobalPosition</a>().<a class="code" href="classVecPosition.html#a28">getY</a>(),          00791           <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a38">getAgentGlobalBodyAngle</a>(),00792           <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a37">getAgentGlobalNeckAngle</a>() );00793   Log.log( 101, <font class="stringliteral">"rel pos body (%f,%f), velocity ball: (%f,%f)"</font> , 00794           <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> ),00795           <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a56">getRelativeAngle</a>( <a class="code" href="SoccerTypes_8h.html#a240a24">OBJECT_BALL</a>, <font class="keyword">true</font> ),00796            velBall.<a class="code" href="classVecPosition.html#a26">getX</a>(), velBall.<a class="code" href="classVecPosition.html#a28">getY</a>() );00797            00798   <font class="keywordflow">if</font>( velDes.<a class="code" href="classVecPosition.html#a32">getMagnitude</a>() &gt; <a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a66">getBallSpeedMax</a>() ) <font class="comment">// can never reach point</font>00799   {00800            dPower     = <a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a94">getMaxPower</a>();00801     <font class="keywordtype">double</font> dSpeed     = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a143">getActualKickPowerRate</a>() * dPower;00802     <font class="keywordtype">double</font> tmp        = velBall.<a class="code" href="classVecPosition.html#a47">rotate</a>(-velDes.<a class="code" href="classVecPosition.html#a33">getDirection</a>()).<a class="code" href="classVecPosition.html#a28">getY</a>();00803            angActual  = velDes.<a class="code" href="classVecPosition.html#a33">getDirection</a>() - <a class="code" href="Geometry_8h.html#a11">asinDeg</a>( tmp / dSpeed );00804     <font class="keywordtype">double</font> dSpeedPred = ( <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a53">getGlobalVelocity</a>(<a class="code" href="SoccerTypes_8h.html#a240a24">OBJECT_BALL</a>)+00805                          VecPosition(dSpeed,angActual, POLAR )).getMagnitude();00806 00807     <font class="comment">// but ball acceleration in right direction is very high</font>00808     <font class="keywordflow">if</font>( dSpeedPred &gt; <a class="code" href="classBasicPlayer.html#n3">PS</a>-&gt;<a class="code" href="classPlayerSettings.html#a11">getPlayerWhenToKick</a>()*<a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a68">getBallAccelMax</a>() )00809     {00810       Log.log( 101, <font class="stringliteral">"point too far, but can acccelerate ball good to %f k=%f,%f"</font>,00811                      dSpeedPred, dSpeed, tmp );00812       <font class="keywordflow">return</font> <a class="code" href="classBasicPlayer.html#b8">accelerateBallToVelocity</a>( velDes );    <font class="comment">// shoot nevertheless</font>00813     }00814     <font class="keywordflow">else</font> <font class="keywordflow">if</font>( <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a143">getActualKickPowerRate</a>() &gt;00815         <a class="code" href="classBasicPlayer.html#n3">PS</a>-&gt;<a class="code" href="classPlayerSettings.html#a11">getPlayerWhenToKick</a>() * <a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a82">getKickPowerRate</a>() )00816     {00817       Log.log( 101, <font class="stringliteral">"point too far, freeze ball"</font> ); <font class="comment">// ball well-positioned</font>00818       <font class="keywordflow">return</font> <a class="code" href="classBasicPlayer.html#b6">freezeBall</a>();                          <font class="comment">// freeze ball</font>00819     }00820     <font class="keywordflow">else</font>00821     {00822       Log.log( 101, <font class="stringliteral">"point too far, reposition ball (k_r = %f)"</font>,00823       <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a143">getActualKickPowerRate</a>()/(<a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a82">getKickPowerRate</a>()) );00824       <font class="keywordflow">return</font> <a class="code" href="classBasicPlayer.html#b7">kickBallCloseToBody</a>( 0 );            <font class="comment">// else position ball better</font>00825     }00826   }00827   <font class="keywordflow">else</font>                                            <font class="comment">// can reach point</font>00828   {00829     VecPosition accBallDes = velDes - velBall;00830     dPower = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a144">getKickPowerForSpeed</a>(accBallDes.<a class="code" href="classVecPosition.html#a32">getMagnitude</a>());00831     <font class="keywordflow">if</font>( dPower &lt;= 0.95*<a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a94">getMaxPower</a>() )        <font class="comment">// with current ball speed</font>00832     {                               <font class="comment">// 0.95 since cannot get ball fully perfect</font>00833       Log.log( 101, <font class="stringliteral">"point good and can reach point"</font> );00834       <font class="keywordflow">return</font> <a class="code" href="classBasicPlayer.html#b8">accelerateBallToVelocity</a>( velDes );  <font class="comment">// perform shooting action</font>00835     }00836     <font class="keywordflow">else</font>00837     {00838       Log.log( 101, <font class="stringliteral">"point good, but reposition ball since need %f"</font>,dPower );00839       <font class="keywordflow">return</font> <a class="code" href="classBasicPlayer.html#b7">kickBallCloseToBody</a>( 0 );            <font class="comment">// else position ball better</font>00840     }00841   }00842 }00843 <a name="l00871"></a><a class="code" href="classBasicPlayer.html#b18">00871</a> <a class="code" href="classSoccerCommand.html">SoccerCommand</a> <a class="code" href="classBasicPlayer.html#b18">BasicPlayer::turnWithBallTo</a>( <a class="code" href="Geometry_8h.html#a2">AngDeg</a> ang, <a class="code" href="Geometry_8h.html#a2">AngDeg</a> angKickThr,00872                                            <font class="keywordtype">double</font> dFreezeThr )00873 {00874   <font class="comment">// if opponent is close </font>00875   <font class="comment">// if ball is located more than 'angKickThr' degrees from ang</font>00876   <font class="comment">//  kick ball to point right in front of player in direction ang</font>00877   <font class="comment">// else if ball has still speed higher than 'dFreezeThr'</font>00879 <font class="comment">  // else</font>00880   <font class="comment">//  turn to direction 'ang'</font>00881   <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>();00882   <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#a47">getBallPos</a>();00883   <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>();00884   <a class="code" href="Geometry_8h.html#a2">AngDeg</a>      angDiff  = (posBall-posAgent).getDirection() - ang;00885               angDiff  = <a class="code" href="classVecPosition.html#d1">VecPosition::normalizeAngle</a>( angDiff );00886   <font class="keywordtype">double</font>      dDist;00887   <a class="code" href="SoccerTypes_8h.html#a240">ObjectT</a>     objOpp   = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a116">getClosestInSetTo</a>( <a class="code" href="SoccerTypes_8h.html#a241a116">OBJECT_SET_OPPONENTS</a>,00888                            <a class="code" href="classBasicPlay

⌨️ 快捷键说明

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