OSDN Git Service

勝利判定を表示する
authorKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Wed, 15 Apr 2015 11:35:21 +0000 (20:35 +0900)
committerKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Wed, 22 Apr 2015 10:42:18 +0000 (19:42 +0900)
KancolleSniffer/BattleInfo.cs
KancolleSniffer/MainForm.Designer.cs
KancolleSniffer/MainForm.cs

index 4643705..55cfcfb 100644 (file)
@@ -21,6 +21,17 @@ using System.Linq;
 \r
 namespace KancolleSniffer\r
 {\r
+    public enum BattleResultRank\r
+    {\r
+        P,\r
+        S,\r
+        A,\r
+        B,\r
+        C,\r
+        D,\r
+        E\r
+    }\r
+\r
     public class BattleInfo\r
     {\r
         private readonly ShipMaster _shipMaster;\r
@@ -28,7 +39,11 @@ namespace KancolleSniffer
         private readonly ItemInfo _itemInfo;\r
         private int _fleet;\r
         private int[] _friendHp;\r
+        private int[] _friendStartHp;\r
         private int[] _guardHp;\r
+        private int[] _guardStartHp;\r
+        private int[] _enemyHp;\r
+        private int[] _enemyStartHp;\r
         private readonly List<int> _escapingShips = new List<int>();\r
 \r
         public bool InBattle { get; set; }\r
@@ -37,6 +52,7 @@ namespace KancolleSniffer
         public bool HasDamagedShip { get; set; }\r
         public string[] DamagedShipNames { get; private set; }\r
         public int AirControlLevel { get; private set; }\r
+        public BattleResultRank ResultRank { get; private set; }\r
 \r
         public BattleInfo(ShipMaster shipMaster, ShipInfo shipInfo, ItemInfo itemInfo)\r
         {\r
@@ -50,24 +66,17 @@ namespace KancolleSniffer
             InBattle = true;\r
             Formation = FormationName(json);\r
             EnemyAirSuperiority = CalcEnemyAirSuperiority(json);\r
-            if (_friendHp != null)\r
-            {\r
-                ShowResult(false); // 昼戦の結果を夜戦のときに表示する\r
-            }\r
-            else\r
-            {\r
-                _fleet = (int)DeckId(json);\r
-                _friendHp = _shipInfo.GetShipStatuses(_fleet).Select(s => s.NowHp).ToArray();\r
-            }\r
+            AirControlLevel = CheckAirControlLevel(json);\r
+            _fleet = (int)DeckId(json);\r
+            ShowResult(false); // 昼戦の結果を夜戦のときに表示する\r
+            SetupHp(json);\r
             if (IsNightBattle(json))\r
-            {\r
-                CalcHougekiDamage(json.api_hougeki, _friendHp);\r
-            }\r
+                CalcHougekiDamage(json.api_hougeki, _friendHp, _enemyHp);\r
             else\r
-            {\r
-                AirControlLevel = CheckAirControlLevel(json);\r
                 CalcDamage(json);\r
-            }\r
+            ClearOverKill(_friendHp);\r
+            ClearOverKill(_enemyHp);\r
+            ResultRank = CalcResultRank();\r
         }\r
 \r
         private int DeckId(dynamic json)\r
@@ -79,11 +88,6 @@ namespace KancolleSniffer
             return (int)json.api_deck_id - 1;\r
         }\r
 \r
-        private bool IsNightBattle(dynamic json)\r
-        {\r
-            return json.api_hougeki();\r
-        }\r
-\r
         private string FormationName(dynamic json)\r
         {\r
             if (!json.api_formation()) // 演習の夜戦\r
@@ -102,8 +106,35 @@ namespace KancolleSniffer
             return "";\r
         }\r
 \r
+        private void SetupHp(dynamic json)\r
+        {\r
+            if (_friendHp != null)\r
+                return;\r
+            var nowhps = (int[])json.api_nowhps;\r
+            _friendHp = nowhps.Skip(1).Take(6).TakeWhile(hp => hp != -1).ToArray();\r
+            _friendStartHp = (int[])_friendHp.Clone();\r
+            _enemyHp = nowhps.Skip(7).TakeWhile(hp => hp != -1).ToArray();\r
+            _enemyStartHp = (int[])_enemyHp.Clone();\r
+            if (json.api_nowhps_combined())\r
+            {\r
+                _guardHp = ((int[])json.api_nowhps_combined).Skip(1).ToArray();\r
+                _guardStartHp = (int[])_guardHp.Clone();\r
+            }\r
+            else\r
+            {\r
+                _guardHp = _guardStartHp = new int[0];\r
+            }\r
+        }\r
+\r
+        private void CleanupHp()\r
+        {\r
+            _friendHp = null;\r
+        }\r
+\r
         private int CheckAirControlLevel(dynamic json)\r
         {\r
+            if (!json.api_kouku())\r
+                return -1;\r
             var stage1 = json.api_kouku.api_stage1;\r
             if (stage1.api_f_count == 0 && stage1.api_e_count == 0)\r
                 return -1;\r
@@ -123,53 +154,77 @@ namespace KancolleSniffer
         private void CalcDamage(dynamic json)\r
         {\r
             if (json.api_kouku.api_stage3 != null)\r
-                CalcSimpleDamage(json.api_kouku.api_stage3.api_fdam, _friendHp);\r
+                CalcSimpleDamage(json.api_kouku.api_stage3, _friendHp, _enemyHp);\r
             if (json.api_kouku2() && json.api_kouku2.api_stage3 != null) // 航空戦2回目\r
-                CalcSimpleDamage(json.api_kouku2.api_stage3.api_fdam, _friendHp);\r
+                CalcSimpleDamage(json.api_kouku2.api_stage3, _friendHp, _enemyHp);\r
             if (!json.api_opening_atack()) // 航空戦のみ\r
                 return;\r
             if (json.api_opening_atack != null)\r
-                CalcSimpleDamage(json.api_opening_atack.api_fdam, _friendHp);\r
+                CalcSimpleDamage(json.api_opening_atack, _friendHp, _enemyHp);\r
             if (json.api_hougeki1 != null)\r
-                CalcHougekiDamage(json.api_hougeki1, _friendHp);\r
+                CalcHougekiDamage(json.api_hougeki1, _friendHp, _enemyHp);\r
             if (json.api_hougeki2 != null)\r
-                CalcHougekiDamage(json.api_hougeki2, _friendHp);\r
+                CalcHougekiDamage(json.api_hougeki2, _friendHp, _enemyHp);\r
             if (json.api_raigeki != null)\r
-                CalcSimpleDamage(json.api_raigeki.api_fdam, _friendHp);\r
+                CalcSimpleDamage(json.api_raigeki, _friendHp, _enemyHp);\r
+        }\r
+\r
+        private bool IsNightBattle(dynamic json)\r
+        {\r
+            return json.api_hougeki();\r
+        }\r
+\r
+        private void CalcSimpleDamage(dynamic json, int[] friend, int[] enemy)\r
+        {\r
+            CalcSimpleDamage(json.api_fdam, friend);\r
+            CalcSimpleDamage(json.api_edam, enemy);\r
         }\r
 \r
         private void CalcSimpleDamage(dynamic rawDamage, int[] result)\r
         {\r
             var damage = (int[])rawDamage;\r
-            for (var i = 0; i < _friendHp.Length; i++)\r
+            for (var i = 0; i < result.Length; i++)\r
                 result[i] -= damage[i + 1];\r
         }\r
 \r
-        private void CalcHougekiDamage(dynamic hougeki, int[] friend)\r
+        private void CalcHougekiDamage(dynamic hougeki, int[] friend, int[] enemy)\r
         {\r
             var targets = ((dynamic[])hougeki.api_df_list).Skip(1).SelectMany(x => (int[])x);\r
             var damages = ((dynamic[])hougeki.api_damage).Skip(1).SelectMany(x => (double[])x);\r
             foreach (var hit in targets.Zip(damages, (t, d) => new {t, d}))\r
             {\r
-                if (1 <= hit.t && hit.t <= friend.Length)\r
+                if (hit.t == -1)\r
+                    continue;\r
+                if (hit.t <= 6)\r
                     friend[hit.t - 1] -= (int)hit.d;\r
+                else\r
+                    enemy[(hit.t - 1) % 6] -= (int)hit.d;\r
             }\r
         }\r
 \r
+        private void ClearOverKill(int[] result)\r
+        {\r
+            for (var i = 0; i < result.Length; i++)\r
+                if (result[i] < 0)\r
+                    result[i] = 0;\r
+        }\r
+\r
         public void InspectBattleResult(dynamic json)\r
         {\r
             ShowResult();\r
-            _friendHp = null;\r
+            CleanupHp();\r
         }\r
 \r
         public void InspectPracticeResult(dynamic json)\r
         {\r
             ShowResult(false);\r
-            _friendHp = null;\r
+            CleanupHp();\r
         }\r
 \r
         private void ShowResult(bool warnDamagedShip = true)\r
         {\r
+            if (_friendHp == null)\r
+                return;\r
             var ships = _shipInfo.GetShipStatuses(_fleet);\r
             foreach (var e in ships.Zip(_friendHp, (ship, now) => new {ship, now}))\r
                 e.ship.NowHp = e.now;\r
@@ -189,35 +244,32 @@ namespace KancolleSniffer
             InBattle = true;\r
             Formation = FormationName(json);\r
             EnemyAirSuperiority = CalcEnemyAirSuperiority(json);\r
-            if (_friendHp != null)\r
-            {\r
-                ShowResultCombined(false);\r
-            }\r
-            else\r
-            {\r
-                _fleet = 10;\r
-                _friendHp = _shipInfo.GetShipStatuses(0).Select(s => s.NowHp).ToArray();\r
-                _guardHp = _shipInfo.GetShipStatuses(1).Select(s => s.NowHp).ToArray();\r
-            }\r
+            AirControlLevel = CheckAirControlLevel(json);\r
+            _fleet = 10;\r
+            ShowResultCombined(false);\r
+            SetupHp(json);\r
             if (IsNightBattle(json))\r
             {\r
-                CalcHougekiDamage(json.api_hougeki, _guardHp);\r
+                CalcHougekiDamage(json.api_hougeki, _guardHp, _enemyHp);\r
             }\r
             else\r
             {\r
-                AirControlLevel = CheckAirControlLevel(json);\r
                 if (surfaceFleet)\r
                     CalcDamageCombinedFleetSurface(json);\r
                 else\r
                     CalcDamageCombinedFleetAir(json);\r
             }\r
+            ClearOverKill(_friendHp);\r
+            ClearOverKill(_guardHp);\r
+            ClearOverKill(_enemyHp);\r
+            ResultRank = CalcResultRank();\r
         }\r
 \r
         public void InspectCombinedBattleResult(dynamic json)\r
         {\r
             _escapingShips.Clear();\r
             ShowResultCombined();\r
-            _friendHp = null;\r
+            CleanupHp();\r
             if ((int)json.api_escape_flag == 0)\r
                 return;\r
             var damaged = (int)json.api_escape.api_escape_idx[0] - 1;\r
@@ -228,6 +280,8 @@ namespace KancolleSniffer
 \r
         private void ShowResultCombined(bool warnDamagedShip = true)\r
         {\r
+            if (_friendHp == null)\r
+                return;\r
             var ships = _shipInfo.GetShipStatuses(0).Concat(_shipInfo.GetShipStatuses(1)).ToArray();\r
             foreach (var e in ships.Zip(_friendHp.Concat(_guardHp), (ship, now) => new {ship, now}))\r
                 e.ship.NowHp = e.now;\r
@@ -245,14 +299,14 @@ namespace KancolleSniffer
         {\r
             var kouku = json.api_kouku;\r
             if (kouku.api_stage3 != null)\r
-                CalcSimpleDamage(kouku.api_stage3.api_fdam, _friendHp);\r
+                CalcSimpleDamage(kouku.api_stage3, _friendHp, _enemyHp);\r
             if (kouku.api_stage3_combined != null)\r
                 CalcSimpleDamage(kouku.api_stage3_combined.api_fdam, _guardHp);\r
             if (json.api_kouku2()) // 航空戦2回目\r
             {\r
                 kouku = json.api_kouku2;\r
                 if (kouku.api_stage3 != null)\r
-                    CalcSimpleDamage(kouku.api_stage3.api_fdam, _friendHp);\r
+                    CalcSimpleDamage(kouku.api_stage3, _friendHp, _enemyHp);\r
                 if (kouku.api_stage3_combined != null)\r
                     CalcSimpleDamage(kouku.api_stage3_combined.api_fdam, _guardHp);\r
             }\r
@@ -261,32 +315,116 @@ namespace KancolleSniffer
             if (json.api_opening_atack != null)\r
                 CalcSimpleDamage(json.api_opening_atack.api_fdam, _guardHp);\r
             if (json.api_hougeki1 != null)\r
-                CalcHougekiDamage(json.api_hougeki1, _guardHp);\r
+                CalcHougekiDamage(json.api_hougeki1, _guardHp, _enemyHp);\r
             if (json.api_hougeki2() && json.api_hougeki2 != null)\r
-                CalcHougekiDamage(json.api_hougeki2, _friendHp);\r
+                CalcHougekiDamage(json.api_hougeki2, _friendHp, _enemyHp);\r
             if (json.api_hougeki3() && json.api_hougeki3 != null)\r
-                CalcHougekiDamage(json.api_hougeki3, _friendHp);\r
+                CalcHougekiDamage(json.api_hougeki3, _friendHp, _enemyHp);\r
             if (json.api_raigeki() && json.api_raigeki != null)\r
-                CalcSimpleDamage(json.api_raigeki.api_fdam, _guardHp);\r
+                CalcSimpleDamage(json.api_raigeki, _guardHp, _enemyHp);\r
         }\r
 \r
         private void CalcDamageCombinedFleetSurface(dynamic json)\r
         {\r
             var kouku = json.api_kouku;\r
             if (kouku.api_stage3 != null)\r
-                CalcSimpleDamage(kouku.api_stage3.api_fdam, _friendHp);\r
+                CalcSimpleDamage(kouku.api_stage3, _friendHp, _enemyHp);\r
             if (kouku.api_stage3_combined != null)\r
                 CalcSimpleDamage(kouku.api_stage3_combined.api_fdam, _guardHp);\r
             if (json.api_opening_atack != null)\r
-                CalcSimpleDamage(json.api_opening_atack.api_fdam, _guardHp);\r
+                CalcSimpleDamage(json.api_opening_atack, _guardHp, _enemyHp);\r
             if (json.api_hougeki1 != null)\r
-                CalcHougekiDamage(json.api_hougeki1, _friendHp);\r
+                CalcHougekiDamage(json.api_hougeki1, _friendHp, _enemyHp);\r
             if (json.api_hougeki2() && json.api_hougeki2 != null)\r
-                CalcHougekiDamage(json.api_hougeki2, _friendHp);\r
+                CalcHougekiDamage(json.api_hougeki2, _friendHp, _enemyHp);\r
             if (json.api_hougeki3() && json.api_hougeki3 != null)\r
-                CalcHougekiDamage(json.api_hougeki3, _guardHp);\r
+                CalcHougekiDamage(json.api_hougeki3, _guardHp, _enemyHp);\r
             if (json.api_raigeki() && json.api_raigeki != null)\r
-                CalcSimpleDamage(json.api_raigeki.api_fdam, _guardHp);\r
+                CalcSimpleDamage(json.api_raigeki, _guardHp, _enemyHp);\r
+        }\r
+\r
+        // 以下のコードは航海日誌拡張版の以下のファイルのcalcResultRankを移植したもの\r
+        // https://github.com/nekopanda/logbook/blob/94ceca4be6d4ce79a8759d1ee747fb9827c08edc/main/logbook/dto/BattleExDto.java\r
+        //\r
+        // The MIT License (MIT)\r
+        //\r
+        // Copyright (c) 2013-2014 sanae_hirotaka\r
+        //\r
+        // Permission is hereby granted, free of charge, to any person obtaining a copy\r
+        // of this software and associated documentation files (the "Software"), to deal\r
+        // in the Software without restriction, including without limitation the rights\r
+        // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+        // copies of the Software, and to permit persons to whom the Software is\r
+        // furnished to do so, subject to the following conditions:\r
+        //\r
+        // The above copyright notice and this permission notice shall be included in\r
+        // all copies or substantial portions of the Software.\r
+        //\r
+        // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+        // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+        // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+        // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+        // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+        // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+        // THE SOFTWARE.\r
+        //\r
+        private BattleResultRank CalcResultRank()\r
+        {\r
+            var combinedHp = _friendHp.Concat(_guardHp).ToArray();\r
+            var combinedStartHp = _friendStartHp.Concat(_guardStartHp).ToArray();\r
+            // 戦闘後に残っている艦数\r
+            var friendNowShips = combinedHp.Count(hp => hp > 0);\r
+            var enemyNowShips = _enemyHp.Count(hp => hp > 0);\r
+            // 総ダメージ\r
+            var friendGauge = combinedStartHp.Sum() - combinedHp.Sum();\r
+            var enemyGauge = _enemyStartHp.Sum() - _enemyHp.Sum();\r
+            // 轟沈・撃沈数\r
+            var friendSunk = combinedHp.Count(hp => hp == 0);\r
+            var enemySunk = _enemyHp.Count(hp => hp == 0);\r
+\r
+            var friendGaugeRate = Math.Floor((double)friendGauge / combinedStartHp.Sum() * 100);\r
+            var enemyGaugeRate = Math.Floor((double)enemyGauge / _enemyStartHp.Sum() * 100);\r
+            var equalOrMore = enemyGaugeRate > (0.9 * friendGaugeRate);\r
+            var superior = enemyGaugeRate > 0 && enemyGaugeRate > (2.5 * friendGaugeRate);\r
+\r
+            if (friendSunk == 0)\r
+            {\r
+                if (enemyNowShips == 0)\r
+                {\r
+                    if (friendGauge == 0)\r
+                        return BattleResultRank.P;\r
+                    return BattleResultRank.S;\r
+                }\r
+                if (_enemyHp.Length == 6)\r
+                {\r
+                    if (enemySunk >= 4)\r
+                        return BattleResultRank.A;\r
+                }\r
+                else if (enemySunk * 2 >= _enemyHp.Length)\r
+                {\r
+                    return BattleResultRank.A;\r
+                }\r
+                if (_enemyHp[0] == 0)\r
+                    return BattleResultRank.B;\r
+                if (superior)\r
+                    return BattleResultRank.B;\r
+            }\r
+            else\r
+            {\r
+                if (enemyNowShips == 0)\r
+                    return BattleResultRank.B;\r
+                if (_enemyHp[0] == 0 && friendSunk < enemySunk)\r
+                    return BattleResultRank.B;\r
+                if (superior)\r
+                    return BattleResultRank.B;\r
+                if (_enemyHp[0] == 0)\r
+                    return BattleResultRank.C;\r
+            }\r
+            if (enemyGauge > 0 && equalOrMore)\r
+                return BattleResultRank.C;\r
+            if (friendSunk > 0 && friendNowShips == 1)\r
+                return BattleResultRank.E;\r
+            return BattleResultRank.D;\r
         }\r
     }\r
 }
\ No newline at end of file
index 2f18103..b2715a2 100644 (file)
@@ -64,7 +64,7 @@ namespace KancolleSniffer
             this.labelEnemyAirSuperiority = new System.Windows.Forms.Label();\r
             this.label30 = new System.Windows.Forms.Label();\r
             this.labelFormation = new System.Windows.Forms.Label();\r
-            this.label29 = new System.Windows.Forms.Label();\r
+            this.labelResultRank = new System.Windows.Forms.Label();\r
             this.labelLoS = new System.Windows.Forms.Label();\r
             this.label19 = new System.Windows.Forms.Label();\r
             this.labelAirSuperiority = new System.Windows.Forms.Label();\r
@@ -107,6 +107,12 @@ namespace KancolleSniffer
             this.label13 = new System.Windows.Forms.Label();\r
             this.timerMain = new System.Windows.Forms.Timer(this.components);\r
             this.panel3 = new System.Windows.Forms.Panel();\r
+            this.labelQuestColor6 = new System.Windows.Forms.Label();\r
+            this.labelQuestColor5 = new System.Windows.Forms.Label();\r
+            this.labelQuestColor4 = new System.Windows.Forms.Label();\r
+            this.labelQuestColor3 = new System.Windows.Forms.Label();\r
+            this.labelQuestColor2 = new System.Windows.Forms.Label();\r
+            this.labelQuestColor1 = new System.Windows.Forms.Label();\r
             this.labelProgress6 = new System.Windows.Forms.Label();\r
             this.labelQuest6 = new System.Windows.Forms.Label();\r
             this.labelProgress5 = new System.Windows.Forms.Label();\r
@@ -154,12 +160,6 @@ namespace KancolleSniffer
             this.labelBullSq4 = new System.Windows.Forms.Label();\r
             this.labelFuelSq4 = new System.Windows.Forms.Label();\r
             this.toolTipAchievement = new System.Windows.Forms.ToolTip(this.components);\r
-            this.labelQuestColor1 = new System.Windows.Forms.Label();\r
-            this.labelQuestColor2 = new System.Windows.Forms.Label();\r
-            this.labelQuestColor3 = new System.Windows.Forms.Label();\r
-            this.labelQuestColor4 = new System.Windows.Forms.Label();\r
-            this.labelQuestColor5 = new System.Windows.Forms.Label();\r
-            this.labelQuestColor6 = new System.Windows.Forms.Label();\r
             this.panelHeadquarters.SuspendLayout();\r
             this.panelShipInfo.SuspendLayout();\r
             this.panelBattleInfo.SuspendLayout();\r
@@ -312,7 +312,7 @@ namespace KancolleSniffer
             this.panelBattleInfo.Controls.Add(this.labelEnemyAirSuperiority);\r
             this.panelBattleInfo.Controls.Add(this.label30);\r
             this.panelBattleInfo.Controls.Add(this.labelFormation);\r
-            this.panelBattleInfo.Controls.Add(this.label29);\r
+            this.panelBattleInfo.Controls.Add(this.labelResultRank);\r
             this.panelBattleInfo.Location = new System.Drawing.Point(59, 116);\r
             this.panelBattleInfo.Name = "panelBattleInfo";\r
             this.panelBattleInfo.Size = new System.Drawing.Size(157, 14);\r
@@ -343,14 +343,13 @@ namespace KancolleSniffer
             this.labelFormation.Size = new System.Drawing.Size(48, 12);\r
             this.labelFormation.TabIndex = 1;\r
             // \r
-            // label29\r
+            // labelResultRank\r
             // \r
-            this.label29.AutoSize = true;\r
-            this.label29.Location = new System.Drawing.Point(1, 1);\r
-            this.label29.Name = "label29";\r
-            this.label29.Size = new System.Drawing.Size(41, 12);\r
-            this.label29.TabIndex = 0;\r
-            this.label29.Text = "交戦形";\r
+            this.labelResultRank.Location = new System.Drawing.Point(1, 1);\r
+            this.labelResultRank.Name = "labelResultRank";\r
+            this.labelResultRank.Size = new System.Drawing.Size(41, 12);\r
+            this.labelResultRank.TabIndex = 0;\r
+            this.labelResultRank.Text = "判定";\r
             // \r
             // labelLoS\r
             // \r
@@ -760,6 +759,48 @@ namespace KancolleSniffer
             this.panel3.Size = new System.Drawing.Size(220, 94);\r
             this.panel3.TabIndex = 13;\r
             // \r
+            // labelQuestColor6\r
+            // \r
+            this.labelQuestColor6.Location = new System.Drawing.Point(2, 79);\r
+            this.labelQuestColor6.Name = "labelQuestColor6";\r
+            this.labelQuestColor6.Size = new System.Drawing.Size(4, 10);\r
+            this.labelQuestColor6.TabIndex = 48;\r
+            // \r
+            // labelQuestColor5\r
+            // \r
+            this.labelQuestColor5.Location = new System.Drawing.Point(2, 64);\r
+            this.labelQuestColor5.Name = "labelQuestColor5";\r
+            this.labelQuestColor5.Size = new System.Drawing.Size(4, 10);\r
+            this.labelQuestColor5.TabIndex = 47;\r
+            // \r
+            // labelQuestColor4\r
+            // \r
+            this.labelQuestColor4.Location = new System.Drawing.Point(2, 49);\r
+            this.labelQuestColor4.Name = "labelQuestColor4";\r
+            this.labelQuestColor4.Size = new System.Drawing.Size(4, 10);\r
+            this.labelQuestColor4.TabIndex = 46;\r
+            // \r
+            // labelQuestColor3\r
+            // \r
+            this.labelQuestColor3.Location = new System.Drawing.Point(2, 34);\r
+            this.labelQuestColor3.Name = "labelQuestColor3";\r
+            this.labelQuestColor3.Size = new System.Drawing.Size(4, 10);\r
+            this.labelQuestColor3.TabIndex = 45;\r
+            // \r
+            // labelQuestColor2\r
+            // \r
+            this.labelQuestColor2.Location = new System.Drawing.Point(2, 19);\r
+            this.labelQuestColor2.Name = "labelQuestColor2";\r
+            this.labelQuestColor2.Size = new System.Drawing.Size(4, 10);\r
+            this.labelQuestColor2.TabIndex = 44;\r
+            // \r
+            // labelQuestColor1\r
+            // \r
+            this.labelQuestColor1.Location = new System.Drawing.Point(2, 4);\r
+            this.labelQuestColor1.Name = "labelQuestColor1";\r
+            this.labelQuestColor1.Size = new System.Drawing.Size(4, 10);\r
+            this.labelQuestColor1.TabIndex = 43;\r
+            // \r
             // labelProgress6\r
             // \r
             this.labelProgress6.Location = new System.Drawing.Point(194, 78);\r
@@ -1160,48 +1201,6 @@ namespace KancolleSniffer
             // \r
             this.toolTipAchievement.ShowAlways = true;\r
             // \r
-            // labelQuestColor1\r
-            // \r
-            this.labelQuestColor1.Location = new System.Drawing.Point(2, 4);\r
-            this.labelQuestColor1.Name = "labelQuestColor1";\r
-            this.labelQuestColor1.Size = new System.Drawing.Size(4, 10);\r
-            this.labelQuestColor1.TabIndex = 43;\r
-            // \r
-            // labelQuestColor2\r
-            // \r
-            this.labelQuestColor2.Location = new System.Drawing.Point(2, 19);\r
-            this.labelQuestColor2.Name = "labelQuestColor2";\r
-            this.labelQuestColor2.Size = new System.Drawing.Size(4, 10);\r
-            this.labelQuestColor2.TabIndex = 44;\r
-            // \r
-            // labelQuestColor3\r
-            // \r
-            this.labelQuestColor3.Location = new System.Drawing.Point(2, 34);\r
-            this.labelQuestColor3.Name = "labelQuestColor3";\r
-            this.labelQuestColor3.Size = new System.Drawing.Size(4, 10);\r
-            this.labelQuestColor3.TabIndex = 45;\r
-            // \r
-            // labelQuestColor4\r
-            // \r
-            this.labelQuestColor4.Location = new System.Drawing.Point(2, 49);\r
-            this.labelQuestColor4.Name = "labelQuestColor4";\r
-            this.labelQuestColor4.Size = new System.Drawing.Size(4, 10);\r
-            this.labelQuestColor4.TabIndex = 46;\r
-            // \r
-            // labelQuestColor5\r
-            // \r
-            this.labelQuestColor5.Location = new System.Drawing.Point(2, 64);\r
-            this.labelQuestColor5.Name = "labelQuestColor5";\r
-            this.labelQuestColor5.Size = new System.Drawing.Size(4, 10);\r
-            this.labelQuestColor5.TabIndex = 47;\r
-            // \r
-            // labelQuestColor6\r
-            // \r
-            this.labelQuestColor6.Location = new System.Drawing.Point(2, 79);\r
-            this.labelQuestColor6.Name = "labelQuestColor6";\r
-            this.labelQuestColor6.Size = new System.Drawing.Size(4, 10);\r
-            this.labelQuestColor6.TabIndex = 48;\r
-            // \r
             // MainForm\r
             // \r
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\r
@@ -1365,7 +1364,7 @@ namespace KancolleSniffer
         private System.Windows.Forms.Label labelEnemyAirSuperiority;\r
         private System.Windows.Forms.Label label30;\r
         private System.Windows.Forms.Label labelFormation;\r
-        private System.Windows.Forms.Label label29;\r
+        private System.Windows.Forms.Label labelResultRank;\r
         private System.Windows.Forms.ImageList imageListFuelSq;\r
         private System.Windows.Forms.Label labelFuelSq1;\r
         private System.Windows.Forms.ImageList imageListBullSq;\r
index 1ed4954..6fa852f 100644 (file)
@@ -421,22 +421,31 @@ namespace KancolleSniffer
             labelFormation.Text = "";\r
             labelEnemyAirSuperiority.Text = "";\r
             labelAirSuperiority.ForeColor = DefaultForeColor;\r
+            labelResultRank.Text = "判定";\r
             panelBattleInfo.Visible = _sniffer.Battle.InBattle;\r
             if (!_sniffer.Battle.InBattle)\r
                 return;\r
             panelBattleInfo.BringToFront();\r
-            var color = new[] {DefaultForeColor, DefaultForeColor, Color.Blue, Color.Green, Color.Orange, Color.Red};\r
             var t = new Timer {Interval = 2000}; // 艦隊が表示されるまで遅延させる\r
             t.Tick += (sender, args) =>\r
             {\r
-                labelFormation.Text = _sniffer.Battle.Formation;\r
-                labelEnemyAirSuperiority.Text = _sniffer.Battle.EnemyAirSuperiority.ToString("D");\r
-                labelAirSuperiority.ForeColor = color[_sniffer.Battle.AirControlLevel + 1];\r
+                ShowBattleInfo();\r
                 t.Stop();\r
             };\r
             t.Start();\r
         }\r
 \r
+        private void ShowBattleInfo()\r
+        {\r
+            var battle = _sniffer.Battle;\r
+            var color = new[] { DefaultForeColor, DefaultForeColor, Color.Blue, Color.Green, Color.Orange, Color.Red };\r
+            labelFormation.Text = battle.Formation;\r
+            labelEnemyAirSuperiority.Text = battle.EnemyAirSuperiority.ToString("D");\r
+            labelAirSuperiority.ForeColor = color[battle.AirControlLevel + 1];\r
+            var result = new[] { "完全S", "勝利S", "勝利A", "勝利B", "敗北C", "敗北D", "敗北E" };\r
+            labelResultRank.Text = result[(int)battle.ResultRank];\r
+        }\r
+\r
         private void UpdateChargeInfo()\r
         {\r
             var fuelSq = new[] {labelFuelSq1, labelFuelSq2, labelFuelSq3, labelFuelSq4};\r
@@ -572,7 +581,6 @@ namespace KancolleSniffer
             var quests = _sniffer.Quests;\r
             for (var i = 0; i < name.Length; i++)\r
             {\r
-\r
                 if (i < quests.Length)\r
                 {\r
                     category[i].BackColor = color[quests[i].Category - 1];\r