Esempio n. 1
0
        /// <summary>
        /// 用途例:持ち駒を確認するために使います。
        /// </summary>
        /// <param name="hkomas_gen_MOTI"></param>
        /// <returns></returns>
        public static string JsonElements_KomaHandles(bool enableLog, SkyConst src_Sky, List <int> hKomas, string comment)
        {
            StringBuilder sb = new StringBuilder();

            if (!enableLog)
            {
                goto gt_EndMethod;
            }

            //sb.AppendLine("            [");
            sb.AppendLine("                { act:\"colorMasu\", style:\"rgba(100,240,100,0.5)\" },");


            foreach (int hKoma in hKomas)
            {
                RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(hKoma).Now);


                string komaImg = Util_GraphicalLog.Finger_ToString(src_Sky, hKoma, "");
                sb.AppendLine("                { act:\"drawImg\", img:\"" + komaImg + "\", masu: " + Util_Masu.AsMasuNumber(koma.Masu) + " },");//FIXME:おかしい?
            }



            sb.AppendLine("                { act:\"drawText\", text:\"" + comment + "\"  , x:0, y:20 },");

            //sb.AppendLine("            ],");

gt_EndMethod:
            return(sb.ToString());
        }
Esempio n. 2
0
        public void Log3(
            SkyConst src_Sky,
            Playerside tebanKurau,       //手番(喰らう側)
            Playerside tebanSeme,        //手番(利きを調べる側)
            Fingers fingers_kurau_IKUSA, //戦駒(喰らう側)
            Fingers fingers_kurau_MOTI,  // 持駒(喰らう側)
            Fingers fingers_seme_IKUSA,  //戦駒(利きを調べる側)
            Fingers fingers_seme_MOTI    // 持駒(利きを調べる側)
            )
        {
            // 攻め手の駒の位置
            GraphicalLog_Board boardLog_clone = new GraphicalLog_Board(this.BrdMove);

            foreach (Finger finger in fingers_seme_IKUSA.Items)
            {
                RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(finger).Now);

                Gkl_KomaMasu km = new Gkl_KomaMasu(
                    Util_GraphicalLog.PsideKs14_ToString(tebanSeme, Haiyaku184Array.Syurui(koma.Haiyaku), ""),
                    Util_Masu.AsMasuNumber(koma.Masu)
                    );
                boardLog_clone.KomaMasu1.Add(km);
            }

            foreach (Finger finger in fingers_kurau_IKUSA.Items)
            {
                RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(finger).Now);

                this.BrdMove.KomaMasu2.Add(new Gkl_KomaMasu(
                                               Util_GraphicalLog.PsideKs14_ToString(tebanKurau, Haiyaku184Array.Syurui(koma.Haiyaku), ""),
                                               Util_Masu.AsMasuNumber(koma.Masu)
                                               ));
            }

            foreach (Finger finger in fingers_seme_MOTI.Items)
            {
                RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(finger).Now);

                Gkl_KomaMasu km = new Gkl_KomaMasu(
                    Util_GraphicalLog.PsideKs14_ToString(tebanSeme, Haiyaku184Array.Syurui(koma.Haiyaku), ""),
                    Util_Masu.AsMasuNumber(koma.Masu)
                    );
                this.BrdMove.KomaMasu3.Add(km);
            }

            foreach (Finger finger in fingers_kurau_MOTI.Items)
            {
                RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(finger).Now);

                this.BrdMove.KomaMasu4.Add(new Gkl_KomaMasu(
                                               Util_GraphicalLog.PsideKs14_ToString(tebanKurau, Haiyaku184Array.Syurui(koma.Haiyaku), ""),
                                               Util_Masu.AsMasuNumber(koma.Masu)
                                               ));
            }
            this.BrdMove = boardLog_clone;
        }
Esempio n. 3
0
 private static void Log1(
     Node <ShootingStarlightable, KyokumenWrapper> hubNode,
     bool enableLog,
     int tesumi_yomiGenTeban,
     string hint
     )
 {
     Util_GraphicalLog.Log(enableLog, "Util_LegalMove(王手回避漏れ02)王手を回避するかどうかに関わらず、ひとまず全ての次の手", "[" +
                           ((KifuNode)hubNode).Json_NextNodes_MultiSky(
                               "(王手回避漏れ02." + tesumi_yomiGenTeban + "手目)",
                               hint + "_Lv3_RMHO",
                               tesumi_yomiGenTeban
                               ) + "]");// ログ出力
 }
Esempio n. 4
0
        /// <summary>
        /// ハブ・ノードの次ノード・リストをJSON化します。
        /// </summary>
        /// <param name="enableLog"></param>
        /// <param name="src_Sky_base"></param>
        /// <param name="hubNode"></param>
        /// <param name="comment"></param>
        /// <param name="logTag"></param>
        /// <returns></returns>
        public static string JsonKyokumens_NextNodes(bool enableLog, SkyConst src_Sky_base, Node <ShootingStarlightable, KyokumenWrapper> hubNode, string comment)
        {
            StringBuilder sb = new StringBuilder();

            if (!enableLog)
            {
                goto gt_EndMethod;
            }

            hubNode.Foreach_NextNodes((string key, Node <ShootingStarlightable, KyokumenWrapper> node, ref bool toBreak) =>
            {
                ShootingStarlightable move = node.Key;

                RO_Star_Koma srcKoma1 = Util_Koma.AsKoma(move.LongTimeAgo);
                RO_Star_Koma dstKoma  = Util_Koma.AsKoma(move.Now);


                Finger srcKoma2 = Util_Sky.Fingers_AtMasuNow(src_Sky_base, srcKoma1.Masu).ToFirst();

                // 駒1つ
                PieceType ks14 = Haiyaku184Array.Syurui(dstKoma.Haiyaku);

                sb.AppendLine("            [");

                // マスの色
                sb.AppendLine("                { act:\"colorMasu\", style:\"rgba(100,240,100,0.5)\" },");

                // マス
                sb.AppendLine("                { act:\"drawMasu\" , masu:" + Util_Masu.AsMasuNumber(dstKoma.Masu) + " },");


                string komaImg = Util_GraphicalLog.Finger_ToString(src_Sky_base, srcKoma2, "");
                sb.AppendLine("                { act:\"drawImg\", img:\"" + komaImg + "\", masu: " + Util_Masu.AsMasuNumber(dstKoma.Masu) + " },");//FIXME:おかしい?

                // コメント
                sb.AppendLine("                { act:\"drawText\", text:\"" + comment + "\"  , x:0, y:20 },");

                sb.AppendLine("            ],");
            });

gt_EndMethod:
            return(sb.ToString());
        }
Esempio n. 5
0
        /// <summary>
        /// 駒別マスをJSON化します。
        /// </summary>
        /// <param name="enableLog"></param>
        /// <param name="src_Sky_base"></param>
        /// <param name="km_move"></param>
        /// <param name="comment"></param>
        /// <returns></returns>
        public static string JsonKyokumens_MultiKomabetuMasus(bool enableLog, SkyConst src_Sky_base, Maps_OneAndOne <Finger, SySet <SyElement> > km_move, string comment)
        {
            StringBuilder sb = new StringBuilder();

            if (!enableLog)
            {
                goto gt_EndMethod;
            }

            km_move.Foreach_Entry((Finger key, SySet <SyElement> value, ref bool toBreak) =>
            {
                // 駒1つ
                RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky_base.StarlightIndexOf(key).Now);

                PieceType ks14 = Haiyaku184Array.Syurui(koma.Haiyaku);

                sb.AppendLine("            [");

                // マスの色
                sb.AppendLine("                { act:\"colorMasu\", style:\"rgba(100,240,100,0.5)\" },");

                // 全マス
                foreach (Basho masu in value.Elements)
                {
                    sb.AppendLine("                { act:\"drawMasu\" , masu:" + Util_Masu.AsMasuNumber(masu) + " },");
                }


                string komaImg = Util_GraphicalLog.Finger_ToString(src_Sky_base, key, "");
                sb.AppendLine("                { act:\"drawImg\", img:\"" + komaImg + "\", masu: " + Util_Masu.AsMasuNumber(koma.Masu) + " },");//FIXME:おかしい?

                // コメント
                sb.AppendLine("                { act:\"drawText\", text:\"" + comment + "\"  , x:0, y:20 },");

                sb.AppendLine("            ],");
            });

gt_EndMethod:
            return(sb.ToString());
        }
Esempio n. 6
0
        /// <summary>
        /// a - b = c
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <param name="sbGohosyu"></param>
        public static Maps_OneAndOne <Finger, SySet <SyElement> > Minus_OverThereMasus(
            bool enableLog,
            SkyConst src_srcSky_forLog,
            Maps_OneAndOne <Finger, SySet <SyElement> > a,
            SySet <SyElement> b
            )
        {
            Maps_OneAndOne <Finger, SySet <SyElement> > c = new Maps_OneAndOne <Finger, SySet <SyElement> >(a);

            foreach (Finger selfKoma in c.ToKeyList())//調べたい側の全駒
            {
                SySet <SyElement> srcMasus = c.ElementAt(selfKoma);

                // a -overThere b するぜ☆
                Util_GraphicalLog.Log(enableLog, "Thought_KomaAndMove Minus_OverThereMasus",
                                      "[\n" +
                                      "    [\n" +
                                      Util_GraphicalLog.JsonElements_Masus(enableLog, srcMasus, "(1)引く前") +
                                      "    ],\n" +
                                      "],\n"
                                      );
                SySet <SyElement> minusedMasus = srcMasus.Clone();
                minusedMasus.MinusMe_Opened(b);

                // 差替え
                c.AddReplace(selfKoma, minusedMasus, false);//差分に差替えます。もともと無い駒なら何もしません。
            }

            Util_GraphicalLog.Log(enableLog, "Thought_KomaAndMove Minus_OverThereMasus",
                                  "[\n" +
                                  "    [\n" +
                                  Util_GraphicalLog.JsonKyokumens_MultiKomabetuMasus(enableLog, src_srcSky_forLog, a, "(1)a") +
                                  Util_GraphicalLog.JsonElements_Masus(enableLog, b, "(2)-overThere_b") +
                                  Util_GraphicalLog.JsonKyokumens_MultiKomabetuMasus(enableLog, src_srcSky_forLog, c, "(3)=c") +
                                  "    ],\n" +
                                  "],\n"
                                  );

            return(c);
        }
Esempio n. 7
0
        public static string Finger_ToString(SkyConst src_Sky, Finger finger, string extentionWithDot)
        {
            string komaImg = "";

            if ((int)finger < Finger_Honshogi.Items_KomaOnly.Length)
            {
                RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(finger).Now);

                Playerside pside = koma.Pside;
                PieceType  ks14  = Haiyaku184Array.Syurui(koma.Haiyaku);

                komaImg = Util_GraphicalLog.PsideKs14_ToString(pside, ks14, extentionWithDot);
            }
            else
            {
                komaImg = Util_GraphicalLog.PsideKs14_ToString(Playerside.Empty, PieceType.None, extentionWithDot);
            }



            return(komaImg);
        }
Esempio n. 8
0
        public void Log4(
            SkyConst src_Sky,
            Playerside tebanSeme,//手番(利きを調べる側)
            Maps_OneAndOne <Finger, SySet <SyElement> > kmMove_seme_IKUSA
            )
        {
            // 戦駒の移動可能場所
            GraphicalLog_Board boardLog_clone = new GraphicalLog_Board(this.BrdMove);

            kmMove_seme_IKUSA.Foreach_Entry((Finger key, SySet <SyElement> value, ref bool toBreak) =>
            {
                RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(key).Now);

                string komaImg = Util_GraphicalLog.PsideKs14_ToString(tebanSeme, Haiyaku184Array.Syurui(koma.Haiyaku), "");

                foreach (Basho masu in value.Elements)
                {
                    boardLog_clone.Masu_theMove.Add((int)masu.MasuNumber);
                }
            });

            this.BrdMove = boardLog_clone;
        }
Esempio n. 9
0
        /// <summary>
        /// 指定された局面で、指定された手番の駒の、利きマスを算出します。
        /// 持ち駒は盤上にないので、利きを調べる必要はありません。
        ///
        /// 「手目」は判定できません。
        ///
        /// </summary>
        /// <param name="kouho"></param>
        /// <param name="sbGohosyu"></param>
        /// <param name="logger"></param>
        public static List_OneAndMulti <Finger, SySet <SyElement> > LAAAA_GetEffect(
            bool enableLog,
            bool isHonshogi,
            SkyConst src_Sky,
            Playerside pside_genTeban3,
            bool isAiteban,
            GraphicalLog_File logF_kiki,
            string logBrd_caption,
            int yomuDeep_forLog,//脳内読み手数
            int tesumi_yomiCur_forLog,
            ShootingStarlightable move_forLog
            )
        {
            GraphicalLog_Board logBrd_kiki = new GraphicalLog_Board();

            logBrd_kiki.Caption        = logBrd_caption;// "利き_"
            logBrd_kiki.Tesumi         = tesumi_yomiCur_forLog;
            logBrd_kiki.NounaiYomiDeep = yomuDeep_forLog;
            //logBrd_kiki.Score = 0.0d;
            logBrd_kiki.GenTeban = pside_genTeban3;// 現手番
            logF_kiki.boards.Add(logBrd_kiki);

            // 《1》
            List_OneAndMulti <Finger, SySet <SyElement> > sMs_effect = new List_OneAndMulti <Finger, SySet <SyElement> >();//盤上の駒の利き

            {
                // 《1.1》
                Playerside tebanSeme;  //手番(利きを調べる側)
                Playerside tebanKurau; //手番(喰らう側)
                {
                    if (isAiteban)
                    {
                        tebanSeme  = Converter04.AlternatePside(pside_genTeban3);
                        tebanKurau = pside_genTeban3;
                    }
                    else
                    {
                        tebanSeme  = pside_genTeban3;
                        tebanKurau = Converter04.AlternatePside(pside_genTeban3);
                    }

                    if (Playerside.P1 == tebanSeme)
                    {
                        logBrd_kiki.NounaiSeme = Gkl_NounaiSeme.Sente;
                    }
                    else if (Playerside.P2 == tebanSeme)
                    {
                        logBrd_kiki.NounaiSeme = Gkl_NounaiSeme.Gote;
                    }
                }


                // 《1.2》
                Fingers fingers_seme_IKUSA;  //戦駒(利きを調べる側)
                Fingers fingers_kurau_IKUSA; //戦駒(喰らう側)
                Fingers dust1;
                Fingers dust2;

                Util_Things.AAABAAAA_SplitGroup(
                    out fingers_seme_IKUSA,
                    out fingers_kurau_IKUSA,
                    out dust1,
                    out dust2,
                    src_Sky,
                    tebanSeme,
                    tebanKurau
                    );


                // 攻め手の駒の位置
                GraphicalLog_Board boardLog_clone = new GraphicalLog_Board(logBrd_kiki);
                foreach (Finger finger in fingers_seme_IKUSA.Items)
                {
                    RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(finger).Now);


                    Gkl_KomaMasu km = new Gkl_KomaMasu(
                        Util_GraphicalLog.PsideKs14_ToString(tebanSeme, Haiyaku184Array.Syurui(koma.Haiyaku), ""),
                        Util_Masu.AsMasuNumber(koma.Masu)
                        );
                    boardLog_clone.KomaMasu1.Add(km);
                }

                foreach (Finger finger in fingers_kurau_IKUSA.Items)
                {
                    RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(finger).Now);


                    logBrd_kiki.KomaMasu2.Add(new Gkl_KomaMasu(
                                                  Util_GraphicalLog.PsideKs14_ToString(tebanKurau, Haiyaku184Array.Syurui(koma.Haiyaku), ""),
                                                  Util_Masu.AsMasuNumber(koma.Masu)
                                                  ));
                }

                logBrd_kiki = boardLog_clone;



                // 《1.3》
                SySet <SyElement> masus_seme_IKUSA  = Converter04.Fingers_ToMasus(fingers_seme_IKUSA, src_Sky);  // 盤上のマス(利きを調べる側の駒)
                SySet <SyElement> masus_kurau_IKUSA = Converter04.Fingers_ToMasus(fingers_kurau_IKUSA, src_Sky); // 盤上のマス(喰らう側の駒)

                // 駒のマスの位置は、特にログに取らない。

                // 《1.4》
                Maps_OneAndOne <Finger, SySet <SyElement> > kmEffect_seme_IKUSA = Util_Things.Get_KmEffect_seme_IKUSA(
                    fingers_seme_IKUSA,//この中身がおかしい。
                    masus_seme_IKUSA,
                    masus_kurau_IKUSA,
                    src_Sky,
                    enableLog,
                    Converter04.MoveToStringForLog(move_forLog, pside_genTeban3)
                    );// 利きを調べる側の利き(戦駒)

                // 戦駒の利き
                logBrd_kiki = new GraphicalLog_Board(logBrd_kiki);
                kmEffect_seme_IKUSA.Foreach_Entry((Finger key, SySet <SyElement> value, ref bool toBreak) =>
                {
                    RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(key).Now);


                    string komaImg = Util_GraphicalLog.PsideKs14_ToString(tebanSeme, Haiyaku184Array.Syurui(koma.Haiyaku), "");

                    foreach (Basho masu in value.Elements)
                    {
                        boardLog_clone.Masu_theEffect.Add((int)masu.MasuNumber);
                    }
                });

                logBrd_kiki = boardLog_clone;


                // 《1》 = 《1.4》の戦駒+持駒
                sMs_effect.AddRange_New(kmEffect_seme_IKUSA);
            }

            return(sMs_effect);
        }
Esempio n. 10
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();
            }
        }
Esempio n. 11
0
        /// <summary>
        /// 読む。
        ///
        /// 棋譜ツリーを作成します。
        /// </summary>
        /// <param name="kifu">この棋譜ツリーの現局面に、次局面をぶら下げて行きます。</param>
        /// <param name="enableLog"></param>
        /// <param name="isHonshogi"></param>
        /// <param name="logTag"></param>
        /// <returns></returns>
        public static void WAA_Yomu_Start(
            KifuTree kifu,
            bool isHonshogi,
            SsssLogGenjo log
            )
        {
            //------------------------------------------------------------
            // (>_<)次の1手の合法手の中からランダムに選ぶぜ☆!
            //------------------------------------------------------------
            //
            // バグ探し:
            //          ①次の1手の合法手のリスト作成
            //          ②ランダムに1手選ぶ
            //
            //          の2つしかやっていないんだが、合法手ではない手を返してくるんだぜ☆

#if DEBUG_STOPPABLE
            MessageBox.Show("ここでブレイク☆!", "デバッグ");
            System.Diagnostics.Debugger.Break();
            //throw new Exception("デバッグだぜ☆! エラーはキャッチできたかな~☆?(^▽^)");
#endif


            KifuNode node_yomiNext = (KifuNode)kifu.CurNode;// このノードに、ツリーをぶら下げていきます。
            int      yomuIndex     = 0;



            // TODO:ここではログを出力せずに、ツリーの先端で出力したい。
            GraphicalLog_File logF_moveKiki = new GraphicalLog_File();

            // TODO:「読む」と、ツリー構造が作成されます。
            //int[] yomuLimitter = new int[]{
            //    600, // 読みの1手目の横幅   // 王手回避漏れのために、合法手全読み(約600)は必要です。
            //    100, // 読みの2手目の横幅
            //    100, // 読みの3手目の横幅
            //    //2, // 読みの4手目の横幅
            //    //1 // 読みの5手目の横幅
            //};

            //// ↓これなら1手1秒で指せる☆
            //int[] yomuLimitter = new int[]{
            //    600, // 読みの1手目の横幅   // 王手回避漏れのために、合法手全読み(約600)は必要です。
            //    150, // 読みの2手目の横幅
            //    150, // 読みの3手目の横幅
            //    //2 // 読みの4手目の横幅
            //    //1 // 読みの5手目の横幅
            //};

            //int[] yomuLimitter = new int[]{
            //    600, // 読みの1手目の横幅   // 王手回避漏れのために、合法手全読み(約600)は必要です。
            //    600, // 読みの2手目の横幅
            //    600, // 読みの3手目の横幅
            //};

            //ok
            //int[] yomuLimitter = new int[]{
            //    0,   // 現局面は無視します。
            //    600, // 読みの1手目の横幅   // 王手回避漏れのために、合法手全読み(約600)は必要です。
            //    600, // 読みの2手目の横幅
            //};

            int[] yomuLimitter = new int[] {
                0,   // 現局面は無視します。
                600, // 読みの1手目の横幅   // 王手回避漏れのために、1手目は、合法手全読み(約600)は必要です。
                600, // 読みの2手目の横幅
                //600, // 読みの3手目の横幅
            };

#if DEBUG
            // ログの出力数を減らすために、読みを弱くします。

            //yomuLimitter = new int[]{
            //    0,  // 現局面は無視します。
            //    600, // 読みの1手目の横幅   // 王手回避漏れのために、合法手全読み(約600)は必要です。
            //    100, // 読みの2手目の横幅
            //    100 // 読みの3手目の横幅
            //};

            yomuLimitter = new int[] {
                0,   // 現局面は無視します。
                600, // 読みの1手目の横幅   // 王手回避漏れのために、1手目は、合法手全読み(約600)は必要です。
                600, // 読みの2手目の横幅
                //600 // 読みの3手目の横幅
            };

            //yomuLimitter = new int[]{
            //    600, // 読みの1手目の横幅   // 王手回避漏れのために、合法手全読み(約600)は必要です。
            //    600, // 読みの2手目の横幅
            //    600, // 読みの3手目の横幅
            //    100,
            //    100
            //};
#endif
            MoveGenArgs  yomiArgs  = new MoveGenArgsImpl(isHonshogi, yomuLimitter, logF_moveKiki);
            MoveGenGenjo yomiGenjo = new MoveGenGenjoImpl(yomiArgs, yomuIndex + 1, kifu.CurrentTesumi(), kifu.CountPside(node_yomiNext));
            MoveGenRoutine.WAAA_Yomu_Loop(node_yomiNext, yomiGenjo, log);

            if (0 < logF_moveKiki.boards.Count)//ログが残っているなら
            {
                //
                // ログの書き出し
                //
                Util_GraphicalLog.Log(
                    true,//enableLog,
                    "MoveRoutine#Yomi_NextNodes(00)新ログ",
                    "[" + Util_GraphicalLog.BoardFileLog_ToJsonStr(logF_moveKiki) + "]"
                    );

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