Ejemplo n.º 1
0
    //NegaAlpha法
    private float NegaAlpha(Stone.ColorType color, int depth,
                            float alpha, float beta)
    {
        if (depth == 0)
        {
            return(Evaluator.Evaluate(board, color));
        }

        var movable = board.GetMovableBitBoard(color);

        if (LogicBoard.CountBit(movable) == 0)
        {
            board.Log();

            var eval = -NegaAlpha(Stone.GetReverseColor(color), depth - 1,
                                  -beta, -alpha);

            board.Undo();

            return(eval);
        }

        while (movable != 0)
        {
            ulong next = GetLeastSignificantBit(movable);

            board.Log();
            board.Reverse(next, color);

            var eval = -NegaAlpha(Stone.GetReverseColor(color), depth - 1,
                                  -beta, -alpha);

            board.Undo();

            if (beta <= eval)
            {
                return(eval);
            }

            alpha = Mathf.Max(eval, alpha);

            movable ^= next;
        }

        return(alpha);
    }
Ejemplo n.º 2
0
    //合法手の数を取得
    private static int CountMovableCells(Stone.ColorType color)
    {
        var movable = board.GetMovableBitBoard(color);

        return(LogicBoard.CountBit(movable));
    }