From ef1f2722fc870b692eb003ca271c7e374d4fb65a Mon Sep 17 00:00:00 2001 From: hide_d Date: Mon, 27 Aug 2018 02:21:45 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A0=84=ED=88=AC=20=EC=8B=9C=EB=AE=AC?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=ED=84=B0=20=EA=B8=B0=EB=B3=B8=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/battle_simulator.php | 41 ++++++++++++++++++++++++++++++- hwe/j_simulate_battle.php | 27 +++++++++++++++------ hwe/js/battle_simulator.js | 49 ++++++++++++++++++++++++++++++++++++++ hwe/js/common.js | 13 ++++++++++ 4 files changed, 122 insertions(+), 8 deletions(-) diff --git a/hwe/battle_simulator.php b/hwe/battle_simulator.php index 04497976..f70f8229 100644 --- a/hwe/battle_simulator.php +++ b/hwe/battle_simulator.php @@ -20,7 +20,6 @@ $startYear = $gameStor->getValue('startyear'); - @@ -431,6 +430,46 @@ $startYear = $gameStor->getValue('startyear'); +
+
+ 전투 요약 +
+ + + + + + + + + + + + +
전투 일시
전투 횟수
전투 페이즈
공격량
피해량
출병자 군량 소모
수비자 군량 소모
공격자 스킬
수비자1 스킬
+
+
+
+
+
+ 마지막 전투 로그 +
+
+ +
+
+
+
+
+
+ 마지막 전투 상세 로그 +
+
+ +
+
+
+
\ No newline at end of file diff --git a/hwe/j_simulate_battle.php b/hwe/j_simulate_battle.php index 1f771d85..7ffdcbef 100644 --- a/hwe/j_simulate_battle.php +++ b/hwe/j_simulate_battle.php @@ -70,6 +70,7 @@ $month = $query['month']; $repeatCnt = $query['repeatCnt']; $rawAttacker = $query['attackerGeneral']; +$rawAttacker['turntime'] = date('Y-m-d H:i:s'); $rawAttackerCity = $query['attackerCity']; $rawAttackerNation = $query['attackerNation']; @@ -347,6 +348,9 @@ $attackerDead = 0; $attackerAvgRice = 0; $defenderAvgRice = 0; +$avgPhase = 0; +$avgWar = 0; + $attackerActivatedSkills = []; $defendersActivatedSkills = []; @@ -356,13 +360,19 @@ foreach(range(1, $repeatCnt) as $repeatIdx){ $defenderList, $rawDefenderCity, $rawDefenderNation, $startYear, $year, $month, $cityRate ); - $lastWarLog = $attacker->getLogger()->rollback(); + $lastWarLog = Util::mapWithKey(function($key, $values){ + return ConvertLog(join('
', $values)); + }, $attacker->getLogger()->rollback()); + + $avgPhase += $attacker->getPhase() / $repeatCnt; $attackerKilled += $attacker->getKilled() / $repeatCnt; $attackerDead += $attacker->getDead() / $repeatCnt; - $attackerAvgRice += $attackerRice /= $repeatCnt; - $defenderAvgRice += $defenderRice /= $repeatCnt; + $attackerAvgRice += $attackerRice / $repeatCnt; + $defenderAvgRice += $defenderRice / $repeatCnt; + + $avgWar += count($battleResult) / $repeatCnt; foreach($attacker->getActivatedSkillLog() as $skillName => $skillCnt){ if(!key_exists($skillName, $attackerActivatedSkills)){ @@ -393,12 +403,15 @@ foreach(range(1, $repeatCnt) as $repeatIdx){ Json::die([ 'result'=>true, + 'datetime'=>$rawAttacker['turntime'], 'reason'=>'success', 'lastWarLog'=>$lastWarLog, - 'attackerKilled'=>$attackerKilled, - 'attackerDead'=>$attackerDead, + 'avgWar'=>$avgWar, + 'phase'=>$avgPhase, + 'killed'=>$attackerKilled, + 'dead'=>$attackerDead, 'attackerRice'=>$attackerAvgRice, 'defenderRice'=>$defenderAvgRice, - 'attackerActivatedSkills'=>$attackerActivatedSkills, - 'defendersActivatedSkills'=>$defendersActivatedSkills, + 'attackerSkills'=>$attackerActivatedSkills, + 'defendersSkills'=>$defendersActivatedSkills, ]); diff --git a/hwe/js/battle_simulator.js b/hwe/js/battle_simulator.js index 2a8ab2af..4044276e 100644 --- a/hwe/js/battle_simulator.js +++ b/hwe/js/battle_simulator.js @@ -519,6 +519,54 @@ jQuery(function($){ }); } + var parseSkillCount = function(skills){ + var result = []; + $.each(skills, function(key, value){ + result.push("{0}({1}회)".format(key, toPretty(value))); + }) + + if(result.length == 0){ + return '-'; + } + return result.join(', '); + } + + var toPretty = function(number){ + if(isInt(number)){ + number = parseInt(number); + } + else{ + number = parseFloat(number).toFixed(2); + } + return numberWithCommas(number); + } + + var showBattleResult = function(result){ + $('#result_datetime').html(result.datetime); + $('#result_warcnt').html(toPretty(result.avgWar)); + $('#result_phase').html(toPretty(result.phase)); + $('#result_killed').html(toPretty(result.killed)); + $('#result_dead').html(toPretty(result.dead)); + $('#result_attackerRice').html(toPretty(result.attackerRice)); + $('#result_defenderRice').html(toPretty(result.defenderRice)); + $('#result_attackerSkills').html(parseSkillCount(result.attackerSkills)); + + $('.result_defenderSkills').detach(); + + var $summary = $('#battle_result_summary'); + + $.each(result.defendersSkills, function(idx, defenderSkills){ + console.log(defenderSkills); + var $result = $("수비자{0} 스킬".format(idx + 1)); + $result.find('td').html(parseSkillCount(defenderSkills)); + $summary.append($result); + }); + + $('#generalBattleResultLog').html(result.lastWarLog.generalBattleResultLog); + $('#generalBattleDetailLog').html(result.lastWarLog.generalBattleDetailLog); + + } + var beginBattle = function(){ var data = extendAllDataForDB(exportAllData()); console.log(data); @@ -536,6 +584,7 @@ jQuery(function($){ alert(result.reason); return; } + showBattleResult(result); }, function(result){ alert('전투 개시 실패!'); diff --git a/hwe/js/common.js b/hwe/js/common.js index b529c5cd..4574a3dc 100644 --- a/hwe/js/common.js +++ b/hwe/js/common.js @@ -23,6 +23,14 @@ var escapeHtml = (function (string) { } })(); +/** + * 변수가 정수인지 확인하는 함수 + * @param {*} n 정수인지 확인하기 위한 인자 + * @return {boolean} 정수인지 여부 + */ +function isInt(n) { + return +n === n && !(n % 1); +} /** * object의 array를 id를 key로 삼는 object로 재 변환 @@ -89,6 +97,11 @@ function convColorValue(color) { } + +function numberWithCommas(x) { + return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); +} + /** * 단순한 Template 함수. <%변수명%>으로 template 가능 * @see https://github.com/krasimir/absurd/blob/master/lib/processors/html/helpers/TemplateEngine.js