Esempio n. 1
0
    // Min part of Minimax with AB pruning
    private int MiniABPruning(PositionManager board, int depth, int a, int b)
    {
        if (depth <= 0)
        {
            return(board.GetValueOfBoard());
        }

        int min = int.MaxValue;
        List <(int, int)> allPM = MoveManager.GetAllPossibleMoves(board, false, false);

        if (allPM.Count == 0)
        {
            return(board.GetValueOfBoard());
        }

        foreach ((int, int)iMove in allPM)
        {
            PositionManager childBoard = new PositionManager(board);
            childBoard.MovePiece(iMove.Item1, iMove.Item2);
            min = Math.Min(min, MaxABPruning(childBoard, depth - 1, a, b));
            b   = Math.Min(b, min);
            if (b <= a)
            {
                break;
            }
        }

        return(min);
    }