OSDN Git Service

基地航空隊の防空時の偵察機補正込みの制空値を計算する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Wed, 19 Oct 2016 14:51:42 +0000 (23:51 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Wed, 19 Oct 2016 14:51:42 +0000 (23:51 +0900)
KancolleSniffer.Test/SnifferTest.cs
KancolleSniffer.Test/logs
KancolleSniffer/BaseAirCoprs.cs
KancolleSniffer/ItemInfo.cs

index 6658355..e145043 100644 (file)
@@ -428,13 +428,24 @@ namespace KancolleSniffer.Test
         public void FighterPowerOfBaseAirCorps()\r
         {\r
             var sniffer = new Sniffer();\r
-            SniffLogFile(sniffer, "fighterpower_004");\r
+            SniffLogFile(sniffer, "baseaircorps_001");\r
             PAssert.That(() => sniffer.BaseAirCorps[0].AirCorps[0].FighterPower[1] == 301);\r
             sniffer.BaseAirCorps[0].AirCorps[0].Action = 2; // 防空\r
             PAssert.That(()=>sniffer.BaseAirCorps[0].AirCorps[0].FighterPower[1] == 320);\r
         }\r
 \r
         /// <summary>\r
+        /// 基地航空隊の防空時の偵察機補正を含む制空値を計算する\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void FighterPowerWithReconBonus()\r
+        {\r
+            var sniffer = new Sniffer();\r
+            SniffLogFile(sniffer, "baseaircorps_002");\r
+            PAssert.That(() => sniffer.BaseAirCorps[0].AirCorps[2].FighterPower[0] == 349);\r
+        }\r
+\r
+        /// <summary>\r
         /// マップ索敵の判定式(33)を正しく計算する\r
         /// </summary>\r
         [TestMethod]\r
index 03cfa5f..90e2e04 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 03cfa5f6b12cc612f2ad94af0f3d9f4a5f33f0a4
+Subproject commit 90e2e0497ca3149b3f385fd41f04dd4d7bef590e
index dba0bc1..cecbf07 100644 (file)
@@ -67,21 +67,36 @@ namespace KancolleSniffer
                 }\r
             }\r
 \r
-            public int[] FighterPower => Planes.Aggregate(new[] {0, 0}, (prev, plane) =>\r
+            public int[] FighterPower\r
             {\r
-                if (plane.State != 1)\r
-                    return prev;\r
-                var slot = plane.Slot;\r
-                var intercepterBonus = Action == 2\r
-                    ? slot.Spec.AntiBomber * 2 + slot.Spec.Interception\r
-                    : slot.Spec.Interception * 1.5;\r
-                var unskilled = (slot.Spec.AntiAir + intercepterBonus + slot.FighterPowerLevelBonus) * Sqrt(plane.Count);\r
-                return new[]\r
+                get\r
                 {\r
-                    prev[0] + (int)(unskilled + slot.AlvBonus[0]),\r
-                    prev[1] + (int)(unskilled + slot.AlvBonus[1])\r
-                };\r
-            });\r
+                    var airDefenceBonus = Action == 2\r
+                            ? Planes.Select(plane => plane.Slot.Spec.AirDefenceBonus).Max()\r
+                            : 1.0;\r
+                    var fighterPower = Planes.Aggregate(new[] {0, 0}, (prev, plane) =>\r
+                    {\r
+                        if (plane.State != 1)\r
+                            return prev;\r
+                        var slot = plane.Slot;\r
+                        var intercepterBonus = Action == 2\r
+                            ? slot.Spec.AntiBomber * 2 + slot.Spec.Interception\r
+                            : slot.Spec.Interception * 1.5;\r
+                        var unskilled = (slot.Spec.AntiAir + intercepterBonus + slot.FighterPowerLevelBonus) *\r
+                                        Sqrt(plane.Count);\r
+                        return new[]\r
+                        {\r
+                            prev[0] + (int)(unskilled + slot.AlvBonus[0]),\r
+                            prev[1] + (int)(unskilled + slot.AlvBonus[1])\r
+                        };\r
+                    });\r
+                    return new[]\r
+                    {\r
+                        (int)(fighterPower[0] * airDefenceBonus),\r
+                        (int)(fighterPower[1] * airDefenceBonus)\r
+                    };\r
+                }\r
+            }\r
         }\r
 \r
         public class PlaneInfo\r
index 945d566..1f035f4 100644 (file)
@@ -167,6 +167,22 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
+        public double AirDefenceBonus\r
+        {\r
+            get\r
+            {\r
+                switch (Type)\r
+                {\r
+                    case 9:\r
+                        return LoS <= 7 ? 1.2 : 1.3;\r
+                    case 10:\r
+                    case 41:\r
+                        return LoS <= 7 ? 1.1 : LoS <= 8 ? 1.13 : 1.16;\r
+                }\r
+                return 1;\r
+            }\r
+        }\r
+\r
         public Color Color\r
         {\r
             get\r