From: Kazuhiro Fujieda Date: Wed, 19 Oct 2016 14:51:42 +0000 (+0900) Subject: 基地航空隊の防空時の偵察機補正込みの制空値を計算する X-Git-Tag: v9.3~2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=a05740acd81cf8ff35827e49263669689c3f1d21;hp=918e7f64a0a973ae1b2f1c31f5a130dc84ea6b0e;p=kancollesniffer%2FKancolleSniffer.git 基地航空隊の防空時の偵察機補正込みの制空値を計算する --- diff --git a/KancolleSniffer.Test/SnifferTest.cs b/KancolleSniffer.Test/SnifferTest.cs index 6658355..e145043 100644 --- a/KancolleSniffer.Test/SnifferTest.cs +++ b/KancolleSniffer.Test/SnifferTest.cs @@ -428,13 +428,24 @@ namespace KancolleSniffer.Test public void FighterPowerOfBaseAirCorps() { var sniffer = new Sniffer(); - SniffLogFile(sniffer, "fighterpower_004"); + SniffLogFile(sniffer, "baseaircorps_001"); PAssert.That(() => sniffer.BaseAirCorps[0].AirCorps[0].FighterPower[1] == 301); sniffer.BaseAirCorps[0].AirCorps[0].Action = 2; // 防空 PAssert.That(()=>sniffer.BaseAirCorps[0].AirCorps[0].FighterPower[1] == 320); } /// + /// 基地航空隊の防空時の偵察機補正を含む制空値を計算する + /// + [TestMethod] + public void FighterPowerWithReconBonus() + { + var sniffer = new Sniffer(); + SniffLogFile(sniffer, "baseaircorps_002"); + PAssert.That(() => sniffer.BaseAirCorps[0].AirCorps[2].FighterPower[0] == 349); + } + + /// /// マップ索敵の判定式(33)を正しく計算する /// [TestMethod] diff --git a/KancolleSniffer.Test/logs b/KancolleSniffer.Test/logs index 03cfa5f..90e2e04 160000 --- a/KancolleSniffer.Test/logs +++ b/KancolleSniffer.Test/logs @@ -1 +1 @@ -Subproject commit 03cfa5f6b12cc612f2ad94af0f3d9f4a5f33f0a4 +Subproject commit 90e2e0497ca3149b3f385fd41f04dd4d7bef590e diff --git a/KancolleSniffer/BaseAirCoprs.cs b/KancolleSniffer/BaseAirCoprs.cs index dba0bc1..cecbf07 100644 --- a/KancolleSniffer/BaseAirCoprs.cs +++ b/KancolleSniffer/BaseAirCoprs.cs @@ -67,21 +67,36 @@ namespace KancolleSniffer } } - public int[] FighterPower => Planes.Aggregate(new[] {0, 0}, (prev, plane) => + public int[] FighterPower { - if (plane.State != 1) - return prev; - var slot = plane.Slot; - var intercepterBonus = Action == 2 - ? slot.Spec.AntiBomber * 2 + slot.Spec.Interception - : slot.Spec.Interception * 1.5; - var unskilled = (slot.Spec.AntiAir + intercepterBonus + slot.FighterPowerLevelBonus) * Sqrt(plane.Count); - return new[] + get { - prev[0] + (int)(unskilled + slot.AlvBonus[0]), - prev[1] + (int)(unskilled + slot.AlvBonus[1]) - }; - }); + var airDefenceBonus = Action == 2 + ? Planes.Select(plane => plane.Slot.Spec.AirDefenceBonus).Max() + : 1.0; + var fighterPower = Planes.Aggregate(new[] {0, 0}, (prev, plane) => + { + if (plane.State != 1) + return prev; + var slot = plane.Slot; + var intercepterBonus = Action == 2 + ? slot.Spec.AntiBomber * 2 + slot.Spec.Interception + : slot.Spec.Interception * 1.5; + var unskilled = (slot.Spec.AntiAir + intercepterBonus + slot.FighterPowerLevelBonus) * + Sqrt(plane.Count); + return new[] + { + prev[0] + (int)(unskilled + slot.AlvBonus[0]), + prev[1] + (int)(unskilled + slot.AlvBonus[1]) + }; + }); + return new[] + { + (int)(fighterPower[0] * airDefenceBonus), + (int)(fighterPower[1] * airDefenceBonus) + }; + } + } } public class PlaneInfo diff --git a/KancolleSniffer/ItemInfo.cs b/KancolleSniffer/ItemInfo.cs index 945d566..1f035f4 100644 --- a/KancolleSniffer/ItemInfo.cs +++ b/KancolleSniffer/ItemInfo.cs @@ -167,6 +167,22 @@ namespace KancolleSniffer } } + public double AirDefenceBonus + { + get + { + switch (Type) + { + case 9: + return LoS <= 7 ? 1.2 : 1.3; + case 10: + case 41: + return LoS <= 7 ? 1.1 : LoS <= 8 ? 1.13 : 1.16; + } + return 1; + } + } + public Color Color { get