⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 数据结构——旋转的位棋盘.htm

📁 象棋程序设计全资料集(介绍编写象棋程序的方法思路)
💻 HTM
📖 第 1 页 / 共 4 页
字号:
  <DD>} 
  <DT>  
  <DT>  索引 <FONT face="Times New Roman">diag_A8H1_attacks[64][256] </FONT>数组。 
  <DT>  不说你也应该知道,第一个索引号是象所在格的编号。第二个索引号是它所在<FONT 
  face="Times New Roman">A8-&gt;H1</FONT>方向斜线上的棋子分布情况。没错,接下去又要旋转位棋盘,位移,最后用“逻辑与”分离出我们需要的东东。为了对齐 
  <FONT face="Times New Roman">A8-&gt;H1 </FONT>斜线上的格子,我们要把棋盘左转<FONT 
  face="Times New Roman">45</FONT>度。<FONT 
  face="Times New Roman">(</FONT>现在我建议你去拿罐可乐,外加一些提神的药物……<FONT 
  face="Times New Roman">)</FONT> 
  <DD>  
  <DD>int r45L_map[64] = { 
  <DD> 28, 21, 15, 10, 6, 3, 1, 0, 
  <DD> 36, 29, 22, 16, 11, 7, 4, 2, 
  <DD> 43, 37, 30, 23, 17, 12, 8, 5, 
  <DD> 49, 44, 38, 31, 24, 18, 13, 9, 
  <DD> 54, 50, 45, 39, 32, 25, 19, 14, 
  <DD> 58, 55, 51, 46, 40, 33, 26, 20, 
  <DD> 61, 59, 56, 52, 47, 41, 34, 27, 
  <DD> 63, 62, 60, 57, 53, 48, 42, 35 
  <DD>}; 
  <DT>  
  <DT>  注意每个格子的映射次序,是从右上往左下的。这样映射后的位棋盘就会沿着<FONT 
  face="Times New Roman">A8-H1</FONT>斜线对齐了<FONT 
  face="Times New Roman">(</FONT>所有的斜线都是沿着这个方向走的<FONT 
  face="Times New Roman">)</FONT>。 
  <DT>  
  <DD>BitBoard Rotated45L = 0; 
  <DD>for (棋盘上的每一格)(0-63) { 
  <DD> if square is not empty 
  <DD> otated45L |= mask[r45L_map[square]]; 
  <DD>} 
  <DT>  
  <DT>  现在“右移”这个棋盘,但是移动几位呢? </DT></DL>
<TABLE width="100%" border=0>
  <TBODY>
  <TR>
    <TD>
      <P align=center>需要右移的位数</P></TD></TR>
  <TR>
    <TD align=middle>
      <TABLE border=1>
        <TBODY>
        <TR>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>28</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>21</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>15</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>10</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>6</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>3</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>1</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>0</STRONG></FONT></TD></TR>
        <TR>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>36</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>28</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>21</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>15</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>10</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>6</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>3</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>1</STRONG></FONT></TD></TR>
        <TR>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>43</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>36</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>28</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>21</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>15</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>10</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>6</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>3</STRONG></FONT></TD></TR>
        <TR>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>49</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>43</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>36</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>28</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>21</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>15</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>10</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>6</STRONG></FONT></TD></TR>
        <TR>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>54</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>49</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>43</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>36</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>28</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>21</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>15</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>10</STRONG></FONT></TD></TR>
        <TR>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>58</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>54</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>49</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>43</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>36</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>28</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>21</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>15</STRONG></FONT></TD></TR>
        <TR>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>61</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>58</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>54</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>49</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>43</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>36</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>28</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>21</STRONG></FONT></TD></TR>
        <TR>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>63</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>61</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>58</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>54</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>49</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>43</STRONG></FONT></TD>
          <TD align=middle bgColor=#000000><FONT face="Times New Roman" 
            color=#ffffff><STRONG>36</STRONG></FONT></TD>
          <TD align=middle bgColor=#ffffff><FONT 
            face="Times New Roman"><STRONG>28</STRONG></FONT></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<DL>
  <DT>  位移完成后,最后一步就是用“屏蔽模版”将需要的数据分离出来。“屏蔽模版”根据斜线的长度不同而变化。 
  <DT>  
  <DD>Mask_Length = (2 ^ diag_length) - 1; 
  <DT>  
  <DT>  按照这个公式,当斜线的长度为<FONT face="Times New Roman">7</FONT>时,屏蔽模版等于<FONT 
  face="Times New Roman">127(</FONT>二进制:<FONT 
  face="Times New Roman">1111111b</FONT>)。如果斜线的长度为<FONT 
  face="Times New Roman">1</FONT>时屏蔽模版也为<FONT 
  face="Times New Roman">1</FONT>。在程序中你可以用这个公式,但是使用查询表会更快一些。 
  <DT>  
  <DT>  索引 <FONT face="Times New Roman">diag_H8A1_attacks[64][256] </FONT>数组。 
  <DT>  为了对齐<FONT face="Times New Roman">H8-&gt;A1</FONT>方向的斜线,我们要把棋盘向右旋转<FONT 
  face="Times New Roman">45</FONT>度。(再来一杯可乐?) 
  <DT>  
  <DD>int r45R_map[64] = { 
  <DD> 0, 1, 3, 6, 10, 15, 21, 28, 
  <DD> 2, 4, 7, 11, 16, 22, 29, 36, 
  <DD> 5, 8, 12, 17, 23, 30, 37, 43, 
  <DD> 9, 13, 18, 24, 31, 38, 44, 49, 
  <DD> 14, 19, 25, 32, 39, 45, 50, 54, 
  <DD> 20, 26, 33, 40, 46, 51, 55, 58, 
  <DD> 27, 34, 41, 47, 52, 56, 59, 61, 
  <DD> 35, 42, 48, 53, 57, 60, 62, 63 
  <DD>}; 
  <DD>BitBoard Rotated45R = 0; 
  <DD>for (棋盘上的每一格)(0-63) { 
  <DD> if square is not empty 
  <DD>  Rotated45R |= mask[r45R_map[square]]; 

⌨️ 快捷键说明

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