Esempio n. 1
0
        /// <summary>
        /// 指し手の±部
        /// </summary>
        private static void ReadPlaceMinusMove(string line, CsaKifuImpl csaKifuData)
        {
            if (line.Length < 7)
            {
                goto gt_EndMethod;
            }

            CsaKifuMove move = new CsaKifuMoveImpl();

            // 1文字目
            switch (line[0])
            {
            case '+': move.Sengo = line[0].ToString(); break;

            case '-': move.Sengo = line[0].ToString(); break;
            }

            // 2~3文字目
            move.SourceMasu = line.Substring(1, 2);

            // 4~5文字目
            move.DestinationMasu = line.Substring(3, 2);

            // 6~7文字目
            move.Syurui = line.Substring(5, 2);

            // オプション。手目済み。
            move.OptionTemezumi = csaKifuData.MoveList.Count + 1;

            csaKifuData.MoveList.Add(move);

gt_EndMethod:
            ;
        }
Esempio n. 2
0
        /// <summary>
        /// N部。
        /// </summary>
        /// <param name="line"></param>
        private static void ReadN(string line, CsaKifuImpl csaKifuData)
        {
            if (line.Length < 2)
            {
                goto gt_EndMethod;
            }

            // 2文字目が「+」なら先手の名前、「-」なら後手の名前。
            switch (line[1])
            {
            case '+':
                csaKifuData.Player1Name = line.Substring(2);
                break;

            case '-':
                csaKifuData.Player2Name = line.Substring(2);
                break;

            default:
                break;
            }

gt_EndMethod:
            ;
        }
Esempio n. 3
0
        /// <summary>
        /// T部。
        /// </summary>
        /// <param name="line"></param>
        private static void ReadT(string line, CsaKifuImpl csaKifuData)
        {
            if (line.Length < 2)
            {
                goto gt_EndMethod;
            }

            if (csaKifuData.MoveList.Count < 1)
            {
                goto gt_EndMethod;
            }

            int second;

            if (int.TryParse(line.Substring(1), out second))
            {
                csaKifuData.MoveList.Last().Second = second;
            }

gt_EndMethod:
            ;
        }
Esempio n. 4
0
        public static CsaKifu ReadFile(string filepath)
        {
            CsaKifuImpl csaKifuData = new CsaKifuImpl();

            if (!File.Exists(filepath))
            {
                MessageBox.Show($@"ファイルがありません。
ファイルパス=[{filepath}]", "エラー");

                goto gt_EndMethod;
            }

            string[] allLines = File.ReadAllLines(filepath);

            int phase = 0;

            foreach (string line in allLines)
            {
                if (line.Length < 1)
                {
                    goto gt_EndLoop1;
                }

gt_Continue1:
                ;

                switch (phase)
                {
                case 0:
                    //
                    // V,N,$部
                    //
                    switch (line[0])
                    {
                    case 'V': Util_Csa.ReadV(line, csaKifuData); break;

                    case 'N': Util_Csa.ReadN(line, csaKifuData); break;

                    case '$': break;        // 対局情報は無視します。

                    case '\'': break;       // コメントは無視します。

                    default:
                        phase = 1;
                        goto gt_Continue1;
                    }
                    break;

                case 1:
                    //
                    // P部
                    //
                    switch (line[0])
                    {
                    case 'P': Util_Csa.ReadP(line, csaKifuData); break;

                    case '\'': break;        // コメントは無視します。

                    default:
                        phase = 2;
                        goto gt_Continue1;
                    }
                    break;

                case 2:
                    //
                    // ±部
                    //
                    switch (line[0])
                    {
                    case '+':        //thru
                    case '-': Util_Csa.ReadPlaceMinus_FirstSengo(line, csaKifuData); phase = 3; break;

                    case '\'': break;        // コメントは無視します。

                    default:
                        phase = 3;        //本当はエラーのはず。
                        goto gt_Continue1;
                    }
                    break;

                case 3:
                    //
                    // 指し手の±部、T部
                    //
                    switch (line[0])
                    {
                    case '+':
                    case '-': Util_Csa.ReadPlaceMinusMove(line, csaKifuData); break;

                    case 'T': Util_Csa.ReadT(line, csaKifuData); break;

                    case '\'': break;        // コメントは無視します。

                    default:
                        phase = 4;
                        goto gt_Continue1;
                    }
                    break;

                case 4:
                    //
                    // %部
                    //
                    switch (line[0])
                    {
                    case '%': Util_Csa.ReadFinishedStatus(line, csaKifuData); break;

                    case '\'': break;        // コメントは無視します。

                    default:
                        phase = 5;
                        goto gt_Next1;
                    }
                    break;

                default:
                    break;
                }


gt_EndLoop1:
                ;
            }
gt_Next1:
            ;

gt_EndMethod:
            ;
            return(csaKifuData);
        }
Esempio n. 5
0
 /// <summary>
 /// %部。
 /// </summary>
 private static void ReadFinishedStatus(string line, CsaKifuImpl csaKifuData)
 {
     csaKifuData.FinishedStatus = line.Substring(1);
 }
Esempio n. 6
0
 /// <summary>
 /// 初手の先後の±部
 /// </summary>
 private static void ReadPlaceMinus_FirstSengo(string line, CsaKifuImpl csaKifuData)
 {
     csaKifuData.FirstSengo = line;
 }
Esempio n. 7
0
 /// <summary>
 /// V部。
 /// </summary>
 /// <param name="line"></param>
 private static void ReadV(string line, CsaKifuImpl csaKifuData)
 {
     csaKifuData.Version = line.Substring(1);
 }