?? 數據結構——旋轉的位棋盤.htm
字號:
<DD>}
<DT>
<DT> 索引 <FONT face="Times New Roman">diag_A8H1_attacks[64][256] </FONT>數組。
<DT> 不說你也應該知道,第一個索引號是象所在格的編號。第二個索引號是它所在<FONT
face="Times New Roman">A8->H1</FONT>方向斜線上的棋子分布情況。沒錯,接下去又要旋轉位棋盤,位移,最后用“邏輯與”分離出我們需要的東東。為了對齊
<FONT face="Times New Roman">A8->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->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 + -