作为家庭作业的一部分,我必须用 Java 编写一个简单的国际象棋游戏。我正在考虑借此机会尝试递归,我想知道国际象棋中是否有明显的递归代码候选者?
6 回答
对我来说,最明显的候选者是用于搜索最佳移动的递归极小极大例程。这也涉及到搜索算法背后的许多理论,并且实现起来非常酷。
例子:
http://www.devshed.com/c/a/Practices/Solving-Problems-with-Recursion/6/
就在这里。如果您有一些功能可以评估某个位置的“力量”,例如玩家白色。您可以移动一块并递归调用它以评估移动的价值并选择最佳移动。
您应该为黑人玩家调用相同的函数,为黑人和白人交换角色,从而评估对手移动的“危险”。
然后又是白人等。
请注意,您不应该在递归级别上走得太深,否则将永远持续下去。
深度优先搜索是递归的主要候选者。因此,如果您正在为家庭作业编写 AI 程序,那么 AI 的前瞻算法试图找出最佳下一步动作将是一个不错的选择。
不过要小心 - 你可能会很快耗尽内存。您可能希望限制 AI 可以查看的深度移动次数。
Mind dynamic programming, as you have multiple combinations which lead to the same board, you should remember to cache the moves in order to avoid repeating calculations
If you detect a recursion just lead you to a place where you have been, just break that call. This is known as backtracking
不是国际象棋,而是一个经典的国际象棋谜题:http ://en.wikipedia.org/wiki/Eight_queens_puzzle
你正在考虑回溯