坚持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

上一篇: stuck on minimax algorithm

下一篇: How to print a chess piece(unicode) in c#?