2010-02-24 58 views
1

我想寫AI國際象棋,我有一個問題。 我準備好了棋子移動規則,並且我正在嘗試移除無效的棋子(讓棋子等着)。 我寫的東西是這樣的:AI國際象棋有效舉動

ValidateMove(board); 
{ 
for(i=0;i<64;i++) 
if(board[i]==king.opposite) kingpos=board[i]; 

createmoves(board); 

if (moves.contains(kingpos)) return false; 
} 

不過,我使用的是極大極小+α,β和驗證正在我的搜索很慢。

回答

5

而不是檢查'檢查'每一個動作,只是設置失去你的國王給予無窮分數並結束遊戲,那麼算法將永遠不會選擇一個移動,讓國王失去,除非沒有選擇。

只要注意stalemate這將需要特殊處理,因爲根據上述算法會導致損失,但根據標準的國際象棋規則,它被稱爲平局。

+0

這並不在博弈樹的葉節點的工作。 OTOH離開葉子越遠,影響就越小。 – phkahler 2010-02-24 22:08:16

+1

如果你的國王在樹上很早就被捕獲了,那麼你就不那麼好了......那麼你最終可能會搜索大量無效位置 – tbischel 2010-07-19 23:33:49