From 87743ea162d2c728ba529e9ec08a1aa1df9ee561 Mon Sep 17 00:00:00 2001 From: Kazuhiro Fujieda Date: Sat, 24 Mar 2018 20:24:02 +0900 Subject: [PATCH] =?utf8?q?=E3=83=80=E3=83=A1=E3=82=B3=E3=83=B3=E3=81=AE?= =?utf8?q?=E7=99=BA=E5=8B=95=E3=81=8C=E6=88=A6=E9=97=98=E7=B5=90=E6=9E=9C?= =?utf8?q?=E3=81=AE=E8=A8=88=E7=AE=97=E3=81=AB=E5=8F=8D=E6=98=A0=E3=81=95?= =?utf8?q?=E3=82=8C=E3=81=AA=E3=81=84=E3=81=93=E3=81=A8=E3=81=8C=E3=81=82?= =?utf8?q?=E3=82=8B=E3=81=AE=E3=82=92=E7=9B=B4=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- KancolleSniffer.Test/BattleTest.cs | 15 ++++ KancolleSniffer.Test/logs | 2 +- KancolleSniffer/BattleInfo.cs | 139 +++++++++++++++++-------------------- 3 files changed, 80 insertions(+), 76 deletions(-) diff --git a/KancolleSniffer.Test/BattleTest.cs b/KancolleSniffer.Test/BattleTest.cs index e9e0c19..a778fbf 100644 --- a/KancolleSniffer.Test/BattleTest.cs +++ b/KancolleSniffer.Test/BattleTest.cs @@ -113,5 +113,20 @@ namespace KancolleSniffer.Test _battleInfo.InspectBattleResult(Data(logs[6])); PAssert.That(() => !_battleInfo.DisplayedResultRank.IsError); } + + /// + /// 機動対敵連合の雷撃戦でダメコンが発動する + /// + [TestMethod] + public void TreiggerDameconInCombinedBattle() + { + var logs = ReadAllLines("damecon_002"); + var battle = Data(logs[3]); + _shipInfo.InjectShips(battle, JsonParser.Parse(logs[0])); + _battleInfo.InspectBattle(logs[1], logs[2], battle); + _battleInfo.InspectBattle(logs[4], logs[5], Data(logs[6])); + _battleInfo.InspectBattleResult(Data(logs[9])); + PAssert.That(() => !_battleInfo.DisplayedResultRank.IsError); + } } } \ No newline at end of file diff --git a/KancolleSniffer.Test/logs b/KancolleSniffer.Test/logs index f928f55..94f121e 160000 --- a/KancolleSniffer.Test/logs +++ b/KancolleSniffer.Test/logs @@ -1 +1 @@ -Subproject commit f928f55f2d3299e981e25b57426f46b8f4c2b7a0 +Subproject commit 94f121ea3ba75db7d87910efa59d9146fb8255e0 diff --git a/KancolleSniffer/BattleInfo.cs b/KancolleSniffer/BattleInfo.cs index 8f9d53f..449a550 100644 --- a/KancolleSniffer/BattleInfo.cs +++ b/KancolleSniffer/BattleInfo.cs @@ -255,83 +255,71 @@ namespace KancolleSniffer return result; } - private enum CombatType - { - AtOnce, - ByTurn, - Support, - Aircraft, - AirBase, - Friend - } - - private class Phase - { - public string Api { get; } - public CombatType Type { get; } - public string Name { get; } - - public Phase(string api, CombatType type, string name = "") - { - Api = api; - Type = type; - Name = name; - } - } - private void CalcDamage(dynamic json) { AirBattleResults.Clear(); - var phases = new[] + foreach (KeyValuePair kv in json) { - new Phase("air_base_injection", CombatType.Aircraft, "AB噴式"), - new Phase("injection_kouku", CombatType.Aircraft, "噴式"), - new Phase("air_base_attack", CombatType.AirBase), - new Phase("n_support_info", CombatType.Support), - new Phase("n_hougeki1", CombatType.ByTurn), - new Phase("n_hougeki2", CombatType.ByTurn), - new Phase("kouku", CombatType.Aircraft, "航空戦"), - new Phase("kouku2", CombatType.Aircraft, "航空戦2"), - new Phase("support_info", CombatType.Support), - new Phase("opening_taisen", CombatType.ByTurn), - new Phase("opening_atack", CombatType.AtOnce), - new Phase("friendly_battle", CombatType.Friend), - new Phase("hougeki", CombatType.ByTurn), - new Phase("hougeki1", CombatType.ByTurn), - new Phase("hougeki2", CombatType.ByTurn), - new Phase("hougeki3", CombatType.ByTurn), - new Phase("raigeki", CombatType.AtOnce) - }; - foreach (var phase in phases) - CalcDamageByType(json, phase); - } - - private void CalcDamageByType(dynamic json, Phase phase) - { - var api = "api_" + phase.Api; - if (!json.IsDefined(api) || json[api] == null) - return; - switch (phase.Type) - { - case CombatType.AtOnce: - CalcDamageAtOnce(json[api]); - break; - case CombatType.ByTurn: - CalcDamageByTurn(json[api]); - break; - case CombatType.Support: - CalcSupportDamage(json[api]); - break; - case CombatType.Aircraft: - AddAirBattleResult(json[api], phase.Name); - CalcKoukuDamage(json[api]); - break; - case CombatType.AirBase: - CalcAirBaseAttackDamage(json[api]); - break; - case CombatType.Friend: - CalcFriendAttackDamage(json[api]); - break; + if (kv.Value == null) + continue; + switch (kv.Key) + { + case "api_air_base_injection": + AddAirBattleResult(kv.Value, "AB噴式"); + CalcKoukuDamage(kv.Value); + break; + case "api_injection_kouku": + AddAirBattleResult(kv.Value, "噴式"); + CalcKoukuDamage(kv.Value); + break; + case "api_air_base_attack": + CalcAirBaseAttackDamage(kv.Value); + break; + case "api_n_support_info": + CalcSupportDamage(kv.Value); + break; + case "api_n_hougeki1": + CalcDamageByTurn(kv.Value); + break; + case "api_n_hougeki2": + CalcDamageByTurn(kv.Value); + break; + case "api_kouku": + AddAirBattleResult(kv.Value, "航空戦"); + CalcKoukuDamage(kv.Value); + break; + case "api_kouku2": + AddAirBattleResult(kv.Value, "航空戦2"); + CalcKoukuDamage(kv.Value); + break; + case "api_support_info": + CalcSupportDamage(kv.Value); + break; + case "api_opening_taisen": + CalcDamageByTurn(kv.Value); + break; + case "api_opening_atack": + CalcDamageAtOnce(kv.Value); + break; + case "api_friendly_battle": + CalcFriendAttackDamage(kv.Value); + break; + case "api_hougeki": + CalcDamageByTurn(kv.Value); + break; + case "api_hougeki1": + CalcDamageByTurn(kv.Value); + break; + case "api_hougeki2": + CalcDamageByTurn(kv.Value); + break; + case "api_hougeki3": + CalcDamageByTurn(kv.Value); + break; + case "api_raigeki": + CalcDamageAtOnce(kv.Value); + break; + } } } @@ -692,11 +680,12 @@ namespace KancolleSniffer /// /// テスト専用 /// - public void InjectResultStatus(ShipStatus[] main, ShipStatus[] guard, ShipStatus[] enemy, ShipStatus[] enemyGuard) + public void InjectResultStatus(ShipStatus[] main, ShipStatus[] guard, ShipStatus[] enemy, + ShipStatus[] enemyGuard) { Result = new BattleResult { - Friend = new BattleResult.Combined { Main = main, Guard = guard}, + Friend = new BattleResult.Combined {Main = main, Guard = guard}, Enemy = new BattleResult.Combined {Main = enemy, Guard = enemyGuard} }; } -- 2.11.0