2017-04-11 89 views
0

所以我一直在圍繞一個問題纏繞我的頭。 我目前正在用Java編寫一個基於棋盤的國際象棋引擎(它一直在計算一切)。到目前爲止,所有的棋子/王/騎士移動都按預期工作,沒有錯誤。國際象棋引擎中的滑塊生成

我需要幫助理解的是滑塊移動的一代。我已經爲每個方塊/塊生成了一系列空板移動。根據我目前的理解,我還需要開發一個包含每個平方的每個可能佔用的數組 - 然後以某種方式根據各種方法查找該數組。

這種想法正確嗎?是從0到2^63中選取每個數字,然後用該方塊的移動位圖板進行異化,然後用某種方法(魔術/旋轉的位圖板)來存儲該數組,以初始化數組並以相同的方式訪問它運行?

僞代碼和解釋非常感謝。 (順便說一句,我正在使用>>>)。

回答

3

有許多方法可以產生滑動塊移動的位置,具有不同的性能和複雜性。其中很多都列出了here

也許最快和最常見的是magic bitboards,它使用位板與「魔術」預先計算的值相乘來一次生成在所有四個方向上可能的移動。缺點是它使用非常大的查找表。這可能不應該是你的第一個實現,因爲它更復雜。

Obstruction differencehyperbola quintessence沒有比魔術貼片慢很多,但更容易實現。

即使更簡單也更慢是dumb7fill這是一個循環在每個可能的方向,而不需要任何查找表。

+0

謝謝您,但即使使用魔術貼紙,您也可以使用幻數來準確參考查找表。我的問題更多的是如何生成查找表。除非我不明白。 – thePanthurr

+0

@thePanthurr您的問題使您看起來像您認爲相同的查找表將用於任何滑動塊的方法。但他們都需要不同的查找表。其中一些(例如魔術棋盤)使用多個查找表。你應該決定你想使用哪種方法,閱讀它,然後具體詢問你不瞭解的內容。 – interjay

+0

@thePanthurr你不需要自己生成表格。 – SmallChess