Ejemplo n.º 1
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:              //名前
                    {
                        Haiyaku184Array.Name.Add(field);
                        Haiyaku184Array.KukanMasus.Add(Kh185Array.Items[haiyaku], new List <SySet <SyElement> >());
                    }
                    break;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                    // (欠番)金桂交差 退

                    // (欠番)金桂交差 踏


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

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

                    // (欠番)銀桂交差 退

                    // (欠番)銀桂交差 踏

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

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

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

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

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

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

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

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

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

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

                    // (欠番)歩打面  引

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

                    // (欠番)香打面  引

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

                    // (欠番)桂打面  引

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

                    fieldNumber++;
                }


                haiyaku++;
            }

            return(rows);
        }
Ejemplo n.º 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);
            }


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

            int haiyakuHandle = 0;
            int rowCount      = 0;

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

                //----------
                // 配役
                //----------
                Dictionary <int, Kh185> map2 = new Dictionary <int, Kh185>();
                ForcePromotionArray.haiyakuMap.Add(
                    Kh185Array.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, Kh185Array.Items[haiyakuHandle_target]);

gt_NextColumn:
                    masuHandle++;
                }


                haiyakuHandle++;

gt_NextRow:
                rowCount++;
            }

            return(rows);
        }
Ejemplo n.º 3
0
        public static List <List <string> > Load(string path)
        {
            List <List <string> > rows = Util_Csv.ReadCsv(path);



            // 最初の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 = Util_Masu.kanjiToEnum[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);
            }

            return(rows);
        }