Exemple #1
0
        public void Read_Add(string filepath, Encoding encoding)
        {
            if (!File.Exists(filepath))
            {
                Util_Message.Show($"設定ファイルが見つかりません。[{filepath}]");
                goto gt_EndMethod;
            }

            List <List <string> > rows = Util_Csv.ReadCsv(filepath, encoding);

            // 最初の1行は削除。
            rows.RemoveRange(0, 1);

            //------------------------------
            // データ部だけが残っています。
            //------------------------------
            if ("" == this.FilepathsCsv)
            {
                this.FilepathsCsv = filepath;
            }
            else
            {
                this.FilepathsCsv = $"{this.FilepathsCsv},{filepath}";
            }
            //this.Properties.Clear();

            foreach (List <string> row in rows)
            {
                // 各行は、name,value の2列以上あるはずです。
                if (row.Count < 2)
                {
                    goto gt_NextColumn;
                }

                // name列が空っぽの行は無視します。
                if ("" == row[0])
                {
                    goto gt_NextColumn;
                }

                if (this.Properties.ContainsKey(row[0]))
                {
                    Util_Message.Show($"項目[{row[0]}]を上書きします。");
                    this.Properties[row[0]] = row[1];
                }
                else
                {
                    this.Properties.Add(row[0], row[1]);
                }

gt_NextColumn:
                ;
            }

gt_EndMethod:
            ;
        }
Exemple #2
0
        public static List <List <string> > Load(string path, Encoding encoding)
        {
            List <List <string> > rows = Util_Csv.ReadCsv(path, encoding);


            // 最初の2行は削除。
            rows.RemoveRange(0, 2);

            // 各行の先頭2列は削除。
            foreach (List <string> row in rows)
            {
                row.RemoveRange(0, 2);
            }


            //------------------------------
            // データ部だけが残っています。
            //------------------------------
            Array_ForcePromotion.haiyakuMap = new Dictionary <Komahaiyaku185, Dictionary <int, Komahaiyaku185> >();

            int haiyakuHandle = 0;
            int rowCount      = 0;

            foreach (List <string> row in rows)
            {
                // 偶数行はコメントなので無視します。
                if (rowCount % 2 == 0)
                {
                    goto gt_NextRow;
                }

                //----------
                // 配役
                //----------
                Dictionary <int, Komahaiyaku185> map2 = new Dictionary <int, Komahaiyaku185>();
                Array_ForcePromotion.haiyakuMap.Add(
                    Array_Komahaiyaku185.Items[haiyakuHandle],
                    map2
                    );

                int masuHandle = 0;
                foreach (string column in row)
                {
                    // 空っぽの列は無視します。
                    if ("" == column)
                    {
                        goto gt_NextColumn;
                    }

                    // 空っぽでない列の値を覚えます。

                    // 数値型のはずです。
                    int haiyakuHandle_target;
                    if (!int.TryParse(column, out haiyakuHandle_target))
                    {
                        throw new Exception($@"エラー。
path=[{path}]
「強制転成表」に、int型数値でないものが指定されていました。
rowCount=[{rowCount}]
masuHandle=[{masuHandle}]");
                    }

                    map2.Add(masuHandle, Array_Komahaiyaku185.Items[haiyakuHandle_target]);

gt_NextColumn:
                    masuHandle++;
                }


                haiyakuHandle++;

gt_NextRow:
                rowCount++;
            }

            return(rows);
        }
Exemple #3
0
        /// <summary>
        /// TODO: 駒の配置と、配役ハンドルをもとに、升を取得できたい。
        ///
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static List <List <string> > Load(string path, Encoding encoding)
        {
            List <List <string> > rows = Util_Csv.ReadCsv(path, encoding);


            // 最初の6行は削除。
            rows.RemoveRange(0, 6);

            // 各行の先頭1列は削除。
            foreach (List <string> row in rows)
            {
                row.RemoveRange(0, 1);
            }



            int haiyaku = 0;

            foreach (List <string> row in rows)
            {
                int fieldNumber = 0;
                foreach (string field in row)
                {
                    switch (fieldNumber) //フィールドある限り空間。
                    {
                    case 0:              //名前
                    {
                        Util_Komahaiyaku184.Name.Add(field);
                        Util_Komahaiyaku184.KukanMasus.Add(Array_Komahaiyaku185.Items[haiyaku], new List <SySet <SyElement> >());
                    }
                    break;

                    case 1:    //絵修飾字
                    {
                        Util_Komahaiyaku184.Name2.Add(field);
                    }
                    break;

                    case 2:    //駒種類備考
                        break;

                    case 3:    //駒種類番号
                    {
                        int syuruiHandle;
                        if (int.TryParse(field, out syuruiHandle))
                        {
                            Util_Komahaiyaku184.AddSyurui(Array_Komasyurui.Items_AllElements[syuruiHandle]);
                        }
                    }
                    break;

                    case 4:     // 元の世界 上
                    {
                        for (int iMichi = 1; iMichi <= 9; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    case 5:     // 元の世界 引
                    {
                        for (int iMichi = 10; iMichi <= 18; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    case 6:     // 元の世界 滑
                    {
                        for (int iMichi = 19; iMichi <= 27; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    case 7:     // 元の世界 射
                    {
                        for (int iMichi = 28; iMichi <= 36; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    case 8:     // 奇角交差    昇
                    {
                        for (int iMichi = 37; iMichi <= 43; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    case 9:     // 奇角交差    降
                    {
                        for (int iMichi = 44; iMichi <= 50; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    case 10:     // 奇角交差    沈
                    {
                        for (int iMichi = 51; iMichi <= 57; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    case 11:        // 奇角交差 浮
                    {
                        for (int iMichi = 58; iMichi <= 64; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    case 12:        // 偶角交差 昇
                    {
                        for (int iMichi = 65; iMichi <= 72; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    case 13:        // 偶角交差 降
                    {
                        for (int iMichi = 73; iMichi <= 80; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    case 14:        // 偶角交差 沈
                    {
                        for (int iMichi = 81; iMichi <= 88; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    case 15:        // 偶角交差 浮
                    {
                        for (int iMichi = 89; iMichi <= 96; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    case 16:        // 金桂交差 駆
                    {
                        for (int iMichi = 97; iMichi <= 102; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    // (欠番)金桂交差 退

                    // (欠番)金桂交差 踏


                    case 17:        // 金桂交差 跳
                    {
                        for (int iMichi = 115; iMichi <= 120; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    case 18:     // 銀桂交差 駆
                    {
                        for (int iMichi = 121; iMichi <= 125; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    // (欠番)銀桂交差 退

                    // (欠番)銀桂交差 踏

                    case 19:        // 銀桂交差 跳
                    {
                        for (int iMichi = 136; iMichi <= 140; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    case 20:        // 擦金桂交差    駆
                    {
                        for (int iMichi = 141; iMichi <= 145; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    // (欠番)擦金桂交差    退

                    // (欠番)擦金桂交差    踏

                    case 21:        // 擦金桂交差    跳
                    {
                        for (int iMichi = 156; iMichi <= 160; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    case 22:        // 擦銀桂交差    駆
                    {
                        for (int iMichi = 161; iMichi <= 165; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    // (欠番)擦銀桂交差    退

                    // (欠番)擦銀桂交差    踏

                    case 23:        // 擦銀桂交差    跳
                    {
                        for (int iMichi = 176; iMichi <= 180; iMichi++)
                        {
                            Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]);
                        }
                        break;
                    }

                    case 24:        // 歩打面  上
                    {
                        Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[181]);
                        Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[182]);
                        break;
                    }

                    // (欠番)歩打面  引

                    case 25:        // 香打面  上
                    {
                        Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[183]);
                        Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[184]);
                        break;
                    }

                    // (欠番)香打面  引

                    case 26:        // 桂打面  上
                    {
                        Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[185]);
                        Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[186]);
                        break;
                    }

                    // (欠番)桂打面  引

                    case 27:        // 全打面
                    {
                        Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[187]);
                        break;
                    }
                    }

                    fieldNumber++;
                }


                haiyaku++;
            }

            return(rows);
        }
Exemple #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="filepath1"></param>
        /// <returns></returns>
        public static bool Load(string filepath1)
        {
            bool successful = false;

            string filepath2 = Path.Combine(Application.StartupPath, filepath1);


            List <List <string> > rows = null;

            if (!File.Exists(filepath2))
            {
                MessageBox.Show($"ファイルがありません。\nfilepath2=[{filepath2}]", "情報");
                rows = null;
                goto gt_EndMethod;
            }

            rows = Util_Csv.ReadCsv(filepath2);



            // 最初の1行は削除。
            rows.RemoveRange(0, 1);



            Michi187Array.Items.Clear();

            // 構文解析は大雑把です。
            // (1)空セルは無視します。
            // (2)「@DEFINE」セルが処理開始の合図です。
            // (3)次のセルには集合の名前です。「味方陣」「平野部」「敵陣」のいずれかです。
            // (4)次のセルは「=」です。
            // (5)次のセルは「{」です。
            // (6)次に「}」セルが出てくるまで、符号のセルが連続します。「1九」「1八」など。
            // (7)「}」セルで、@DEFINEの処理は終了です。
            foreach (List <string> row in rows)
            {
                // 2列目は、道名。
                SySet <SyElement> michi187  = new SySet_Ordered <SyElement>(row[1].Trim());
                SySet <SyElement> michiPart = null;

                // 各行の先頭1列目(連番)と2列目(道名)は削除。
                row.RemoveRange(0, 2);

                bool isPart_Define        = false; //@DEFINEパート
                bool isPart_Define_Member = false; //符号パート

                foreach (string cell1 in row)
                {
                    string cell = cell1.Trim();

                    if (cell == "")
                    {
                        goto gt_Next1;
                    }

                    if (isPart_Define)
                    {
                        if (cell == "=")
                        {
                            goto gt_Next1;
                        }

                        if (cell == "{")
                        {
                            isPart_Define_Member = true;
                            goto gt_Next1;
                        }

                        if (cell == "}")
                        {
                            isPart_Define_Member = false;
                            isPart_Define        = false;
                            goto gt_Next1;
                        }

                        if (isPart_Define_Member)
                        {
                            // 「1一」を「1」に変換します。
                            SyElement masu81 = Masu_Honshogi.Query_Basho(Conv_Sy.Query_Bitfield(cell));
                            michiPart.AddElement(masu81);
                        }
                        else
                        {
                            switch (cell)
                            {
                            case "味方陣": michiPart = new SySet_Ordered <SyElement>("味方陣"); michi187.AddSupersets(michiPart); goto gt_Next1;

                            case "平野部": michiPart = new SySet_Ordered <SyElement>("平野部"); michi187.AddSupersets(michiPart); goto gt_Next1;

                            case "敵陣": michiPart = new SySet_Ordered <SyElement>("敵陣"); michi187.AddSupersets(michiPart); goto gt_Next1;

                            default: throw new Exception($"未定義のキーワードです。[{cell}]");
                            }
                        }
                    }
                    else
                    {
                        if (cell == "@DEFINE")
                        {
                            isPart_Define = true;
                            goto gt_Next1;
                        }
                    }

gt_Next1:
                    ;
                }

                Michi187Array.Items.Add(michi187);
            }

            successful = true;

gt_EndMethod:
            return(successful);
        }