📄 group__board.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>Othello Solver: Board module</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.5 --><div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="annotated.html">Data Structures</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Data Fields</a> | <a class="qindex" href="globals.html">Globals</a></div><h1>Board module</h1><table border=0 cellpadding=0 cellspacing=0><tr><td></td></tr><tr><td colspan=2><br><h2>Functions</h2></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="group__board.html#ga0">board_set</a> (<a class="el" href="structBoard.html">Board</a> *board, const char *string)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Set a board from a string description. <a href="#ga0"></a><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>int </td><td class="memItemRight" valign=bottom><a class="el" href="group__board.html#ga1">board_check_move</a> (const <a class="el" href="structBoard.html">Board</a> *board, int x, int player)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Check move validity. <a href="#ga1"></a><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>int </td><td class="memItemRight" valign=bottom><a class="el" href="group__board.html#ga2">board_count_flips</a> (const <a class="el" href="structBoard.html">Board</a> *board, int x, int player)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Count flippable discs. <a href="#ga2"></a><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>int </td><td class="memItemRight" valign=bottom><a class="el" href="group__board.html#ga3">board_do_flip</a> (<a class="el" href="structBoard.html">Board</a> *board, int x, <a class="el" href="structMove.html">Move</a> *move)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Flip discs on the board. <a href="#ga3"></a><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>int </td><td class="memItemRight" valign=bottom><a class="el" href="group__board.html#ga4">board_get_move</a> (const <a class="el" href="structBoard.html">Board</a> *board, int x, <a class="el" href="structMove.html">Move</a> *move)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Compute a move. <a href="#ga4"></a><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="group__board.html#ga5">board_update_move</a> (<a class="el" href="structBoard.html">Board</a> *board, const <a class="el" href="structMove.html">Move</a> *move)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Update a board. <a href="#ga5"></a><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="group__board.html#ga6">board_restore_move</a> (<a class="el" href="structBoard.html">Board</a> *board, const <a class="el" href="structMove.html">Move</a> *move)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Restore a board. <a href="#ga6"></a><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="group__board.html#ga7">board_update_pass</a> (<a class="el" href="structBoard.html">Board</a> *board)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Passing move. <a href="#ga7"></a><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="group__board.html#ga8">board_restore_pass</a> (<a class="el" href="structBoard.html">Board</a> *board)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Un-passing. <a href="#ga8"></a><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="group__board.html#ga9">board_get_movelist</a> (const <a class="el" href="structBoard.html">Board</a> *board, <a class="el" href="structMoveList.html">MoveList</a> *start)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Get a list of legal moves. <a href="#ga9"></a><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>int </td><td class="memItemRight" valign=bottom><a class="el" href="group__board.html#ga10">board_get_mobility</a> (const <a class="el" href="structBoard.html">Board</a> *board, int player)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Estimate the mobility. <a href="#ga10"></a><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>int </td><td class="memItemRight" valign=bottom><a class="el" href="group__board.html#ga11">board_get_corner_stability</a> (<a class="el" href="structBoard.html">Board</a> *board, int player)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Estimate corner stability. <a href="#ga11"></a><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="group__board.html#ga12">board_print</a> (<a class="el" href="structBoard.html">Board</a> *board, FILE *f)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize the local parity counters. Print out the board. <a href="#ga12"></a><br><br></td></tr></table><hr><a name="_details"></a><h2>Detailed Description</h2>This module deals with the <a class="el" href="structBoard.html">Board</a> management.<p>The <a class="el" href="structBoard.html">Board</a> is represented with a structure containing the following data:<ul><li>a 1-D array with the square contents.</li><li>the player to move.</li><li>the disc number for each players.</li><li>the number of remaining empty squares.</li><li>a list of empty squares for a fast navigation through them.</li><li>hash table codes identifying the board in the hash table.</li><li>a node counter.</li></ul><p>High level functions are provided to set/modify the board data or to compute some board properties. Most of the functions are optimized to be as fast as possible, while remaining readable. <hr><h2>Function Documentation</h2><a class="anchor" name="ga1" doxytag="solver.c::board_check_move" ></a><p><table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> <tr> <td class="mdRow"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top"> int board_check_move </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top">const <a class="el" href="structBoard.html">Board</a> * </td> <td class="mdname" nowrap> <em>board</em>, </td> </tr> <tr> <td></td> <td></td> <td class="md" nowrap>int </td> <td class="mdname" nowrap> <em>x</em>, </td> </tr> <tr> <td></td> <td></td> <td class="md" nowrap>int </td> <td class="mdname" nowrap> <em>player</em></td> </tr> <tr> <td></td> <td class="md">) </td> <td class="md" colspan="2"></td> </tr> </table> </td> </tr></table><table cellspacing=5 cellpadding=0 border=0> <tr> <td> </td> <td><p>Check move validity. <p>Check if a legal move exists on square 'x' for 'player' <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign=top><em>board</em> </td><td>board to test </td></tr> <tr><td valign=top><em>x</em> </td><td>square on which to move. </td></tr> <tr><td valign=top><em>player</em> </td><td>player to move. </td></tr> </table></dl><dl compact><dt><b>Returns:</b></dt><dd>1 if a legal move exists, 0 otherwise. </dd></dl><p><div class="fragment"><pre>00932 {00933 <span class="keyword">const</span> <span class="keywordtype">char</span> p = player;00934 <span class="keyword">const</span> <span class="keywordtype">char</span> o = <a class="code" href="group__mac.html#ga50">OPPONENT</a>(p);00935 <span class="keyword">const</span> <span class="keywordtype">char</span> *square = board-><a class="code" href="structBoard.html#o0">square</a> + x;00936 00937 <span class="keywordflow">switch</span> (<a class="code" href="group__mac.html#ga0">FLIPPING_DIRECTION_ID</a>[x]) {00938 <span class="keywordflow">case</span> 1:00939 <span class="keywordflow">return</span> (<a class="code" href="group__mac.html#ga30">BOARD_CHECK_MOVE_6</a>(SE) ||00940 <a class="code" href="group__mac.html#ga30">BOARD_CHECK_MOVE_6</a>(S ) ||00941 <a class="code" href="group__mac.html#ga30">BOARD_CHECK_MOVE_6</a>( E));00942 <span class="keywordflow">case</span> 3:00943 <span class="keywordflow">return</span> (<a class="code" href="group__mac.html#ga30">BOARD_CHECK_MOVE_6</a>(SW) ||00944 <a class="code" href="group__mac.html#ga30">BOARD_CHECK_MOVE_6</a>( W) ||00945 <a class="code" href="group__mac.html#ga30">BOARD_CHECK_MOVE_6</a>(S ));00946 <span class="keywordflow">case</span> 7:00947 <span class="keywordflow">return</span> (<a class="code" href="group__mac.html#ga30">BOARD_CHECK_MOVE_6</a>(NE) ||00948 <a class="code" href="group__mac.html#ga30">BOARD_CHECK_MOVE_6</a>(N ) ||00949 <a class="code" href="group__mac.html#ga30">BOARD_CHECK_MOVE_6</a>( E));00950 <span class="keywordflow">case</span> 9:00951 <span class="keywordflow">return</span> (<a class="code" href="group__mac.html#ga30">BOARD_CHECK_MOVE_6</a>(NW) ||00952 <a class="code" href="group__mac.html#ga30">BOARD_CHECK_MOVE_6</a>(N ) ||00953 <a class="code" href="group__mac.html#ga30">BOARD_CHECK_MOVE_6</a>( W));00954 <span class="keywordflow">case</span> 2:00955 <span class="keywordflow">return</span> (<a class="code" href="group__mac.html#ga30">BOARD_CHECK_MOVE_6</a>(S ) ||00956 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>(SE) ||00957 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>(SW) ||00958 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>( E) ||00959 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>( W));00960 <span class="keywordflow">case</span> 4:00961 <span class="keywordflow">return</span> (<a class="code" href="group__mac.html#ga30">BOARD_CHECK_MOVE_6</a>( E) ||00962 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>(NE) ||00963 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>(SE) ||00964 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>(N ) ||00965 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>(S ));00966 <span class="keywordflow">case</span> 6:00967 <span class="keywordflow">return</span> (<a class="code" href="group__mac.html#ga30">BOARD_CHECK_MOVE_6</a>( W) ||00968 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>(NW) ||00969 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>(SW) ||00970 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>(S ) ||00971 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>(N ));00972 <span class="keywordflow">case</span> 8:00973 <span class="keywordflow">return</span> (<a class="code" href="group__mac.html#ga30">BOARD_CHECK_MOVE_6</a>(N ) ||00974 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>(NE) ||00975 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>(NW) ||00976 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>( E) ||00977 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>( W));00978 <span class="keywordflow">case</span> 5:00979 <span class="keywordflow">return</span> (<a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>(N ) ||00980 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>( E) ||00981 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>(S ) ||00982 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>( W) ||00983 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>(NE) ||00984 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>(SE) ||00985 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>(NW) ||00986 <a class="code" href="group__mac.html#ga31">BOARD_CHECK_MOVE_4</a>(SW));00987 }00988 <span class="keywordflow">return</span> 0;00989 }</pre></div> </td> </tr></table><a class="anchor" name="ga2" doxytag="solver.c::board_count_flips" ></a><p><table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> <tr> <td class="mdRow"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top"> int board_count_flips </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top">const <a class="el" href="structBoard.html">Board</a> * </td> <td class="mdname" nowrap> <em>board</em>, </td> </tr> <tr> <td></td> <td></td> <td class="md" nowrap>int </td> <td class="mdname" nowrap> <em>x</em>, </td> </tr> <tr> <td></td> <td></td> <td class="md" nowrap>int </td> <td class="mdname" nowrap> <em>player</em></td> </tr> <tr> <td></td> <td class="md">) </td> <td class="md" colspan="2"></td> </tr> </table> </td> </tr></table><table cellspacing=5 cellpadding=0 border=0> <tr> <td>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -