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> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="globals.html">File Members</a> </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<stdio.h></font> <font class="comment">// needed for printf</font>00044 <font class="preprocessor">#include<strings.h></font> <font class="comment">// needed for strcpy</font>00045 <font class="preprocessor">#include<errno.h></font> <font class="comment">// needed for ETIMEDOUT</font>00046 <font class="preprocessor">#include<pthread.h></font> <font class="comment">// needed for pthread_mutex_init</font>00047 <font class="preprocessor">#include<string.h></font> <font class="comment">// needed for strcpy</font>00048 <font class="preprocessor">#include<math.h></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 < <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 < <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 < <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 < <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 < <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>-><a class="code" href="classServerSettings.html#a18">getStaminaMax</a>(),1.0,1.0) );00088 00089 <font class="keywordflow">for</font>( i = 0 ; i < <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( &<a class="code" href="classWorldModel.html#o29">mutex_newInfo</a>, NULL );00103 pthread_cond_init ( &<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 = &<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 = &<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 = &<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 = &<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 = &<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 = &<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 + -
显示快捷键?