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>-><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>( &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>-><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>-><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>-><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>-><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>-><a class="code" href="classWorldModel.html#m5">strLastHearMessage</a>, strMsg);00433 00434 <a class="code" href="classParse.html#d1">Parse::parseFirstInt</a>( &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>-><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>( &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>-><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>, &strMsg ); <font class="comment">// go to start</font>00442 <a class="code" href="classParse.html#d4">Parse::gotoFirstNonSpace</a> ( &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>-><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>-><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>-><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>-><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>-><a class="code" href="classWorldModel.html#a24">subtractOneFromGoalDiff</a>();00456 <a class="code" href="classSenseHandler.html#o0">WM</a>-><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>-><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>-><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>-><a class="code" href="classWorldModel.html#a24">subtractOneFromGoalDiff</a>();00465 <a class="code" href="classSenseHandler.html#o0">WM</a>-><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>-><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>( &strMsg ); <font class="comment">// skip direction</font>00496 <a class="code" href="classParse.html#d4">Parse::gotoFirstNonSpace</a>( &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>-><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) < 7 || <font class="comment">// encoding always at least 7 chars</font>00508 strMsg[0] < <font class="charliteral">'a'</font> || <font class="comment">// and between 'a' and 'a' + 9 since</font>00509 strMsg[0] > <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 -> 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>-><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) > 2 && 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>-><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>-><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 + -
显示快捷键?