2016-05-30 34 views
2

如果我錯了,請糾正我。搜索算法,即修改後的alpha beta,探索合法移動的列表。首先,一個需要初始化 位棋盤陣列是這樣的:如何將一系列位板轉換爲列表?

無符號長長knight_attacks [64] = {0x020800,0x050800等等...}

每個元件將具有1對所有可能的攻擊來自那個正方形的正方形,例如knight_attacks [f4]將在d5,e6,g6,h5,d3,e2,g2和h3上有1,對應於f4可能的攻擊方塊。

一旦這個已經初始化一個需要以某種方式轉換成一個列表...

你如何隱蔽位棋盤的數組列表? 感謝兄弟姐妹們的幫助。

+0

有沒有規則說你並不需要,如果你使用它們舒服位棋盤使用。 – Daniel

回答

1

請糾正我,如果我錯了;我只是一個初學者。

騎士的動作分爲兩類:捕捉和非捕捉。

對於非捕獲和捕獲移動,您將需要使用按位或,但顯然使用不同的位板。

knightCaptures = knightAttack bitboard | emptySquare;

同樣;

knightMoves = knightAttack bitboard | enemyBitboard;

將這些位板中的每一個轉換爲您需要執行以下操作的移動列表:掃描位板的每一位。你怎麼做到這一點?通過找到最不重要的位並刪除它。然後你找到下一個最低位的sig位並將其刪除......等等。

以下是上一代移動和bitscan一些文章: https://chessprogramming.wikispaces.com/BitScan

http://peterellisjones.com/post/39938456375/chess-engine-part-i-choosing-internal-data

http://peterellisjones.com/post/41238723473/chess-engine-part-ii-move-encoding-and-move

https://www.cis.uab.edu/hyatt/boardrep.html

https://www.cis.uab.edu/hyatt/bitmaps.html

這是所有理論behin d象棋引擎:

http://www.frayn.net/beowulf/theory.html