Пример #1
0
        /// <summary>
        /// 次の枝を読みます。
        /// </summary>
        private static void WAAAA_Read_NextBranch(
            MoveGenGenjo yomiGenjo,
            Node <ShootingStarlightable, KyokumenWrapper> hubNode_genTeban,
            SsssLogGenjo log
            )
        {
            // (3)次のノードをシャッフルします。
            List <Node <ShootingStarlightable, KyokumenWrapper> > nextNodes_shuffled = Converter04.NextNodes_ToList(hubNode_genTeban);

            LarabeShuffle <Node <ShootingStarlightable, KyokumenWrapper> > .Shuffle_FisherYates(ref nextNodes_shuffled);

            // (4)次の局面
            int wideCount = 0;

            foreach (KifuNode nextNode in nextNodes_shuffled)
            {
                // (5)読みの深さ2手目以降なら、横幅制限
                if (1 < yomiGenjo.YomuDeep)
                {
                    if (yomiGenjo.Args.YomuLimitter[yomiGenjo.YomuDeep] <= wideCount)
                    {
                        break;// もう次の手の横には読まない。
                    }
                }


                // 《8》カウンターを次局面へ(2手目の読み)

                // 《9》まだ深く読むなら
                if (yomiGenjo.YomuDeep + 1 < yomiGenjo.Args.YomuLimitter.Length)
                {
                    yomiGenjo.YomuDeep++;
                    yomiGenjo.Tesumi_yomiCur++;
                    yomiGenjo.Pside_teban = yomiGenjo.Pside_teban == Playerside.P1 ? Playerside.P2 : Playerside.P1; //先後を反転します。
                    MoveGenRoutine.WAAA_Yomu_Loop(nextNode, yomiGenjo, log);
                    yomiGenjo.YomuDeep--;                                                                           //元に戻します。
                    yomiGenjo.Tesumi_yomiCur--;                                                                     //元に戻します。
                    yomiGenjo.Pside_teban = yomiGenjo.Pside_teban == Playerside.P1 ? Playerside.P2 : Playerside.P1; //元に戻します。
                }
                else
                {
                    // もう深くよまないなら
                }

                wideCount++;
            }


            if (yomiGenjo.Args.YomuLimitter.Length <= yomiGenjo.YomuDeep + 1)//もう深く読まないなら
            {
                //
                // ログの書き出し
                //
                Util_GraphicalLog.Log(
                    true,//enableLog,
                    "指し手生成ログA",
                    "[" + Util_GraphicalLog.BoardFileLog_ToJsonStr(yomiGenjo.Args.LogF_moveKiki) + "]"
                    );

                // 書き出した分はクリアーします。
                yomiGenjo.Args.LogF_moveKiki.boards.Clear();
            }
        }