坚持使用minimax算法

时间:2017-06-27 06:15:38

标签: algorithm chess minimax

我正在尝试我的第一个国际象棋引擎。任何熟悉该主题的人都会对minimax算法有所了解。我需要为每件作品生成每个可能的棋盘移动组合。我查了很多例子,但不能让我的工作。我不知道自己做错了什么。我只专注于生成每个可能的移动,到一定的深度,以获得叶节点。

我面临的问题是,我目前的实施方案是为黑色进行一次移动,然后连续移动白色而不让黑色再次移动时应该交替返回第四个。我使用Direct递归来循环可用的移动。我希望函数每次都从顶部开始,但直接递归并不像我想象的那样工作。循环不断重复,而不是从函数的顶部开始,我不知道为什么。这意味着每次都应该调用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;
}

0 个答案:

没有答案