/// <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); } }
// Fleetクラスを構築する public Fleet ToFleet() { // 書き込むためのインスタンスを作成する var outputFleet = new Fleet(); // 艦隊 var unitList = new List <UnitModel>(); if (Unit1 != null) { unitList.Add(Unit1); } if (Unit2 != null) { unitList.Add(Unit2); } if (Unit3 != null) { unitList.Add(Unit3); } if (Unit4 != null) { unitList.Add(Unit4); } foreach (var fleet in unitList) { var tempUnit = new Unit(); // 艦娘 var kammusuList = new List <KammusuModel>(); if (fleet.Kammusu1 != null && fleet.Kammusu1.Id > 0) { kammusuList.Add(fleet.Kammusu1); } if (fleet.Kammusu2 != null && fleet.Kammusu2.Id > 0) { kammusuList.Add(fleet.Kammusu2); } if (fleet.Kammusu3 != null && fleet.Kammusu3.Id > 0) { kammusuList.Add(fleet.Kammusu3); } if (fleet.Kammusu4 != null && fleet.Kammusu4.Id > 0) { kammusuList.Add(fleet.Kammusu4); } if (fleet.Kammusu5 != null && fleet.Kammusu5.Id > 0) { kammusuList.Add(fleet.Kammusu5); } if (fleet.Kammusu6 != null && fleet.Kammusu6.Id > 0) { kammusuList.Add(fleet.Kammusu6); } foreach (var kammusu in kammusuList) { var tempKammusu = new Kammusu(); tempKammusu.Id = kammusu.Id; tempKammusu.Level = kammusu.Level; tempKammusu.Luck = kammusu.Luck; tempKammusu.IsKammusu = true; // 装備 var weaponList = new List <WeaponModel>(); weaponList.Add(kammusu.Items.Item1); weaponList.Add(kammusu.Items.Item2); weaponList.Add(kammusu.Items.Item3); weaponList.Add(kammusu.Items.Item4); weaponList.Add(kammusu.Items.ItemX); foreach (var weapon in weaponList) { var tempWeapon = new Weapon(); if (weapon != null) { // 装備が存在する場合 tempWeapon.Id = weapon.Id; tempWeapon.Improvement = weapon.Rf; tempWeapon.Proficiency = weapon.Mas; } else { // 装備が存在しない場合 tempWeapon.Id = -1; tempWeapon.Improvement = 0; tempWeapon.Proficiency = 0; } tempWeapon.Complete(); tempKammusu.Weapon.Add(tempWeapon); } tempKammusu.Complete(); tempUnit.Kammusu.Add(tempKammusu); } outputFleet.Unit.Add(tempUnit); } outputFleet.Complete(); return(outputFleet); }
/// <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); }