坚持minimax算法
我正在尝试我的第一个国际象棋引擎。 任何熟悉这个主题的人都会对minimax算法有所了解。 我需要为每件作品在棋盘上生成各种可能棋步的组合。 我查了一些例子,但不能让我的工作。 我不知道我做错了什么。 我只是专注于每一个可能的动作的产生,到一定的深度,以获得叶节点。
我面临的问题是,我目前的实施方法是对黑人采取一步行动,然后对白人进行连续动作,而不应该让黑人再次移动,而这应该是倒退和第四次。 我使用直接递归来循环可用的移动。 我希望函数每次都从顶端开始,但直接递归并不按照我认为的方式工作。 循环不断迭代,而不从函数顶部开始,我不知道为什么。 这意味着getAvailableMoves(maximizer)每次都不会被调用(我认为)。
如果有人可以指出我在做什么错误,将不胜感激。
public int miniMax(int depth, boolean maximizer)
{
if(depth == 0) { return 1234; }
int countMoves = 0;
Map<ChessPiece, Position> availableMoves = getAvailableMoves(maximizer);
int bestMove = 0;
for(Map.Entry<ChessPiece, Position> entry : availableMoves.entrySet())
{
ChessPiece piece = entry.getKey();
Position pos = entry.getValue();
piece.move(board, pos.getX(), pos.getY());
maximizer = !maximizer;
miniMax(depth-1, maximizer);
}
return 1234;
}
链接地址: http://www.djcxy.com/p/84631.html