예제 #1
0
        /// <summary>
        /// SFEN文字列と、出力ファイル名を指定することで、局面の画像ログを出力します。
        /// </summary>
        /// <param name="sfenstring"></param>
        /// <param name="outFile"></param>
        /// <param name="reportEnvironment"></param>
        /// <returns></returns>
        public static bool Write_ForTest(
            string sfenstring,
            string relFolder,
            string outFile,
            KyokumenPngEnvironment reportEnvironment
            )
        {
            bool successful = true;


            //System.Windows.Forms.MessageBox.Show($@"{sfenstring}
            //{outFile}", "局面PNG書き出し");

            //
            // SFEN → RO_SfenStartpos
            //
            ISfenPosition2 ro_SfenStartpos;
            string         rest;

            if (!Sfenstring146Conv.ToKyokumen2(sfenstring, out rest, out ro_SfenStartpos))
            {
                //System.Windows.Forms.MessageBox.Show(sfenstring,"sfenstringパース失敗");
                successful = false;
                goto gt_EndMethod;
            }

            // テスト・プログラム用
            Util_KyokumenPng_Writer.Write1(
                ro_SfenStartpos.ToKyokumen1(),
                -1,                                     //移動元升不明
                -1,                                     //移動先升不明
                KyokumenPngArgs_FoodOrDropKoma.UNKNOWN, //取った駒不明
                "",                                     //指し手SFEN
                relFolder,
                outFile,
                reportEnvironment
                );

gt_EndMethod:
            return(successful);
        }
예제 #2
0
        public static bool TryParse(
            string inputLine,
            out StartposImporter instance,
            out string rest
            )
        {
            bool successful = true;

            ISfenPosition2 ro_SfenStartpos;

            if (!Sfenstring146Conv.ToKyokumen2(inputLine, out rest, out ro_SfenStartpos))
            {
                successful = false;
                instance   = null;
                goto gt_EndMethod;
            }

            instance = new StartposImporter(inputLine, ro_SfenStartpos);

gt_EndMethod:
            return(successful);
        }
예제 #3
0
        /// <summary>
        /// ************************************************************************************************************************
        /// 「lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1」といった記述を解析します。
        /// ************************************************************************************************************************
        /// </summary>
        /// <returns></returns>
        public static bool ToKyokumen2(
            string inputLine,
            out string rest,
            out ISfenPosition2 result_kyokumen2
            )
        {
            // 頭に 「position」 があれば、外します。
            {
                inputLine = inputLine.TrimStart();
                if (inputLine.StartsWith("position"))
                {
                    inputLine = inputLine.Substring("position".Length);
                }
            }

            // 頭に 「startpos」があれば、置き換えます。
            {
                inputLine = inputLine.TrimStart();
                if (inputLine.StartsWith("startpos"))
                {
                    inputLine = inputLine.Substring("startpos".Length);
                }

                inputLine = $"sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1 { inputLine }";
            }


            bool successful = false;

            result_kyokumen2 = null;

            // 1~27
            string[] stra = new string[28];
            //stra[0] = "";//未使用
            for (int i = 1; i < 28; i++)
            {
                stra[i] = "";
            }

            rest = inputLine;

            bool startposPattern = false;

            //------------------------------------------------------------
            // リスト作成
            //------------------------------------------------------------
            if (!startposPattern)
            {
                MatchCollection mc = regexOfStartpos.Matches(inputLine);
                foreach (Match m in mc)
                {
                    if (0 < m.Groups.Count)
                    {
                        // 残りのテキスト
                        rest = inputLine.Substring(0, m.Index) + inputLine.Substring(m.Index + m.Length, inputLine.Length - (m.Index + m.Length));

                        stra[1]  = m.Groups[1].Value;  //1段目
                        stra[2]  = m.Groups[2].Value;  //2段目
                        stra[3]  = m.Groups[3].Value;  //3段目
                        stra[4]  = m.Groups[4].Value;  //4段目
                        stra[5]  = m.Groups[5].Value;  //5段目
                        stra[6]  = m.Groups[6].Value;  //6段目
                        stra[7]  = m.Groups[7].Value;  //7段目
                        stra[8]  = m.Groups[8].Value;  //8段目
                        stra[9]  = m.Groups[9].Value;  //9段目
                        stra[10] = m.Groups[10].Value; //先後
                        stra[11] = m.Groups[11].Value; //持駒▲王
                        stra[12] = m.Groups[12].Value; //持駒▲飛
                        stra[13] = m.Groups[13].Value; //持駒▲角
                        stra[14] = m.Groups[14].Value; //持駒▲金
                        stra[15] = m.Groups[15].Value; //持駒▲銀
                        stra[16] = m.Groups[16].Value; //持駒▲桂
                        stra[17] = m.Groups[17].Value; //持駒▲香
                        stra[18] = m.Groups[18].Value; //持駒▲歩
                        stra[19] = m.Groups[19].Value; //持駒△王
                        stra[20] = m.Groups[20].Value; //持駒△飛
                        stra[21] = m.Groups[21].Value; //持駒△角
                        stra[22] = m.Groups[22].Value; //持駒△金
                        stra[23] = m.Groups[23].Value; //持駒△銀
                        stra[24] = m.Groups[24].Value; //持駒△桂
                        stra[25] = m.Groups[25].Value; //持駒△香
                        stra[26] = m.Groups[26].Value; //持駒△歩
                        stra[27] = m.Groups[27].Value; //手目

                        if (
                            !(
                                stra[1] == "" && stra[2] == "" && stra[3] == "" && stra[4] == "" && stra[5] == "" &&
                                stra[6] == "" && stra[7] == "" && stra[8] == "" && stra[9] == "" && stra[10] == "" &&
                                stra[11] == "" && stra[12] == "" && stra[13] == "" && stra[14] == "" && stra[15] == "" &&
                                stra[16] == "" && stra[17] == "" && stra[18] == "" && stra[19] == "" && stra[20] == "" &&
                                stra[21] == "" && stra[22] == "" && stra[23] == "" && stra[24] == "" && stra[25] == "" &&
                                stra[26] == "" && stra[27] == ""
                                )

                            )
                        {
                            result_kyokumen2 = Sfenstring146Conv.ReadString2(
                                stra[1],  //1段目
                                stra[2],  //2段目
                                stra[3],  //3段目
                                stra[4],  //4段目
                                stra[5],  //5段目
                                stra[6],  //6段目
                                stra[7],  //7段目
                                stra[8],  //8段目
                                stra[9],  //9段目
                                stra[10], //先後
                                stra[11], //持駒▲王
                                stra[12], //持駒▲飛
                                stra[13], //持駒▲角
                                stra[14], //持駒▲金
                                stra[15], //持駒▲銀
                                stra[16], //持駒▲桂
                                stra[17], //持駒▲香
                                stra[18], //持駒▲歩
                                stra[19], //持駒△王
                                stra[20], //持駒△飛
                                stra[21], //持駒△角
                                stra[22], //持駒△金
                                stra[23], //持駒△銀
                                stra[24], //持駒△桂
                                stra[25], //持駒△香
                                stra[26], //持駒△歩
                                stra[27]  //手目
                                );
                            successful = true;
                        }
                    }

                    // 最初の1件だけ処理して終わります。
                    break;
                }
            }


            rest = rest.Trim();

            //// 解析失敗時用
            //{
            //    StringBuilder sb = new StringBuilder();
            //    sb.Append($"解析失敗☆ inputLine=[{ inputLine }]");

            //    for (int i = 1; i < 28; i++)
            //    {
            //        sb.Append($"str{ i }[{ stra[i] }]");
            //    }

            //    Debug.Assert(result_Sfenstring != null, sb.ToString());

            //    Util_SfenstringReader.Assert_Koma40(result_Sfenstring, $"inputLine=[{ inputLine }]");
            //}

            return(successful);
        }