hkuno9000 / KanColle-YPS

艦これ余所見プレイ支援 Google Chrome拡張
https://hkuno9000.github.io/KanColle-YPS
17 stars 5 forks source link

勝敗判定条件 #61

Closed hkuno9000 closed 4 years ago

hkuno9000 commented 8 years ago

KanColle-YPS は、 wiki情報の勝利条件を参考にして、戦闘データの自ダメージと敵ダメージから、勝敗判定を推定して戦況画面の「勝敗推定」欄に表示している。その判定式は次の通りである。 wiki情報とは小数点丸めやC/D/E判定が異なるが、Issue #10, #20, #24 の検証例を正しく判定できており、その後のプレイでも判定ミスは発生していない。 なお、空襲戦の勝敗判定条件は Issue #50 で別途扱う。

勝敗判定条件 2018/5/11版(v1.8.2pre)

艦隊HP値 ::= 昼戦開始時点の各艦HP値の合計 ※艦の最大HP値ではない. 艦隊ダメージ値 ::= 昼戦開始時点から戦闘終了までの各艦HP減少値の合計 艦隊ダメージ率 ::= floor(100 * 艦隊ダメージ値 / 艦隊HP値) ※少数点以下切り捨ての百分率値

var f_damage_percent = Math.floor(100 * f_damage_total / f_hp_total); // 自艦隊ダメージ百分率. 小数点以下切り捨て.
var e_damage_percent = Math.floor(100 * e_damage_total / e_hp_total); // 敵艦隊ダメージ百分率. 小数点以下切り捨て.
if (e_count == e_lost_count && f_lost_count == 0) {
    return (f_damage_total == 0) ? '完S' : 'S';    // 1%未満の微ダメージでも、"完S"にはならない.
}
if (e_lost_count > 0 && e_lost_count >= Math.floor(e_count * 2 / 3) && f_lost_count == 0) { // 確定.
    return 'A';
}
if (e_leader_lost && f_lost_count < e_lost_count) { // 検証中!!! 敵旗艦撃沈かつ、自轟沈数より敵撃沈数が多いならば、B勝利.
    return 'B';
}
if (f_count == 1 && (f_hp_total - f_damage_total) / f_maxhp_total <= 0.25) { // 検証中!!! 自艦隊単艦かつ旗艦大破ならば、D敗北.
    ///@see https://github.com/andanteyk/ElectronicObserver/commit/80fc664e3d5c4223dd585882a726ecc719d15be8
    return 'D';
}
if (10 * e_damage_percent > 25 * f_damage_percent) { // 確定. 戦果ゲージ比が2.5より大きいならば、B勝利.
    return 'B';
}
if (10 * e_damage_percent > 9 * f_damage_percent) { // 確定. 戦果ゲージ比が0.9より大きいならば、C敗北.
    return 'C';
}
if (e_leader_lost || f_lost_count == 0 || f_count - f_lost_count > 1) { // 検証中!!! 敵旗艦撃沈、または自轟沈なし、または自艦隊に旗艦以外の生存艦ありならば、D敗北.
    return 'D';
}
return 'E'; // 検証中!!! 上記以外、つまり敵旗艦生存かつ自艦隊旗艦以外轟沈ならば、E敗北.

戦闘中にダメコン発動した場合のHP値

修理発動後は、夜戦終了まで轟沈保護となり、攻撃を受けてもHP1以下にはならない。

依頼

判定ミスは、KanColle-YPSの「記録」欄に蓄積されます。 MISS判定が見つかれば、それをコメントとして貼ってください。

hkuno9000 commented 8 years ago

演習相手:x, f_damage:101/335(30%)[0/6]357, e_damage:100/365(27%)[0/6], rate:0.9, rank:D 戦果ゲージ比 0.9000 でD判定確認。これで、C/D判定閾値が確定した。

hkuno9000 commented 8 years ago

A勝利: 敵艦隊6隻かつ、4隻以上撃沈かつ、自轟沈なし A勝利: 敵艦隊5隻以下かつ、半数以上撃沈かつ、自轟沈なし この条件を素直にコーディングしたのが下記の現状コード

if (e_lost_count >= (e_count == 6 ? 4 : e_count/2) && f_lost_count == 0) {
    return 'A';
}

wiki情報の下記コメント

A勝利条件が、「半数以上撃沈」となっていますが、「敵2隻以上で、2/3以上(小数点以下切り捨て)撃沈」と考えることもできます。 -- 2016-03-15 (火) 21:03:48

をコード化すると下記になる。こちらでも同じ結果が得られる。

if (e_lost_count >= Math.floor(e_count * 2 / 3) && f_lost_count == 0) {
    return 'A';
}

艦これサーバ内の勝敗判定はたぶんコレだろう。 ダメージ率も小数点以下切り捨てで判定が一致することをふまえると、サーバの演算処理は小数点以下切り捨てを行う整数演算だと思われる。

hkuno9000 commented 8 years ago

D/E判定ミス発生 自艦隊2/3轟沈し敵はダメージゼロだがD敗北となった。 E敗北条件を 「 自艦隊2/3隻(少数切り捨て)以上轟沈かつ、敵旗艦生存」から 「自艦隊旗艦以外轟沈かつ、敵旗艦生存」に変更して検証する

D敗北: 自艦隊6隻中轟沈4

サーモン海域北方 battle1

5-5-2 単縦/T字不利/敵複縦 索敵: なし 制空権喪失 戦闘被害:f_damage:45/47(95%)[4/6]100, e_damage:0/504(0%)[0/6], api:/api_req_sortie/battle, rate:0 勝敗推定:E 戦闘詳報 + friend damage E敗北検証艦隊 1(島風Lv18). 1/19(-15):大破!!! 2(朧Lv3). 0/15(-47):撃沈--- 3(白雪Lv3). 0/15(-136):撃沈--- 4(睦月Lv2). 0/13(-79):撃沈--- 5(望月Lv2). 0/13(-35):撃沈--- 6(多摩Lv1). 1/25(-24):大破!!! 被撃墜数: 0 enemy damage 1(戦艦レ級Lv1). 180/180:* + 2(軽母ヌ級flagshipLv1). 84/84:* + 3(軽母ヌ級flagshipLv1). 84/84:* + 4(重巡リ級eliteLv1). 60/60:* + 5(軽巡ヘ級flagshipLv1). 57/57:* + 6(駆逐イ級flagshipLv1). 39/39:* + battle result 敵前衛警戒部隊(0/6):D 勝敗推定ミス f_damage:45/47(95%)[4/6]100, e_damage:0/504(0%)[0/6], api:/api_req_sortie/battle, rate:0, f_lost:4, e_lost:0, rank:D/E MISS!! MVP: 島風Lv18 +945exp LOST: 朧Lv3 LOST: 白雪Lv3 LOST: 睦月Lv2 LOST: 望月Lv2

hkuno9000 commented 8 years ago

自艦隊旗艦以外轟沈かつ、敵旗艦健在ならE敗北となる

E敗北: 自艦隊2隻中轟沈1

サーモン海域北方 battle1

5-5-2 単縦/同航/敵輪形 索敵: なし 制空権喪失 戦闘被害:f_damage:74/75(98%)[1/2]87, e_damage:16/471(3%)[0/6], api:/api_req_sortie/battle, rate:0.0306 勝敗推定:E 戦闘詳報 + friend damage E敗北検証艦隊 1(伊勢Lv1). 1/74(-73):大破!!! 2(三日月Lv3). 0/13(-34):撃沈--- 被撃墜数: 0 enemy damage 1(戦艦レ級Lv1). 180/180:* + 2(軽母ヌ級flagshipLv1). 84/84:* + 3(軽母ヌ級flagshipLv1). 84/84:* + 4(軽巡ヘ級flagshipLv1). 57/57:* + 5(駆逐イ級flagshipLv1). 25/39(-14):小破 + 6(潜水カ級eliteLv50). 25/27(-2):. + battle result 敵前衛警戒部隊(0/6):E LOST: 三日月Lv3

E敗北: 自艦隊3隻中轟沈2

サブ島沖海域 battle1

5-3-1:気のせいだった 5-3-3 単縦/同航/敵単縦 戦闘被害:f_damage:15/21(71%)[2/3]48, e_damage:35/352(9%)[0/6], api:/api_req_battle_midnight/sp_midnight, rate:0.1268 勝敗推定:E 戦闘詳報 + friend damage E敗北検証艦隊 1(時津風Lv23). 6/16(-10):中破 2(初春Lv2). 0/16(-129):撃沈--- 3(不知火Lv2). 0/16(-433):撃沈--- 被撃墜数: 0 enemy damage 1(軽巡ヘ級flagshipLv1). 57/57:* + 2(重巡リ級flagshipLv1). 76/76:* + 3(重巡リ級flagshipLv1). 41/76(-35):小破 + 4(雷巡チ級eliteLv1). 50/50:* + 5(雷巡チ級eliteLv1). 50/50:* + 6(駆逐ロ級flagshipLv1). 43/43:* + battle result ????部隊(0/6):E LOST: 初春Lv2 LOST: 不知火Lv2

E敗北: 自艦隊4隻中轟沈3

キス島沖 battle1

3-2-2 単縦/同航/敵複縦 索敵: なし 制空権確保 戦闘被害:f_damage:44/68(64%)[3/4]108, e_damage:24/233(10%)[1/6], api:/api_req_sortie/battle, rate:0.1563 勝敗推定:E 戦闘詳報 + friend damage E敗北検証艦隊 1(金剛Lv1). 24/63(-39):中破 2(電Lv4). 0/15(-26):撃沈--- 3(雷Lv4). 0/15(-25):撃沈--- 4(吹雪Lv5). 0/15(-14):撃沈--- 被撃墜数: 0 enemy damage 1(雷巡チ級eliteLv1). 50/50:* + 2(雷巡チ級Lv1). 48/48:* + 3(雷巡チ級Lv1). 48/48:* + 4(駆逐ロ級flagshipLv1). 41/43(-2):. + 5(駆逐ロ級Lv1). 22/22:* + 6(駆逐ロ級Lv1). 0/22(-62):撃沈--- + battle result 敵水雷戦隊(1/6):E LOST: 電Lv4 LOST: 雷Lv4 LOST: 吹雪Lv5

E敗北: 自艦隊5隻中轟沈4

キス島沖 battle1

3-2-2 単縦/反航/敵単縦 索敵: なし 制空権確保 戦闘被害:f_damage:13/28(46%)[4/5]123, e_damage:54/145(37%)[2/5], api:/api_req_sortie/battle, rate:0.8043 勝敗推定:E 戦闘詳報 + friend damage E敗北検証艦隊 1(金剛Lv2). 15/63(-9):大破!!! 2(磯波Lv4). 0/15(-31):撃沈--- 3(敷波Lv3). 0/15(-3):撃沈--- 4(電Lv3). 0/15(-3):撃沈--- 5(白雪Lv3). 0/15(-79):撃沈--- 被撃墜数: 0 enemy damage 1(軽巡ホ級flagshipLv1). 53/53:* + 2(駆逐ハ級Lv1). 0/24(-31):撃沈--- + 3(駆逐ハ級Lv1). 0/24(-34):撃沈--- + 4(駆逐ロ級Lv1). 20/22(-2):. + 5(駆逐ロ級Lv1). 18/22(-4):.. + battle result 敵水雷戦隊(2/5):E LOST: 磯波Lv4 LOST: 敷波Lv3 LOST: 電Lv3 LOST: 白雪Lv3

E敗北: 自艦隊6隻中轟沈5

サーモン海域 battle1

5-4-2:気のせいだった 5-4-4 単縦/同航/敵複縦 索敵: なし 制空権確保 戦闘被害:f_damage:34/72(47%)[5/6]155, e_damage:5/327(1%)[0/6], api:/api_req_sortie/battle, rate:0.0213 勝敗推定:E 戦闘詳報 + friend damage E敗北検証艦隊 1(伊勢改Lv99). 38/77(-25):中破 2(曙Lv4). 0/15(-25):撃沈--- 3(村雨Lv3). 0/16(-60):撃沈--- 4(夕立Lv4). 0/16(-24):撃沈--- 5(敷波Lv2). 0/15(-24):撃沈--- 6(霞Lv3). 0/16(-15):撃沈--- 被撃墜数: 0 enemy damage 1(駆逐ロ級eliteLv1). 35/35:* + 2(重巡リ級flagshipLv1). 71/76(-5):. + 3(重巡リ級flagshipLv1). 76/76:* + 4(雷巡チ級eliteLv1). 50/50:* + 5(駆逐ニ級eliteLv1). 45/45:* + 6(駆逐ニ級eliteLv1). 45/45:* + battle result 敵前衛艦隊(0/6):E LOST: 曙Lv4 LOST: 村雨Lv3 LOST: 夕立Lv4 LOST: 敷波Lv2 LOST: 霞Lv3

hkuno9000 commented 8 years ago

自艦隊旗艦以外轟沈でも、敵旗艦撃沈かつ、自轟沈数より敵撃沈数が多いならB勝利となる

B勝利: 自艦隊2隻中轟沈1, 敵6隻中撃沈2(敵旗艦含む)

キス島沖 battle1

3-2-2 単縦/同航/敵複縦 索敵: 敵艦隊発見! 制空権確保 戦闘被害:f_damage:28/98(28%)[1/2]112, e_damage:100/233(42%)[x2/6], api:/api_req_sortie/battle, rate:1.5 勝敗推定:B 戦闘詳報 + friend damage E敗北検証艦隊 1(Bismarck dreiLv99). 70/96(-26):小破 2(霞Lv4). 0/16(-12):撃沈--- 被撃墜数: 0 enemy damage 1(雷巡チ級eliteLv1). 0/50(-113):撃沈--- + 2(雷巡チ級Lv1). 0/48(-120):撃沈--- + 3(雷巡チ級Lv1). 48/48:* + 4(駆逐ロ級flagshipLv1). 43/43:* + 5(駆逐ロ級Lv1). 20/22(-2):. + 6(駆逐ロ級Lv1). 22/22:* + battle result 敵水雷戦隊(2/6):B MVP: Bismarck dreiLv99 +960exp LOST: 霞Lv4

hkuno9000 commented 8 years ago

自艦隊旗艦以外轟沈でも、敵旗艦撃沈ならば戦果ゲージ比によりC敗北またはD敗北となる

C敗北: 自艦隊4隻中轟沈3, 敵6隻中撃沈3(敵旗艦含む)

キス島沖 battle1

3-2-2 単縦/反航/敵単縦 索敵: 敵艦隊発見! 制空権確保 戦闘被害:f_damage:44/103(42%)[3/4]139, e_damage:100/211(47%)[x3/6], api:/api_req_sortie/battle, rate:1.119 勝敗推定:C 戦闘詳報 + friend damage E敗北検証艦隊 1(Bismarck dreiLv99). 59/96(-37):小破 2(菊月Lv3). 0/13(-12):撃沈--- 3(電Lv3). 0/15(-28):撃沈--- 4(響Lv3). 0/15(-4):撃沈--- 被撃墜数: 0 enemy damage 1(軽巡ホ級flagshipLv1). 0/53(-77):撃沈--- + 2(雷巡チ級eliteLv1). 50/50:* + 3(駆逐ハ級eliteLv1). 40/40:* + 4(駆逐ハ級Lv1). 21/24(-3):. + 5(駆逐ロ級Lv1). 0/22(-24):撃沈--- + 6(駆逐ロ級Lv1). 0/22(-110):撃沈--- + battle result 敵水雷戦隊(3/6):C MVP: Bismarck dreiLv99 +768exp LOST: 菊月Lv3 LOST: 電Lv3 LOST: 響Lv3

敵旗艦生存でもゲージ比 1.4 程度ならC敗北となる

C敗北: 自艦隊6隻中轟沈5, 敵6隻中撃沈2(敵旗艦含まず)

キス島沖 battle1

3-2-2 単縦/反航/敵複縦 索敵: 敵艦隊発見!(索敵機なし) 制空権確保 戦闘被害:f_damage:27/90(30%)[5/6]153, e_damage:100/233(42%)[2/6], api:/api_req_sortie/battle, rate:1.4 勝敗推定:E 戦闘詳報 + friend damage E敗北検証艦隊 1(伊勢改Lv99). 63/77(-14):.. 2(時雨Lv3). 0/16(-10):撃沈--- 3(黒潮Lv4). 0/16(-19):撃沈--- 4(不知火Lv3). 0/16(-35):撃沈--- 5(初雪Lv3). 0/15(-19):撃沈--- 6(如月Lv4). 0/13(-10):撃沈--- 被撃墜数: 0 enemy damage 1(雷巡チ級eliteLv1). 50/50:* + 2(雷巡チ級Lv1). 0/48(-49):撃沈--- + 3(雷巡チ級Lv1). 41/48(-7):. + 4(駆逐ロ級flagshipLv1). 0/43(-46):撃沈--- + 5(駆逐ロ級Lv1). 20/22(-2):. + 6(駆逐ロ級Lv1). 22/22:* + battle result 敵水雷戦隊(2/6):C 勝敗推定ミス f_damage:27/90(30%)[5/6]153, e_damage:100/233(42%)[2/6], api:/api_req_sortie/battle, rate:1.4, f_lost:5, e_lost:2, rank:C/E MISS!! MVP: 伊勢改Lv99 +768exp LOST: 時雨Lv3 LOST: 黒潮Lv4 LOST: 不知火Lv3 LOST: 初雪Lv3 LOST: 如月Lv4

hkuno9000 commented 8 years ago

D敗北: 自艦隊6隻中轟沈4, 敵5隻中撃沈1(敵旗艦含まず)

キス島沖 battle1

3-2-2 単縦/同航/敵単縦 索敵: なし 制空権確保 戦闘被害:f_damage:12/54(22%)[4/6]123, e_damage:26/145(17%)[1/5], api:/api_req_sortie/battle, rate:0.7727 勝敗推定:D 戦闘詳報 + friend damage E敗北検証艦隊 1(愛宕Lv2). 40/45(-5):. 2(村雨Lv3). 0/16(-7):撃沈--- 3(電Lv3). 0/15(-11):撃沈--- 4(敷波Lv2). 0/15(-44):撃沈--- 5(夕立Lv3). 0/16(-109):撃沈--- 6(霞Lv2). 2/16:大破!!! 被撃墜数: 0 enemy damage 1(軽巡ホ級flagshipLv1). 53/53:* + 2(駆逐ハ級Lv1). 24/24:* + 3(駆逐ハ級Lv1). 0/24(-39):撃沈--- + 4(駆逐ロ級Lv1). 22/22:* + 5(駆逐ロ級Lv1). 20/22(-2):. + battle result 敵水雷戦隊(1/5):D MVP: 愛宕Lv2 +672exp LOST: 村雨Lv3 LOST: 電Lv3 LOST: 敷波Lv2 LOST: 夕立Lv3

skywalker999u commented 6 years ago

guesswinrankmiss1

(sorry that I am using another extension (a fork of this project, unsupported for quite some time), but since they share the same codes for calculation, I think I might contribute info here...

hkuno9000 commented 6 years ago

@skywalker999u 上記の単艦艦隊D敗北判定ミスを修正しました。

勝敗推定ミス f_damage:1/8(12%)[0/1]31, e_damage:22/101(21%)[1/4], api:, rate:1.75, f_lost:0, e_lost:1, rank:D/C MISS!!

hkuno9000 commented 4 years ago

2年間、誤判定は出ていない。 勝敗判定条件は現状使用で正しいと結論する。