好的我已經閱讀了很多網絡上的東西,其中大部分使用沒有unsigned int的Java。我正在研究具有unsigned int的Objective-C。建立一個使用魔術棋盤的國際象棋...我怎麼知道運動是否有效
讓我們考慮以下情況。
板是這樣的:
A1
是在左下角和是最顯著位和H8
是在右上角,是最顯著位。
我已經構建了棋盤上所有位置的所有棋子的位移掩碼。
假設下面的簡單情況:
- 遊戲將開始。所有作品都在他們的初始位置。
- 用戶嘗試將
G1
上的騎士移動到E2
。
顯然這個動作是不可能的,因爲在E2
上有一個棋子。
如何發現運動是否有效?
好吧我所有作品的位掩碼是這樣的:
1111111111111111000000000000000000000000000000001111111111111111
和我對騎士的可能運動在G1
位掩碼是
00000000
00000000
00000000
00000000
00000000
00000X0X
0000X000
00000000
或位
0000000000001000000001010000000000000000000000000000000000000000
如果我AND
這兩個
1111111111111111000000000000000000000000000000001111111111111111
0000000000001000000001010000000000000000000000000000000000000000
我得到
0000000000001000000000000000000000000000000000000000000000000000
我所知道的是,有一塊在這一點,但我沒有看到這是如何告訴我如果這是一個有效的舉動或沒有。
另一個問題是:假設這個舉動會讓我的國王受到攻擊。很顯然,這一舉措在技術上是可行的,但在騎士的移動規則下是不可能的,因爲我不能採取讓我的國王受到攻擊的舉動。
如何獲取這些信息?謝謝
你只會得到僞有效的移動,這意味着它可能在那裏移動。無論結果的位置是否有效,都必須單獨檢查。要麼通過驗證所得位置的國王狀態,要麼通過等待對手奪取你的國王並將減號CheckMate分配給那個。 –
注意:[同樣的問題](http://chess.stackexchange.com/questions/15043/building-a-chess-using-magic-bitboard-how-do-i-know-if-the-movement-is -valid)在chess.se上。 – Myridium