Example #1
0
 /// <summary>
 /// 入力された文字列を大艦隊クラスに変換する
 /// </summary>
 /// <param name="inputEnemyDataText">文字列</param>
 /// <returns>大艦隊クラス</returns>
 public static Fleet ToFleet(string inputEnemyDataText)
 {
     // まずはJSONと仮定して読み込む
     try {
         // JSONをデシリアライズする
         var jsonModel = JsonConvert.DeserializeObject <JsonModel>(inputEnemyDataText);
         // jsonModelからFleetクラスを構築する
         return(jsonModel.ToFleet());
     }
     // 無理だったらenm形式と考えて読み込む
     // 1行目:陣形(単縦陣・複縦陣・輪形陣・梯形陣・単横陣。連合艦隊だと第一~第四が単横陣・複縦陣・輪形陣・単縦陣に対応)
     // 2行目:艦隊数。通常艦隊なら1、連合艦隊なら2
     // 3行目:第1艦隊。艦の名称が一番艦から順にカンマ区切りで書かれている
     // 4行目:第2艦隊(同上)
     // ※同一名の艦の候補が複数ある場合、デフォルトでは「-1」「-2」等が末尾に付いている
     catch {
         var fleet = new Fleet();
         using (var rs = new System.IO.StringReader(inputEnemyDataText)) {
             // 1行目:陣形
             string formationStr  = rs.ReadLine();
             var    formationHash = new Dictionary <string, Formation> {
                 { "単縦陣", Formation.Trail },
                 { "複縦陣", Formation.SubTrail },
                 { "輪形陣", Formation.Circle },
                 { "梯形陣", Formation.Echelon },
                 { "単横陣", Formation.Abreast },
             };
             fleet.Formation = formationHash[formationStr];
             // 2行目:艦隊数
             int fleetCount = int.Parse(rs.ReadLine());
             fleetCount = (fleetCount <= 1 ? 1 : 2);
             // 3・4行目:第1・2艦隊
             for (int i = 0; i < fleetCount; ++i)
             {
                 string getLine  = rs.ReadLine();
                 var    column   = getLine.Split(',');
                 var    tempUnit = new Unit();
                 foreach (string columnName in column)
                 {
                     var tempKammusu = new Kammusu();
                     int id          = DataBase.KammusuId(columnName);
                     if (id >= 0)
                     {
                         tempKammusu.Id        = id;
                         tempKammusu.Level     = 0;
                         tempKammusu.Luck      = -1;
                         tempKammusu.IsKammusu = false;
                         // 装備(データベースから情報を拾う)
                         foreach (int id2 in DataBase.Kammusu(id).WeaponId)
                         {
                             // 初期装備データでは、id == -1だと「それ以降は装備していない」ことを指す
                             if (id2 == -1)
                             {
                                 break;
                             }
                             var tempWeapon = new Weapon();
                             tempWeapon.Id          = id2;
                             tempWeapon.Improvement = 0;
                             tempWeapon.Proficiency = 0;
                             tempWeapon.Complete();
                             tempKammusu.Weapon.Add(tempWeapon);
                         }
                         tempKammusu.Complete();
                         tempUnit.Kammusu.Add(tempKammusu);
                     }
                 }
                 fleet.Unit.Add(tempUnit);
             }
         }
         fleet.Complete();
         return(fleet);
     }
 }
Example #2
0
        /// <summary>
        /// 入力された文字列を大艦隊クラスに変換する
        /// </summary>
        /// <param name="inputFriendDataText">文字列</param>
        /// <returns>大艦隊クラス</returns>
        public static Fleet ToFleet(string inputFriendDataText)
        {
            var fleet = new Fleet();
            // fre形式と考えて読み込む
            var kammusuList     = new List <KeyValuePair <int, int> >();
            var kammusuDataList = new List <Kammusu>();

            using (var rs = new System.IO.StringReader(inputFriendDataText)) {
                while (rs.Peek() > -1)
                {
                    try {
                        string getLine = rs.ReadLine();
                        var    column  = getLine.Split(',');
                        if (column.Count() < 19)
                        {
                            continue;
                        }
                        // 艦隊番号と艦番を読み込む
                        int ui = int.Parse(column[0]);
                        ui = (ui <= 1 ? 1 : 2);
                        int ki = int.Parse(column[1]);
                        ki = (ki <= 1 ? 1 : ki >= 6 ? 6 : ki);
                        // 艦娘部分のデータを読み込む
                        var tempKammusu = new Kammusu();
                        int id          = DataBase.KammusuId(column[2]);
                        if (id >= 0)
                        {
                            tempKammusu.Id        = id;
                            tempKammusu.Level     = int.Parse(column[3]);
                            tempKammusu.Luck      = -1;
                            tempKammusu.IsKammusu = true;
                            // 装備(データベースから情報を拾う)
                            for (int i = 0; i < 5; ++i)
                            {
                                var tempWeapon = new Weapon();
                                int id2        = DataBase.WeaponId(column[4 + i * 3]);
                                if (id2 >= 0)
                                {
                                    tempWeapon.Id          = id2;
                                    tempWeapon.Improvement = int.Parse(column[5 + i * 3]);
                                    tempWeapon.Proficiency = int.Parse(column[6 + i * 3]);
                                }
                                tempWeapon.Complete();
                                tempKammusu.Weapon.Add(tempWeapon);
                            }
                            tempKammusu.Complete();
                            kammusuList.Add(new KeyValuePair <int, int>(ui, ki));
                            kammusuDataList.Add(tempKammusu);
                        }
                    }
                    catch {
                        continue;
                    }
                }
            }
            // 読み込んだものをfleetにセットしていく
            int unitCount = kammusuList.Select(k => k.Key).Max();

            for (int ui = 0; ui < unitCount; ++ui)
            {
                fleet.Unit.Add(new Unit());
                int maxKammusuIndex = kammusuList.Where(k => k.Key == ui + 1).Select(k => k.Value).Max();
                for (int ki = 0; ki < maxKammusuIndex; ++ki)
                {
                    fleet.Unit[ui].Kammusu.Add(new Kammusu());
                }
            }
            for (int i = 0; i < kammusuList.Count; ++i)
            {
                fleet.Unit[kammusuList[i].Key - 1].Kammusu[kammusuList[i].Value - 1] = kammusuDataList[i];
            }
            fleet.Complete();
            return(fleet);
        }