コード例 #1
0
//	float countTime;

    /*
     * public void Update () {
     *      countTime += Time.deltaTime;
     *      Debug.Log ("(●・▽・●)");
     * }
     */

    private int NegaMax(ref Te t, Kyokumenn k, int alpha, int beta, int depth, int depthMax)
    {
        int value = new int();

        //深さが最大に達していたら評価値を返して終了
        if (depth >= depthMax)
        {
            leaf++;
            value = k.evaluate();

            //先手ならプラス、後手でマイナスの値を返す
            if (k.turn % 2 == 1)
            {
                return(value);
            }
            else
            {
                return(-value);
            }
        }

        node++;

        //現在の局面での合法手を生成
        var teList = new List <Te>();

        teList = k.GenerateLegalMoves();

        value = -100000000;

        for (int i = 0; i < teList.Count; i++)
        {
            Te te = teList [i];

            //その手で一手進めた局面を作る
            //		KyokumennArray nextKyokumenn = k.DeepCopyKyokumenn ();
            k.Move(te.DeepCopy());
            k.turn += 1;

            Te tempTe = new Te();

            int eval = -NegaMax(ref tempTe, k, -beta, -alpha, depth + 1, depthMax);
            k.Back(te.DeepCopy());
            k.turn -= 1;

            //大きかったら
            if (eval > value)
            {
                value = eval;

                //αの値も更新
                if (eval > alpha)
                {
                    alpha = eval;
                }
                //最善手を更新
                best [depth, depth] = te;
                t.koma    = te.koma;
                t.from    = te.from;
                t.to      = te.to;
                t.promote = te.promote;
                t.capture = k.banKoma [te.to];

                for (int j = depth + 1; j < depthMax; j++)
                {
                    best [depth, j] = best [depth + 1, j];
                }
                //βカットの条件を満たしていたらループ終了
                if (eval >= beta)
                {
                    break;
                }
            }
        }
        return(value);
    }