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 ) > <a class="code" href="classBasicPlayer.html#n3">PS</a>-><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>-><a class="code" href="classWorldModel.html#a103">predictAgentStateAfterCommand</a>(soc,&posPred,&velMe,&angBody,&ang,&sta );00734 dPower=<a class="code" href="classBasicPlayer.html#n1">WM</a>-><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>-><a class="code" href="classWorldModel.html#a105">predictStateAfterDash</a>( dPower, &posPred, &velMe, &sta, angBody);00736 <font class="keywordflow">if</font>( posPred.<a class="code" href="classVecPosition.html#a30">getDistanceTo</a>(posBall) < <a class="code" href="classBasicPlayer.html#n2">SS</a>-><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>-><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>-><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>-><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>-><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>-><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>-><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>-><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>-><a class="code" href="classWorldModel.html#a38">getAgentGlobalBodyAngle</a>(),00792 <a class="code" href="classBasicPlayer.html#n1">WM</a>-><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>-><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>-><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>() > <a class="code" href="classBasicPlayer.html#n2">SS</a>-><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>-><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>-><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>-><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 > <a class="code" href="classBasicPlayer.html#n3">PS</a>-><a class="code" href="classPlayerSettings.html#a11">getPlayerWhenToKick</a>()*<a class="code" href="classBasicPlayer.html#n2">SS</a>-><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>-><a class="code" href="classWorldModel.html#a143">getActualKickPowerRate</a>() >00815 <a class="code" href="classBasicPlayer.html#n3">PS</a>-><a class="code" href="classPlayerSettings.html#a11">getPlayerWhenToKick</a>() * <a class="code" href="classBasicPlayer.html#n2">SS</a>-><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>-><a class="code" href="classWorldModel.html#a143">getActualKickPowerRate</a>()/(<a class="code" href="classBasicPlayer.html#n2">SS</a>-><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>-><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 <= 0.95*<a class="code" href="classBasicPlayer.html#n2">SS</a>-><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>-><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>-><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>-><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>-><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 + -
显示快捷键?