2010-05-27 26 views
6

作爲家庭作業的一部分,我必須用Java編程一個簡單的象棋遊戲。我想借此機會嘗試遞歸,我想知道遞歸代碼中是否有明顯的國際象棋候選人?在國際象棋程序設計中很好地使用遞歸?

+1

任何事情與樹木。 – 2010-05-27 12:20:29

+0

我的第一個Java程序之一(1998年)是一個象棋遊戲程序,使用拉普拉斯在下面提到的遞歸極小極大算法。這絕對是一個有趣的學習Java和遞歸的項目。 – Jesper 2010-05-27 12:53:53

+0

www.m-w.com表示遞歸性不是一個有效的英語單詞。編輯標題。 – 2010-05-28 04:05:48

回答

7

最明顯的候選人,我將是尋找最好的移動遞歸極小程序。這也涉及到搜索算法背後的許多理論,並且實現起來會很酷。

例子:

http://www.devshed.com/c/a/Practices/Solving-Problems-with-Recursion/6/

+0

我甚至認爲,除了遞歸minmax(如果想要開發一個KI),別無選擇。 – 2010-05-27 12:39:49

+0

此鏈接解釋alpha-beta也很有用http://www.fierz.ch/strategy1.htm – 2010-05-27 12:41:41

+0

哇,這是一篇很棒的文章。看來這是一種在不同階段使用不同的方法。也許會有一個版本的隊友,一個版本的其他目標(例如,捕捉一塊),每個都有不同的深度。嗯...好玩。 – JDelage 2010-05-27 13:38:52

1

深度優先搜索是遞歸的主要候選人。所以如果你爲編寫家庭作業編寫一個AI,那麼AI的lookhead算法試圖找出最佳的下一步行動將是一個不錯的選擇。

但要小心 - 您可能會快速耗盡內存。你可能想限制AI可以看到的移動數量。

3

是的。如果你有一些評估玩家白色的某些位置的「強制」功能。您可以移動一塊並遞歸調用以評估移動的價值並選擇最佳移動。

你應該爲玩家黑色調用相同的功能,交換黑人和白人的角色,從而評估對手移動的「危險」。

然後再爲白人,等等

要知道,你不應該去太深的遞歸水平,否則將永遠需要。

+0

謝謝。我只需要爲每個動作的價值找到一個好的邏輯。 – JDelage 2010-05-27 14:08:24

1

心靈dynamic programming,你有這導致同一板上的多個組合,你應該記住緩存的移動,以避免重複計算

如果發現遞歸只是引導你,你有一個地方一直在打破那個電話。這就是所謂的backtracking