Ejemplo n.º 1
0
 public SeisekiKyokumen(string fen, Option <Phase> optionalPhase, Seiseki owner)
 {
     this.Owner = owner;
     this.Fen   = fen;
     this.CurrentOptionalPhase = optionalPhase;
     this.SsItems = new Dictionary <Move, SeisekiMove>();
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 成績を読込むぜ☆(^▽^)
        /// </summary>
        public static Seiseki Load_Seiseki_1file(string filepath, StringBuilder syuturyoku)
        {
            Seiseki se = null;

            if (File.Exists(filepath))//定跡ファイルがある場合のみ、定跡を使うぜ☆(^▽^)
            {
                se = new Seiseki();
                se.Parse(Option_Application.Optionlist.USI, System.IO.File.ReadAllLines(filepath), syuturyoku);
            }

            return(se);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 成績を書き出すぜ☆(^▽^)
        /// </summary>
        public static void Flush_Seiseki_1file(Seiseki se, string file, StringBuilder syuturyoku)
        {
            if (!File.Exists(file))
            {
                // 定跡ファイルが無ければ作成します。
                FileStream fs = File.Create(file);
                fs.Close(); // File.Create したあとは、必ず Close() しないと、ロックがかかったままになる☆(^▽^)
            }

            syuturyoku.Append(".");
            {
                var msg = syuturyoku.ToString();
                syuturyoku.Clear();
                Logger.Flush(msg);
            }

            // 成績の文字列化☆
            string seisekiStr = se.ToContents_NotUnity(Option_Application.Optionlist.USI);

            syuturyoku.Append(".");
            {
                var msg = syuturyoku.ToString();
                syuturyoku.Clear();
                Logger.Flush(msg);
            }

            // 容量を制限するぜ☆
            if (Seiseki.Capacity < seisekiStr.Length)
            {
                syuturyoku.AppendLine($"seiseki removed bytes = { se.DownSizeing(seisekiStr.Length - Seiseki.Capacity)}");

                syuturyoku.Append(".");
                {
                    var msg = syuturyoku.ToString();
                    syuturyoku.Clear();
                    Logger.Flush(msg);
                }

                // もう1回取得☆
                seisekiStr = se.ToContents_NotUnity(Option_Application.Optionlist.USI);
            }

            // 上書き☆
            System.IO.File.WriteAllText(file, seisekiStr);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// 分けたファイルを吸収するぜ☆www(^▽^)
 /// 重複したデータは、どちらを残すか自動的に判断するぜ☆(^▽^)
 /// </summary>
 public void Merge(Seiseki seiseki)
 {
     foreach (KeyValuePair <ulong, SeisekiKyokumen> seKy in seiseki.KyItems)
     {
         foreach (KeyValuePair <Move, SeisekiMove> seSs in seKy.Value.SsItems)
         {
             this.AddMove(
                 seKy.Value.Fen,
                 seKy.Key,
                 seKy.Value.CurrentOptionalPhase,
                 seSs.Key,
                 seSs.Value.Version,
                 seSs.Value.Kati,
                 seSs.Value.Hikiwake,
                 seSs.Value.Make
                 );
         }
     }
 }
Ejemplo n.º 5
0
        /// <summary>
        /// 成績を読込むぜ☆(^▽^)
        /// </summary>
        public static void Load_Seiseki(StringBuilder syuturyoku)
        {
            if (IsEnableBoardSize())
            {
                syuturyoku.Append("成績ファイル読込中");
                {
                    var msg = syuturyoku.ToString();
                    syuturyoku.Clear();
                    Logger.Flush(msg);
                }

                // まず、既存ファイル名を列挙するぜ☆(^▽^)
                string   filenamePattern = $"_auto_seiseki{ (Option_Application.Optionlist.SagareruHiyoko ? Logger.LocalRuleSagareruHiyoko : Logger.LocalRuleHonshogi)}*";
                string[] filepaths       = Directory.GetFiles(".", filenamePattern);

                // どんどんマージしていくぜ☆(^▽^)
                Option_Application.Seiseki.Clear();
                for (int index = 0; index < filepaths.Length; index++)
                {
                    syuturyoku.Append(".");
                    {
                        var msg = syuturyoku.ToString();
                        syuturyoku.Clear();
                        Logger.Flush(msg);
                    }

                    Seiseki se = Util_Machine.Load_Seiseki_1file(filepaths[index], syuturyoku);
                    if (null != se)
                    {
                        Option_Application.Seiseki.Merge(se);
                    }
                }

                syuturyoku.AppendLine("☆");
                {
                    var msg = syuturyoku.ToString();
                    syuturyoku.Clear();
                    Logger.Flush(msg);
                }
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// ファイルの容量が大きくなったので、分割するぜ☆(^~^)
        /// 低速にはなるが、たくさん記憶するためのものだぜ☆
        /// </summary>
        /// <returns>分けた残りの定跡</returns>
        public void Bunkatu(out Seiseki[] out_bunkatu, out string[] out_bunkatupartNames)
        {
            out_bunkatupartNames = new string[] { "(P1)", "(P2)" };
            Seiseki seP2 = new Seiseki();

            // 削除するキー
            List <ulong> removeKeys = new List <ulong>();

            foreach (KeyValuePair <ulong, SeisekiKyokumen> seKy in this.KyItems)
            {
                var(exists1, phase1) = seKy.Value.CurrentOptionalPhase.Match;
                if (exists1 && phase1 == Phase.White)
                {
                    removeKeys.Add(seKy.Key);

                    foreach (KeyValuePair <Move, SeisekiMove> seSs in seKy.Value.SsItems)
                    {
                        seP2.AddMove(
                            seKy.Value.Fen,
                            seKy.Key,
                            seKy.Value.CurrentOptionalPhase,
                            seSs.Key,
                            seSs.Value.Version,
                            seSs.Value.Kati,
                            seSs.Value.Hikiwake,
                            seSs.Value.Make
                            );
                    }
                }
            }

            foreach (ulong key in removeKeys)
            {
                this.KyItems.Remove(key);
            }

            out_bunkatu = new Seiseki[] { this,//[0]はthisにしろだぜ☆(^▽^)
                                          seP2 };
        }
Ejemplo n.º 7
0
        static Option_Application()
        {
            Random     = new Random();
            Optionlist = new Optionlist();

            Kyokumen = new Kyokumen();
            Kyokumen.Init();
            Kyokumen.OnBanResized(Optionlist.BanYokoHaba, Optionlist.BanTateHaba);//盤のタテ、ヨコ幅が変わったら呼び出すこと。


            if (Optionlist.TranspositionTableTukau)
            {
                TranspositionTable = new TTable(900000);//300000
            }
            if (Optionlist.HanpukuSinkaTansakuTukau)
            {
                TimeManager = new TimeManager();
            }

            Joseki  = new Joseki();
            Seiseki = new Seiseki();
            Kifu    = new Kifu();
        }