示例#1
0
 /// <summary>
 /// 定跡登録 初期化(ゲームセクション内)
 /// </summary>
 public static void Init_JosekiToroku(Kyokumen ky)
 {
     IsJosekiTraced          = false;//毎回リセット☆(^▽^)
     KyFen_before            = null;
     KyHash_before           = 0;
     OptionalPhaseBeforeMove = Option <Phase> .None;
     if (Util_Machine.IsEnableBoardSize() && Option_Application.Optionlist.JosekiRec)
     {
         StringBuilder fenMojiretu = new StringBuilder();
         ky.AppendFenTo(Option_Application.Optionlist.USI, fenMojiretu);
         KyFen_before            = fenMojiretu.ToString();
         KyHash_before           = ky.KyokumenHash.Value;
         OptionalPhaseBeforeMove = ky.CurrentOptionalPhase;
     }
 }
示例#2
0
        /// <summary>
        /// 定跡更新(ゲームセクション内)
        /// </summary>
        public static void Update1_JosekiToroku(Move inputMove, Kyokumen ky, StringBuilder syuturyoku)
        {
            if (Util_Machine.IsEnableBoardSize() && Option_Application.Optionlist.JosekiRec)
            {
                Util_Application.Hyoka(ky, out HyokatiUtiwake hyokatiUtiwake, HyokaRiyu.Yososu, true//ランダムな局面の可能性もあるぜ☆(^~^)
                                       );

                // 定跡更新☆(^▽^)
                Option_Application.Joseki.AddMove(KyFen_before, KyHash_before, OptionalPhaseBeforeMove, inputMove,
                                                  hyokatiUtiwake.EdaBest, // 指した直後の局面の点数
                                                  1,                      //人間は1手読み扱いで☆
                                                  Util_Application.VERSION,
                                                  syuturyoku
                                                  );
            }
        }
示例#3
0
        /// <summary>
        /// 定跡更新(ゲームセクション内)
        /// </summary>
        public static void Update2_JosekiToroku(Move bestMove, Hyokati bestHyokati, Kyokumen ky, StringBuilder syuturyoku)
        {
            if (Util_Machine.IsEnableBoardSize() && Option_Application.Optionlist.JosekiRec)
            {
                if (!IsJosekiTraced)// 定跡を使った指し手ではない場合に限り
                {
#if DEBUG
                    // 指し手の整合性をチェックしておきたいぜ☆(^▽^)
                    {
                        Kyokumen ky_forAssert = new Kyokumen();
                        int      caret_2      = 0;
                        if (!ky_forAssert.ParsePositionvalue(Option_Application.Optionlist.USI, KyFen_before, ref caret_2, true, false, out string moves, syuturyoku)) // ビットボードを更新したいので、適用する
                        {
                            syuturyoku.AppendLine("パースに失敗だぜ☆(^~^)! #鯰");
                            var msg = syuturyoku.ToString();
                            syuturyoku.Clear();
                            Logger.Flush(msg);
                            throw new Exception(msg);
                        }

                        if (!ky_forAssert.CanDoMove(bestMove, out MoveMatigaiRiyu riyu))
                        {
                            StringBuilder reigai1 = new StringBuilder();
                            reigai1.AppendLine("指せない指し手を定跡に登録しようとしたぜ☆(^~^)!:");
                            // reigai1.Append("理由:"); ConvMove.SetumeiLine(riyu, reigai1);
                            reigai1.Append("指し手:"); ConvMove.SetumeiLine(Option_Application.Optionlist.USI, bestMove, reigai1);
                            reigai1.Append("定跡にする1手前の局面 ("); reigai1.Append(KyFen_before); reigai1.AppendLine(")");
                            Util_Information.Setumei_Lines_Kyokumen(ky_forAssert, reigai1);
                            reigai1.AppendLine();
                            reigai1.Append("1手後は、現局面");
                            Util_Information.Setumei_Lines_Kyokumen(ky, reigai1);
                            syuturyoku.AppendLine(reigai1.ToString());
                            var msg = syuturyoku.ToString();
                            syuturyoku.Clear();
                            Logger.Flush(msg);
                            throw new Exception(msg);
                        }
                    }
#endif

                    Option_Application.Joseki.AddMove(KyFen_before, KyHash_before, OptionalPhaseBeforeMove, bestMove, bestHyokati, Util_Tansaku.NekkoKaranoFukasa, Util_Application.VERSION, syuturyoku);
                }
            }
        }