sensehandler_8c-source.html

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

HTML
583
字号
00398 <a name="l00404"></a><a class="code" href="classSenseHandler.html#a7">00404</a> <font class="keywordtype">bool</font> <a class="code" href="classSenseHandler.html#a7">SenseHandler::analyzeInitMessage</a>( <font class="keywordtype">char</font> *strMsg )00405 {00406   strMsg += 6;                                            <font class="comment">// go to Side</font>00407   <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a17">setSide</a>( <a class="code" href="classSoccerTypes.html#d32">SoccerTypes::getSideFromStr</a>( strMsg ) );   <font class="comment">// get and set Side</font>00408   <font class="keywordtype">int</font> nr = <a class="code" href="classParse.html#d1">Parse::parseFirstInt</a>( &amp;strMsg );               <font class="comment">// get and set number</font>00409   <font class="keywordflow">if</font>( nr == 0 )                                           <font class="comment">// coach</font>00410   {00411      <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a15">setPlayerNumber</a>( nr );00412      <font class="keywordflow">return</font> <font class="keyword">true</font>;00413   }00414   <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a35">setAgentObjectType</a>( <a class="code" href="classSoccerTypes.html#d15">SoccerTypes::getTeammateObjectFromIndex</a>( nr - 1 ) );00415   <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a15">setPlayerNumber</a>( nr );00416   strMsg++;                                               <font class="comment">// skip space to pm</font>00417   <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a21">setPlayMode</a>( <a class="code" href="classSoccerTypes.html#d19">SoccerTypes::getPlayModeFromStr</a>( strMsg ) ); <font class="comment">// get playmode</font>00418   <font class="keywordflow">return</font> <font class="keyword">true</font>;00419 }00420 <a name="l00428"></a><a class="code" href="classSenseHandler.html#a8">00428</a> <font class="keywordtype">bool</font> <a class="code" href="classSenseHandler.html#a8">SenseHandler::analyzeHearMessage</a>( <font class="keywordtype">char</font> *strMsg )00429 {00430   <a class="code" href="SoccerTypes_8h.html#a243">RefereeMessageT</a> rm;00431   <a class="code" href="SoccerTypes_8h.html#a242">PlayModeT</a>       pm;00432   strcpy( <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#m5">strLastHearMessage</a>, strMsg);00433 00434   <a class="code" href="classParse.html#d1">Parse::parseFirstInt</a>( &amp;strMsg );                          <font class="comment">// ignore time</font>00435   <a class="code" href="classTime.html">Time</a> time = <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a4">getCurrentTime</a>();00436 00437   <font class="keywordflow">switch</font>( <a class="code" href="classParse.html#d4">Parse::gotoFirstNonSpace</a>( &amp;strMsg ) )00438   {00439     <font class="keywordflow">case</font> <font class="charliteral">'r'</font>:                                               <font class="comment">// referee</font>00440       <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a2">setTimeLastRefereeMessage</a>( time );00441       <a class="code" href="classParse.html#d3">Parse::gotoFirstOccurenceOf</a>( <font class="charliteral">' '</font>, &amp;strMsg );          <font class="comment">// go to start</font>00442       <a class="code" href="classParse.html#d4">Parse::gotoFirstNonSpace</a>   ( &amp;strMsg      );          <font class="comment">// and first part</font>00443       rm = <a class="code" href="classSoccerTypes.html#d23">SoccerTypes::getRefereeMessageFromStr</a>( strMsg ); <font class="comment">// get the ref msg</font>00444       Log.logWithTime( 2, <font class="stringliteral">" referee message: %s %s"</font>,00445       <a class="code" href="classSoccerTypes.html#d22">SoccerTypes::getRefereeMessageStr</a>(rm), <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#m5">strLastHearMessage</a>);00446       pm = <a class="code" href="classSoccerTypes.html#d20">SoccerTypes::getPlayModeFromRefereeMessage</a>( rm );<font class="comment">// get play mode</font>00447       <font class="keywordflow">if</font>( pm != <a class="code" href="SoccerTypes_8h.html#a242a140">PM_ILLEGAL</a> )                                <font class="comment">// from ref msg</font>00448         <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a21">setPlayMode</a>( pm );                              <font class="comment">// if was pm, set it</font>00449 00450       <font class="keywordflow">if</font>( rm == <a class="code" href="SoccerTypes_8h.html#a243a165">REFC_GOAL_LEFT</a> )                            <font class="comment">// goal left</font>00451       {00452         <font class="keywordflow">if</font>( <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a16">getSide</a>() == <a class="code" href="SoccerTypes_8h.html#a246a177">SIDE_LEFT</a> )00453           <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a23">addOneToGoalDiff</a>();00454         <font class="keywordflow">else</font>00455           <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a24">subtractOneFromGoalDiff</a>();00456         <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a88">processSeeGlobalInfo</a>( <a class="code" href="SoccerTypes_8h.html#a240a24">OBJECT_BALL</a>, time, <a class="code" href="classVecPosition.html">VecPosition</a>( 0, 0 ),00457              <a class="code" href="classVecPosition.html">VecPosition</a>( 0, 0 ), 0, 0 );00458       }00459       <font class="keywordflow">else</font> <font class="keywordflow">if</font>( rm == <a class="code" href="SoccerTypes_8h.html#a243a166">REFC_GOAL_RIGHT</a> )                      <font class="comment">// goal right</font>00460       {00461         <font class="keywordflow">if</font>( <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a16">getSide</a>() == <a class="code" href="SoccerTypes_8h.html#a246a178">SIDE_RIGHT</a> )00462           <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a23">addOneToGoalDiff</a>();00463         <font class="keywordflow">else</font>00464           <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a24">subtractOneFromGoalDiff</a>();00465         <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a88">processSeeGlobalInfo</a>( <a class="code" href="SoccerTypes_8h.html#a240a24">OBJECT_BALL</a>, time, <a class="code" href="classVecPosition.html">VecPosition</a>( 0, 0 ),00466              <a class="code" href="classVecPosition.html">VecPosition</a>( 0, 0 ), 0, 0 );        00467       }00468       <font class="keywordflow">else</font> <font class="keywordflow">if</font>( rm == <a class="code" href="SoccerTypes_8h.html#a243a168">REFC_GOALIE_CATCH_BALL_LEFT</a> ||         <font class="comment">// catch ball</font>00469                rm == <a class="code" href="SoccerTypes_8h.html#a243a169">REFC_GOALIE_CATCH_BALL_RIGHT</a> )00470         <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a95">processCatchedBall</a>( rm, time );00471       <font class="keywordflow">break</font>;00472     <font class="keywordflow">case</font> <font class="charliteral">'s'</font>:                                               <font class="comment">// self</font>00473       <font class="keywordflow">break</font>;                                                <font class="comment">// do nothing</font>00474     <font class="keywordflow">default</font>:                                                <font class="comment">// from direction</font>00475         <a class="code" href="classSenseHandler.html#a9">analyzePlayerMessage</a>( strMsg );                     <font class="comment">// from player</font>00476       <font class="keywordflow">break</font>;00477   }00478 00479   <font class="keywordflow">return</font> <font class="keyword">true</font>;00480 }00481 <a name="l00493"></a><a class="code" href="classSenseHandler.html#a9">00493</a> <font class="keywordtype">bool</font> <a class="code" href="classSenseHandler.html#a9">SenseHandler::analyzePlayerMessage</a>( <font class="keywordtype">char</font> *strMsg )00494 {00495   <a class="code" href="classParse.html#d1">Parse::parseFirstInt</a>( &amp;strMsg );        <font class="comment">// skip direction</font>00496   <a class="code" href="classParse.html#d4">Parse::gotoFirstNonSpace</a>( &amp;strMsg );    <font class="comment">// skip space</font>00497   strMsg++;                               <font class="comment">// skip " (=quote)</font>00498 00499   <font class="comment">// first character is team side</font>00500   <font class="keywordtype">char</font> cSide = (<a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a16">getSide</a>() == <a class="code" href="SoccerTypes_8h.html#a246a177">SIDE_LEFT</a>) ? <font class="charliteral">'l'</font> : <font class="charliteral">'r'</font> ;00501 00502   <font class="keywordflow">if</font>( cSide != strMsg[0] )                <font class="comment">// not team side probably msg from opp</font>00503     <font class="keywordflow">return</font> <font class="keyword">false</font>;00504 00505   strMsg++;                              <font class="comment">// go to next</font>00506 00507   <font class="keywordflow">if</font>( strlen(strMsg) &lt; 7    ||           <font class="comment">// encoding always at least 7 chars</font>00508       strMsg[0]      &lt; <font class="charliteral">'a'</font>  ||           <font class="comment">// and between 'a' and 'a' + 9 since</font>00509       strMsg[0]      &gt; <font class="charliteral">'a'</font>+ 9 )          <font class="comment">// it is a number added to 'a'.</font>00510     <font class="keywordflow">return</font> <font class="keyword">false</font>;                        <font class="comment">// not right -&gt; message from opponent</font>00511 00512   <font class="keywordtype">int</font> i[4];                              <font class="comment">// decode message by subracting</font>00513   i[0] =        (int)(strMsg[0] - <font class="charliteral">'a'</font>);  <font class="comment">// string 'acegi' from message.</font>00514   i[1] =        (int)(strMsg[1] - <font class="charliteral">'c'</font>);  <font class="comment">// resulting number indicate cycle and</font>00515   i[2] =        (int)(strMsg[2] - <font class="charliteral">'e'</font>);  <font class="comment">// player number.</font>00516   i[3] =        (int)(strMsg[3] - <font class="charliteral">'g'</font>);00517   <font class="keywordtype">int</font> iPlayer = (int)(strMsg[4] - <font class="charliteral">'i'</font>);00518 00519   <font class="keywordtype">int</font> iTime = i[0]*1000+i[1]*100+i[2]*10+i[3];00520 00521   <font class="keywordtype">int</font>    iDiff = iTime - <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a5">getCurrentCycle</a>()%10000;00522   <font class="keywordtype">double</font> dDiff = iDiff/100;00523 00524   <font class="keywordflow">if</font>( fabs(iDiff) &gt; 2 &amp;&amp; strMsg[0] != <font class="charliteral">'F'</font> )00525   {00526     printf( <font class="stringliteral">"(SenseHandler::%s) information is outdated:%d %d in:"</font>,00527                       __FUNCTION__, iTime, <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#a5">getCurrentCycle</a>() );00528     printf( <font class="stringliteral">"%s\n"</font>, <a class="code" href="classSenseHandler.html#o0">WM</a>-&gt;<a class="code" href="classWorldModel.html#m5">strLastHearMessage</a> );00529     <font class="keywordflow">return</font> <font class="keyword">false</font>;00530   }00531 00532   <font class="comment">// is message from teammate, so start retrieving information</font>00533   <a class="code" href="classVecPosition.html">VecPosition</a> pos, vel;00534   <font class="keywordtype">double</font>      dConf;00535   <a class="code" href="SoccerTypes_8h.html#a240">ObjectT</a>     obj;00536 00537   <font class="comment">// parse information from player that sent the message</font>

⌨️ 快捷键说明

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