worldmodel_8c-source.html

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

HTML
685
字号
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>WorldModel.C Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body bgcolor="#ffffff"><!-- Generated by Doxygen 1.2.12 --><center><a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center><hr><h1>WorldModel.C</h1><a href="WorldModel_8C.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <font class="comment">/*</font>00002 <font class="comment">Copyright (c) 2000,2001, Jelle Kok, University of Amsterdam</font>00003 <font class="comment">All rights reserved.</font>00004 <font class="comment"></font>00005 <font class="comment">Redistribution and use in source and binary forms, with or without </font>00006 <font class="comment">modification, are permitted provided that the following conditions are met:</font>00007 <font class="comment"></font>00008 <font class="comment">1. Redistributions of source code must retain the above copyright notice, this </font>00009 <font class="comment">list of conditions and the following disclaimer. </font>00010 <font class="comment"></font>00011 <font class="comment">2. Redistributions in binary form must reproduce the above copyright notice, </font>00012 <font class="comment">this list of conditions and the following disclaimer in the documentation </font>00013 <font class="comment">and/or other materials provided with the distribution. </font>00014 <font class="comment"></font>00015 <font class="comment">3. Neither the name of the University of Amsterdam nor the names of its </font>00016 <font class="comment">contributors may be used to endorse or promote products derived from this </font>00017 <font class="comment">software without specific prior written permission. </font>00018 <font class="comment"></font>00019 <font class="comment">THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" </font>00020 <font class="comment">AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE </font>00021 <font class="comment">IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE </font>00022 <font class="comment">DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE </font>00023 <font class="comment">FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL </font>00024 <font class="comment">DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR </font>00025 <font class="comment">SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER </font>00026 <font class="comment">CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, </font>00027 <font class="comment">OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE </font>00028 <font class="comment">OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</font>00029 <font class="comment">*/</font>00043 <font class="preprocessor">#include&lt;stdio.h&gt;</font>    <font class="comment">// needed for printf</font>00044 <font class="preprocessor">#include&lt;strings.h&gt;</font>  <font class="comment">// needed for strcpy</font>00045 <font class="preprocessor">#include&lt;errno.h&gt;</font>    <font class="comment">// needed for ETIMEDOUT</font>00046 <font class="preprocessor">#include&lt;pthread.h&gt;</font>  <font class="comment">// needed for pthread_mutex_init</font>00047 <font class="preprocessor">#include&lt;string.h&gt;</font>   <font class="comment">// needed for strcpy</font>00048 <font class="preprocessor">#include&lt;math.h&gt;</font>     <font class="comment">// needed for erf</font>00049 <font class="preprocessor">#include"<a class="code" href="WorldModel_8h.html">WorldModel.h</a>"</font>00050 00051 <font class="comment">/*****************************************************************************/</font>00052 <font class="comment">/********************** CLASS WORLDMODEL *************************************/</font>00053 <font class="comment">/*****************************************************************************/</font>00054 <a name="l00059"></a><a class="code" href="classWorldModel.html#a152">00059</a> <a class="code" href="classWorldModel.html#a152">WorldModel::WorldModel</a>( <a class="code" href="classServerSettings.html">ServerSettings</a> *ss, <a class="code" href="classPlayerSettings.html">PlayerSettings</a> *ps):00060     agentObject(  )00061 {00062   <a class="code" href="classWorldModel.html#o0">SS</a>                    = ss;00063   <a class="code" href="classWorldModel.html#o1">PS</a>                    = ps;00064   <a class="code" href="classWorldModel.html#o5">bNewInfo</a>              = <font class="keyword">false</font>;00065 00066   <a class="code" href="classWorldModel.html#a17">setSide</a>                ( <a class="code" href="SoccerTypes_8h.html#a246a179">SIDE_ILLEGAL</a> ); <font class="comment">// is set by init message</font>00067   <a class="code" href="classWorldModel.html#o8">strTeamName</a>[0]        = <font class="charliteral">'\0'</font>;00068   <a class="code" href="classWorldModel.html#a21">setPlayMode</a>            ( <a class="code" href="SoccerTypes_8h.html#a242a121">PM_BEFORE_KICK_OFF</a> );00069   <a class="code" href="classWorldModel.html#o12">iGoalDiff</a>             = 0;00070 00071   <font class="keywordtype">int</font> i;00072   <font class="keywordflow">for</font>( i = 0; i &lt; <a class="code" href="SoccerTypes_8h.html#a0">MAX_TEAMMATES</a> ; i ++ )00073     <a class="code" href="classWorldModel.html#o15">Teammates</a>[i].<a class="code" href="classObject.html#a5">setType</a>( <a class="code" href="classSoccerTypes.html#d15">SoccerTypes::getTeammateObjectFromIndex</a>( i ) );00074   <font class="keywordflow">for</font>( i = 0; i &lt; <a class="code" href="SoccerTypes_8h.html#a1">MAX_OPPONENTS</a> ; i ++ )00075     <a class="code" href="classWorldModel.html#o16">Opponents</a>[i].<a class="code" href="classObject.html#a5">setType</a>( <a class="code" href="classSoccerTypes.html#d16">SoccerTypes::getOpponentObjectFromIndex</a>( i ) );00076   <font class="keywordflow">for</font>( i = 0; i &lt; <a class="code" href="SoccerTypes_8h.html#a1">MAX_OPPONENTS</a> + <a class="code" href="SoccerTypes_8h.html#a0">MAX_TEAMMATES</a> ; i ++ )00077     <a class="code" href="classWorldModel.html#o17">UnknownPlayers</a>[i].<a class="code" href="classObject.html#a5">setType</a>( <a class="code" href="SoccerTypes_8h.html#a240a113">OBJECT_ILLEGAL</a> );00078   <font class="keywordflow">for</font>( i = 0; i &lt; <a class="code" href="SoccerTypes_8h.html#a9">MAX_FLAGS</a>; i ++ )00079     <a class="code" href="classWorldModel.html#o19">Flags</a>[i].<a class="code" href="classObject.html#a5">setType</a>( <a class="code" href="SoccerTypes_8h.html#a240a113">OBJECT_ILLEGAL</a> );00080   <font class="keywordflow">for</font>( i = 0; i &lt; <a class="code" href="SoccerTypes_8h.html#a10">MAX_LINES</a>; i ++ )00081     <a class="code" href="classWorldModel.html#o20">Lines</a>[i].<a class="code" href="classObject.html#a5">setType</a>( <a class="code" href="SoccerTypes_8h.html#a240a113">OBJECT_ILLEGAL</a> );00082 00083   <a class="code" href="classWorldModel.html#o18">iNrUnknownPlayers</a>     = 0;00084 00085   <a class="code" href="classWorldModel.html#o13">Ball</a>.<a class="code" href="classObject.html#a5">setType</a>             ( <a class="code" href="SoccerTypes_8h.html#a240a24">OBJECT_BALL</a>    );00086   <a class="code" href="classWorldModel.html#o14">agentObject</a>.<a class="code" href="classObject.html#a5">setType</a>      ( <a class="code" href="SoccerTypes_8h.html#a240a113">OBJECT_ILLEGAL</a> );00087   <a class="code" href="classWorldModel.html#o14">agentObject</a>.<a class="code" href="classAgentObject.html#a10">setStamina</a>   ( <a class="code" href="classStamina.html">Stamina</a>(<a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a18">getStaminaMax</a>(),1.0,1.0) );00088 00089   <font class="keywordflow">for</font>( i = 0 ; i &lt; <a class="code" href="SoccerTypes_8h.html#a247a191">CMD_MAX_COMMANDS</a> ; i ++ )00090   {00091     <a class="code" href="classWorldModel.html#o24">queuedCommands</a>[i].<a class="code" href="classSoccerCommand.html#m1">commandType</a> = (CommandT)i;00092     <a class="code" href="classWorldModel.html#o25">performedCommands</a>[i]          = <font class="keyword">false</font>;00093     <a class="code" href="classWorldModel.html#o26">iCommandCounters</a>[i]           = 0;00094   }00095 00096   <a class="code" href="classWorldModel.html#m0">iNrHoles</a>              = 0;00097   <a class="code" href="classWorldModel.html#m1">iNrOpponentsSeen</a>      = 0;00098   <a class="code" href="classWorldModel.html#m2">iNrTeammatesSeen</a>      = 0;00099   <a class="code" href="classWorldModel.html#o28">bsCheckBall</a>           = <a class="code" href="SoccerTypes_8h.html#a250a206">BS_ILLEGAL</a>;00100 00101   <font class="comment">// initialize the mutex for bNewInfo</font>00102   pthread_mutex_init( &amp;<a class="code" href="classWorldModel.html#o29">mutex_newInfo</a>, NULL );00103   pthread_cond_init ( &amp;<a class="code" href="classWorldModel.html#o30">cond_newInfo</a>, NULL );00104 }00105 <a name="l00110"></a><a class="code" href="classWorldModel.html#c0">00110</a> <a class="code" href="classObject.html">Object</a>* <a class="code" href="classWorldModel.html#c0">WorldModel::getObjectPtrFromType</a>( <a class="code" href="SoccerTypes_8h.html#a240">ObjectT</a> o )00111 {00112   <a class="code" href="classObject.html">Object</a> *object = NULL;00113   <font class="keywordflow">if</font>( o == <a class="code" href="SoccerTypes_8h.html#a240a113">OBJECT_ILLEGAL</a> )00114     <font class="keywordflow">return</font> NULL;00115 00116   <font class="keywordflow">if</font>( <a class="code" href="classSoccerTypes.html#d13">SoccerTypes::isKnownPlayer</a>( o ) )00117   {00118     <font class="keywordflow">if</font>( o == <a class="code" href="classWorldModel.html#o14">agentObject</a>.<a class="code" href="classObject.html#a6">getType</a>() )00119       object = &amp;<a class="code" href="classWorldModel.html#o14">agentObject</a>;00120     <font class="keywordflow">else</font> <font class="keywordflow">if</font>( <a class="code" href="classSoccerTypes.html#d9">SoccerTypes::isTeammate</a>( o ) )00121       object = &amp;<a class="code" href="classWorldModel.html#o15">Teammates</a>[<a class="code" href="classSoccerTypes.html#d14">SoccerTypes::getIndex</a>(o)];00122     <font class="keywordflow">else</font>00123       object = &amp;<a class="code" href="classWorldModel.html#o16">Opponents</a>[<a class="code" href="classSoccerTypes.html#d14">SoccerTypes::getIndex</a>(o)];00124   }00125   <font class="keywordflow">else</font> <font class="keywordflow">if</font>( <a class="code" href="classSoccerTypes.html#d3">SoccerTypes::isFlag</a>( o ) )00126     object = &amp;<a class="code" href="classWorldModel.html#o19">Flags</a>[<a class="code" href="classSoccerTypes.html#d14">SoccerTypes::getIndex</a>(o)];00127   <font class="keywordflow">else</font> <font class="keywordflow">if</font>( <a class="code" href="classSoccerTypes.html#d4">SoccerTypes::isLine</a>( o ) )00128     object = &amp;<a class="code" href="classWorldModel.html#o20">Lines</a>[<a class="code" href="classSoccerTypes.html#d14">SoccerTypes::getIndex</a>(o)];00129   <font class="keywordflow">else</font> <font class="keywordflow">if</font>( <a class="code" href="classSoccerTypes.html#d8">SoccerTypes::isBall</a>( o ) )00130     object = &amp;<a class="code" href="classWorldModel.html#o13">Ball</a>;00131   <font class="keywordflow">else</font> <font class="keywordflow">if</font>( o == <a class="code" href="SoccerTypes_8h.html#a240a112">OBJECT_OPPONENT_GOALIE</a> )00132     <font class="keywordflow">return</font> <a class="code" href="classWorldModel.html#c0">getObjectPtrFromType</a>( <a class="code" href="classWorldModel.html#a63">getOppGoalieType</a>() );00133   <font class="keywordflow">else</font> <font class="keywordflow">if</font>( o == <a class="code" href="SoccerTypes_8h.html#a240a111">OBJECT_TEAMMATE_GOALIE</a> )00134     <font class="keywordflow">return</font> <a class="code" href="classWorldModel.html#c0">getObjectPtrFromType</a>( <a class="code" href="classWorldModel.html#a64">getOwnGoalieType</a>() );00135  <font class="keywordflow">return</font> object;00136 }00137 <a name="l00143"></a><a class="code" href="classWorldModel.html#a0">00143</a> <font class="keywordtype">void</font> <a class="code" href="classWorldModel.html#a0">WorldModel::setTimeLastCatch</a>( <a class="code" href="classTime.html">Time</a> time )00144 {00145   <a class="code" href="classWorldModel.html#o6">timeLastCatch</a> = time;00146 }00147 <a name="l00150"></a><a class="code" href="classWorldModel.html#a1">00150</a> <font class="keywordtype">int</font> <a class="code" href="classWorldModel.html#a1">WorldModel::getTimeSinceLastCatch</a>()00151 {00152   <font class="keywordflow">if</font>( <a class="code" href="classWorldModel.html#o6">timeLastCatch</a>.<a class="code" href="classTime.html#a3">getTime</a>() == -1 )00153     <font class="keywordflow">return</font> 1000;00154   <font class="keywordflow">return</font> <a class="code" href="classWorldModel.html#o4">timeLastSenseMessage</a> - <a class="code" href="classWorldModel.html#o6">timeLastCatch</a>;00155 }00156 <a name="l00160"></a><a class="code" href="classWorldModel.html#a2">00160</a> <font class="keywordtype">bool</font> <a class="code" href="classWorldModel.html#a2">WorldModel::setTimeLastRefereeMessage</a>( <a class="code" href="classTime.html">Time</a> time )

⌨️ 快捷键说明

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