6

作为家庭作业的一部分,我必须用 Java 编写一个简单的国际象棋游戏。我正在考虑借此机会尝试递归,我想知道国际象棋中是否有明显的递归代码候选者?

4

6 回答 6

7

对我来说,最明显的候选者是用于搜索最佳移动的递归极小极大例程。这也涉及到搜索算法背后的许多理论,并且实现起来非常酷。

例子:

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

于 2010-05-27T12:22:07.603 回答
3

就在这里。如果您有一些功能可以评估某个位置的“力量”,例如玩家白色。您可以移动一块并递归调用它以评估移动的价值并选择最佳移动。

您应该为黑人玩家调用相同的函数,为黑人和白人交换角色,从而评估对手移动的“危险”。

然后又是白人等。

请注意,您不应该在递归级别上走得太深,否则将永远持续下去。

于 2010-05-27T12:24:21.903 回答
1

深度优先搜索是递归的主要候选者。因此,如果您正在为家庭作业编写 AI 程序,那么 AI 的前瞻算法试图找出最佳下一步动作将是一个不错的选择。

不过要小心 - 你可能会很快耗尽内存。您可能希望限制 AI 可以查看的深度移动次数。

于 2010-05-27T12:23:44.550 回答
1

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

于 2010-05-27T12:24:39.283 回答
0

不是国际象棋,而是一个经典的国际象棋谜题:http ://en.wikipedia.org/wiki/Eight_queens_puzzle

于 2010-05-27T12:20:29.020 回答
0

你正在考虑回溯

于 2010-05-27T12:23:30.027 回答