OSDN Git Service

演習相手がレベル166以上だと獲得経験値の予測が小さくなるのを直す
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Thu, 1 Nov 2018 12:50:48 +0000 (21:50 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Thu, 1 Nov 2018 12:50:48 +0000 (21:50 +0900)
KancolleSniffer/KancolleSniffer.csproj
KancolleSniffer/Model/MiscTextInfo.cs
KancolleSniffer/Model/PracticeExp.cs [new file with mode: 0644]

index fa7c757..bf137d0 100644 (file)
@@ -63,6 +63,7 @@
     <Compile Include="Model\Inventry.cs" />\r
     <Compile Include="Model\ItemSpec.cs" />\r
     <Compile Include="Model\ItemStatus.cs" />\r
+    <Compile Include="Model\PracticeExp.cs" />\r
     <Compile Include="Model\ShipSpec.cs" />\r
     <Compile Include="Log\BattleLogProcessor.cs" />\r
     <Compile Include="View\AntiAirPanel.cs">\r
index c3db5b9..ea61e7e 100644 (file)
@@ -87,94 +87,17 @@ namespace KancolleSniffer.Model
             }\r
         }\r
 \r
-        private readonly int[] _expTable =\r
-        {\r
-            0, 100, 300, 600, 1000, 1500, 2100, 2800, 3600, 4500,\r
-            5500, 6600, 7800, 9100, 10500, 12000, 13600, 15300, 17100, 19000,\r
-            21000, 23100, 25300, 27600, 30000, 32500, 35100, 37800, 40600, 43500,\r
-            46500, 49600, 52800, 56100, 59500, 63000, 66600, 70300, 74100, 78000,\r
-            82000, 86100, 90300, 94600, 99000, 103500, 108100, 112800, 117600, 122500,\r
-            127500, 132700, 138100, 143700, 149500, 155500, 161700, 168100, 174700, 181500,\r
-            188500, 195800, 203400, 211300, 219500, 228000, 236800, 245900, 255300, 265000,\r
-            275000, 285400, 296200, 307400, 319000, 331000, 343400, 356200, 369400, 383000,\r
-            397000, 411500, 426500, 442000, 458000, 474500, 491500, 509000, 527000, 545500,\r
-            564500, 584500, 606500, 631500, 661500, 701500, 761500, 851500, 1000000, 1000000,\r
-            1010000, 1011000, 1013000, 1016000, 1020000, 1025000, 1031000, 1038000, 1046000, 1055000,\r
-            1065000, 1077000, 1091000, 1107000, 1125000, 1145000, 1168000, 1194000, 1223000, 1255000,\r
-            1290000, 1329000, 1372000, 1419000, 1470000, 1525000, 1584000, 1647000, 1714000, 1785000,\r
-            1860000, 1940000, 2025000, 2115000, 2210000, 2310000, 2415000, 2525000, 2640000, 2760000,\r
-            2887000, 3021000, 3162000, 3310000, 3465000, 3628000, 3799000, 3978000, 4165000, 4360000,\r
-            4564000, 4777000, 4999000, 5230000, 5470000, 5720000, 5780000, 5860000, 5970000, 6120000,\r
-            6320000, 6580000, 6910000, 7320000, 7820000\r
-        };\r
-\r
         public void InspectPracticeEnemyInfo(dynamic json)\r
         {\r
             Text = $"[演習情報]\r\n敵艦隊名 : {json.api_deckname}\r\n";\r
             var ships = json.api_deck.api_ships;\r
             var s1 = (int)ships[0].api_id != -1 ? (int)ships[0].api_level : 1;\r
             var s2 = (int)ships[1].api_id != -1 ? (int)ships[1].api_level : 1;\r
-            var raw = _expTable[Min(s1, _expTable.Length) - 1] / 100.0 +\r
-                      _expTable[Min(s2, _expTable.Length) - 1] / 300.0;\r
-            var exp = raw >= 500 ? 500 + (int)Sqrt(raw - 500) : (int)raw;\r
-            var bonus = 1 + TrainingCruiserBonus(_shipInfo.Fleets[0].ActualShips);\r
+            var exp = PracticeExp.GetExp(s1, s2);\r
+            var bonus = PracticeExp.TrainingCruiserBonus(_shipInfo.Fleets[0].Ships);\r
             Text += $"獲得経験値 : {(int)(exp * bonus)}\r\nS勝利 : {(int)((int)(exp * 1.2) * bonus)}";\r
         }\r
 \r
-        private double TrainingCruiserBonus(IReadOnlyList<ShipStatus> fleet)\r
-        {\r
-            if (fleet[0].Spec.IsTrainingCruiser)\r
-            {\r
-                var fsLevel = fleet[0].Level;\r
-                if (fleet.Skip(1).Any(s => s.Spec.IsTrainingCruiser))\r
-                {\r
-                    if (fsLevel < 10)\r
-                        return 0.10;\r
-                    if (fsLevel < 30)\r
-                        return 0.13;\r
-                    if (fsLevel < 60)\r
-                        return 0.16;\r
-                    if (fsLevel < 100)\r
-                        return 0.20;\r
-                    return 0.25;\r
-                }\r
-                if (fsLevel < 10)\r
-                    return 0.05;\r
-                if (fsLevel < 30)\r
-                    return 0.08;\r
-                if (fsLevel < 60)\r
-                    return 0.12;\r
-                if (fsLevel < 100)\r
-                    return 0.15;\r
-                return 0.20;\r
-            }\r
-            var tc = fleet.Count(s => s.Spec.IsTrainingCruiser);\r
-            if (tc == 0)\r
-                return 0;\r
-            var level = fleet.Where(s => s.Spec.IsTrainingCruiser).Max(s => s.Level);\r
-            if (tc == 1)\r
-            {\r
-                if (level < 10)\r
-                    return 0.03;\r
-                if (level < 30)\r
-                    return 0.05;\r
-                if (level < 60)\r
-                    return 0.07;\r
-                if (level < 100)\r
-                    return 0.10;\r
-                return 0.15;\r
-            }\r
-            if (level < 10)\r
-                return 0.04;\r
-            if (level < 30)\r
-                return 0.06;\r
-            if (level < 60)\r
-                return 0.08;\r
-            if (level < 100)\r
-                return 0.12;\r
-            return 0.175;\r
-        }\r
-\r
         public void InspectMapNext(dynamic json)\r
         {\r
             if (json.api_airsearch() && (int)json.api_airsearch.api_result != 0)\r
diff --git a/KancolleSniffer/Model/PracticeExp.cs b/KancolleSniffer/Model/PracticeExp.cs
new file mode 100644 (file)
index 0000000..e342b2c
--- /dev/null
@@ -0,0 +1,91 @@
+using System.Collections.Generic;\r
+using System.Linq;\r
+using static System.Math;\r
+\r
+namespace KancolleSniffer.Model\r
+{\r
+    public static class PracticeExp\r
+    {\r
+        private static readonly int[] ExpTable =\r
+        {\r
+            0, 100, 300, 600, 1000, 1500, 2100, 2800, 3600, 4500,\r
+            5500, 6600, 7800, 9100, 10500, 12000, 13600, 15300, 17100, 19000,\r
+            21000, 23100, 25300, 27600, 30000, 32500, 35100, 37800, 40600, 43500,\r
+            46500, 49600, 52800, 56100, 59500, 63000, 66600, 70300, 74100, 78000,\r
+            82000, 86100, 90300, 94600, 99000, 103500, 108100, 112800, 117600, 122500,\r
+            127500, 132700, 138100, 143700, 149500, 155500, 161700, 168100, 174700, 181500,\r
+            188500, 195800, 203400, 211300, 219500, 228000, 236800, 245900, 255300, 265000,\r
+            275000, 285400, 296200, 307400, 319000, 331000, 343400, 356200, 369400, 383000,\r
+            397000, 411500, 426500, 442000, 458000, 474500, 491500, 509000, 527000, 545500,\r
+            564500, 584500, 606500, 631500, 661500, 701500, 761500, 851500, 1000000, 1000000,\r
+            1010000, 1011000, 1013000, 1016000, 1020000, 1025000, 1031000, 1038000, 1046000, 1055000,\r
+            1065000, 1077000, 1091000, 1107000, 1125000, 1145000, 1168000, 1194000, 1223000, 1255000,\r
+            1290000, 1329000, 1372000, 1419000, 1470000, 1525000, 1584000, 1647000, 1714000, 1785000,\r
+            1860000, 1940000, 2025000, 2115000, 2210000, 2310000, 2415000, 2525000, 2640000, 2760000,\r
+            2887000, 3021000, 3162000, 3310000, 3465000, 3628000, 3799000, 3978000, 4165000, 4360000,\r
+            4564000, 4777000, 4999000, 5230000, 5470000, 5720000, 5780000, 5860000, 5970000, 6120000,\r
+            6320000, 6580000, 6910000, 7320000, 7820000, 7920000, 8033000, 8172000, 8350000, 8580000,\r
+            8875000, 9248000, 9705000, 10266000, 10950000\r
+        };\r
+\r
+        public static double GetExp(int ship1Lv, int ship2Lv)\r
+        {\r
+            return ExpTable[Min(ship1Lv, ExpTable.Length) - 1] / 100.0 +\r
+                      ExpTable[Min(ship2Lv, ExpTable.Length) - 1] / 300.0;\r
+        }\r
+\r
+        public static double TrainingCruiserBonus(IReadOnlyList<ShipStatus> fleet)\r
+        {\r
+            if (fleet[0].Spec.IsTrainingCruiser)\r
+            {\r
+                var fsLevel = fleet[0].Level;\r
+                if (fleet.Skip(1).Any(s => s.Spec.IsTrainingCruiser))\r
+                {\r
+                    if (fsLevel < 10)\r
+                        return 0.10;\r
+                    if (fsLevel < 30)\r
+                        return 0.13;\r
+                    if (fsLevel < 60)\r
+                        return 0.16;\r
+                    if (fsLevel < 100)\r
+                        return 0.20;\r
+                    return 0.25;\r
+                }\r
+                if (fsLevel < 10)\r
+                    return 0.05;\r
+                if (fsLevel < 30)\r
+                    return 0.08;\r
+                if (fsLevel < 60)\r
+                    return 0.12;\r
+                if (fsLevel < 100)\r
+                    return 0.15;\r
+                return 0.20;\r
+            }\r
+            var tc = fleet.Count(s => s.Spec.IsTrainingCruiser);\r
+            if (tc == 0)\r
+                return 0;\r
+            var level = fleet.Where(s => s.Spec.IsTrainingCruiser).Max(s => s.Level);\r
+            if (tc == 1)\r
+            {\r
+                if (level < 10)\r
+                    return 0.03;\r
+                if (level < 30)\r
+                    return 0.05;\r
+                if (level < 60)\r
+                    return 0.07;\r
+                if (level < 100)\r
+                    return 0.10;\r
+                return 0.15;\r
+            }\r
+            if (level < 10)\r
+                return 0.04;\r
+            if (level < 30)\r
+                return 0.06;\r
+            if (level < 60)\r
+                return 0.08;\r
+            if (level < 100)\r
+                return 0.12;\r
+            return 0.175;\r
+        }\r
+    }\r
+}
\ No newline at end of file