전투 시뮬레이터 기본 기능 구현 완료
This commit is contained in:
@@ -20,7 +20,6 @@ $startYear = $gameStor->getValue('startyear');
|
|||||||
<meta name="viewport" content="width=1100" />
|
<meta name="viewport" content="width=1100" />
|
||||||
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
|
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
||||||
<?=WebUtil::printCSS('../css/config.css')?>
|
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
<?=WebUtil::printCSS('css/common.css')?>
|
||||||
<?=WebUtil::printCSS('css/battle_simulator.css')?>
|
<?=WebUtil::printCSS('css/battle_simulator.css')?>
|
||||||
<?=WebUtil::printJS('../d_shared/common_path.js')?>
|
<?=WebUtil::printJS('../d_shared/common_path.js')?>
|
||||||
@@ -431,6 +430,46 @@ $startYear = $gameStor->getValue('startyear');
|
|||||||
|
|
||||||
</div><!-- <div class="col-sm"> -->
|
</div><!-- <div class="col-sm"> -->
|
||||||
</div>
|
</div>
|
||||||
|
<div class="card mb-3">
|
||||||
|
<div class="card-header">
|
||||||
|
전투 요약
|
||||||
|
</div>
|
||||||
|
<table class="table">
|
||||||
|
<tbody id="battle_result_summary">
|
||||||
|
<tr><th style='width:16ch;'>전투 일시</th><td id='result_datetime'></td></tr>
|
||||||
|
<tr><th>전투 횟수</th><td id='result_warcnt'></td></tr>
|
||||||
|
<tr><th>전투 페이즈</th><td id='result_phase'></td></tr>
|
||||||
|
<tr><th>공격량</th><td id='result_killed'></td></tr>
|
||||||
|
<tr><th>피해량</th><td id='result_dead'></td></tr>
|
||||||
|
<tr><th>출병자 군량 소모</th><td id='result_attackerRice'></td></tr>
|
||||||
|
<tr><th>수비자 군량 소모</th><td id='result_defenderRice'></td></tr>
|
||||||
|
<tr><th>공격자 스킬</th><td id='result_attackerSkills'></td></tr>
|
||||||
|
<tr class='result_defenderSkills'><th>수비자1 스킬</th><td></td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm">
|
||||||
|
<div class="card mb-3">
|
||||||
|
<div class="card-header">
|
||||||
|
마지막 전투 로그
|
||||||
|
</div>
|
||||||
|
<div class="card-body" id="generalBattleResultLog">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm">
|
||||||
|
<div class="card mb-3">
|
||||||
|
<div class="card-header">
|
||||||
|
마지막 전투 상세 로그
|
||||||
|
</div>
|
||||||
|
<div class="card-body" id="generalBattleDetailLog">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -70,6 +70,7 @@ $month = $query['month'];
|
|||||||
$repeatCnt = $query['repeatCnt'];
|
$repeatCnt = $query['repeatCnt'];
|
||||||
|
|
||||||
$rawAttacker = $query['attackerGeneral'];
|
$rawAttacker = $query['attackerGeneral'];
|
||||||
|
$rawAttacker['turntime'] = date('Y-m-d H:i:s');
|
||||||
$rawAttackerCity = $query['attackerCity'];
|
$rawAttackerCity = $query['attackerCity'];
|
||||||
$rawAttackerNation = $query['attackerNation'];
|
$rawAttackerNation = $query['attackerNation'];
|
||||||
|
|
||||||
@@ -347,6 +348,9 @@ $attackerDead = 0;
|
|||||||
$attackerAvgRice = 0;
|
$attackerAvgRice = 0;
|
||||||
$defenderAvgRice = 0;
|
$defenderAvgRice = 0;
|
||||||
|
|
||||||
|
$avgPhase = 0;
|
||||||
|
$avgWar = 0;
|
||||||
|
|
||||||
$attackerActivatedSkills = [];
|
$attackerActivatedSkills = [];
|
||||||
$defendersActivatedSkills = [];
|
$defendersActivatedSkills = [];
|
||||||
|
|
||||||
@@ -356,13 +360,19 @@ foreach(range(1, $repeatCnt) as $repeatIdx){
|
|||||||
$defenderList, $rawDefenderCity, $rawDefenderNation,
|
$defenderList, $rawDefenderCity, $rawDefenderNation,
|
||||||
$startYear, $year, $month, $cityRate
|
$startYear, $year, $month, $cityRate
|
||||||
);
|
);
|
||||||
$lastWarLog = $attacker->getLogger()->rollback();
|
$lastWarLog = Util::mapWithKey(function($key, $values){
|
||||||
|
return ConvertLog(join('<br>', $values));
|
||||||
|
}, $attacker->getLogger()->rollback());
|
||||||
|
|
||||||
|
$avgPhase += $attacker->getPhase() / $repeatCnt;
|
||||||
|
|
||||||
$attackerKilled += $attacker->getKilled() / $repeatCnt;
|
$attackerKilled += $attacker->getKilled() / $repeatCnt;
|
||||||
$attackerDead += $attacker->getDead() / $repeatCnt;
|
$attackerDead += $attacker->getDead() / $repeatCnt;
|
||||||
|
|
||||||
$attackerAvgRice += $attackerRice /= $repeatCnt;
|
$attackerAvgRice += $attackerRice / $repeatCnt;
|
||||||
$defenderAvgRice += $defenderRice /= $repeatCnt;
|
$defenderAvgRice += $defenderRice / $repeatCnt;
|
||||||
|
|
||||||
|
$avgWar += count($battleResult) / $repeatCnt;
|
||||||
|
|
||||||
foreach($attacker->getActivatedSkillLog() as $skillName => $skillCnt){
|
foreach($attacker->getActivatedSkillLog() as $skillName => $skillCnt){
|
||||||
if(!key_exists($skillName, $attackerActivatedSkills)){
|
if(!key_exists($skillName, $attackerActivatedSkills)){
|
||||||
@@ -393,12 +403,15 @@ foreach(range(1, $repeatCnt) as $repeatIdx){
|
|||||||
|
|
||||||
Json::die([
|
Json::die([
|
||||||
'result'=>true,
|
'result'=>true,
|
||||||
|
'datetime'=>$rawAttacker['turntime'],
|
||||||
'reason'=>'success',
|
'reason'=>'success',
|
||||||
'lastWarLog'=>$lastWarLog,
|
'lastWarLog'=>$lastWarLog,
|
||||||
'attackerKilled'=>$attackerKilled,
|
'avgWar'=>$avgWar,
|
||||||
'attackerDead'=>$attackerDead,
|
'phase'=>$avgPhase,
|
||||||
|
'killed'=>$attackerKilled,
|
||||||
|
'dead'=>$attackerDead,
|
||||||
'attackerRice'=>$attackerAvgRice,
|
'attackerRice'=>$attackerAvgRice,
|
||||||
'defenderRice'=>$defenderAvgRice,
|
'defenderRice'=>$defenderAvgRice,
|
||||||
'attackerActivatedSkills'=>$attackerActivatedSkills,
|
'attackerSkills'=>$attackerActivatedSkills,
|
||||||
'defendersActivatedSkills'=>$defendersActivatedSkills,
|
'defendersSkills'=>$defendersActivatedSkills,
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -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 = $("<tr class='result_defenderSkills'><th>수비자{0} 스킬</th><td></td></tr>".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 beginBattle = function(){
|
||||||
var data = extendAllDataForDB(exportAllData());
|
var data = extendAllDataForDB(exportAllData());
|
||||||
console.log(data);
|
console.log(data);
|
||||||
@@ -536,6 +584,7 @@ jQuery(function($){
|
|||||||
alert(result.reason);
|
alert(result.reason);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
showBattleResult(result);
|
||||||
|
|
||||||
}, function(result){
|
}, function(result){
|
||||||
alert('전투 개시 실패!');
|
alert('전투 개시 실패!');
|
||||||
|
|||||||
@@ -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로 재 변환
|
* 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 가능
|
* 단순한 Template 함수. <%변수명%>으로 template 가능
|
||||||
* @see https://github.com/krasimir/absurd/blob/master/lib/processors/html/helpers/TemplateEngine.js
|
* @see https://github.com/krasimir/absurd/blob/master/lib/processors/html/helpers/TemplateEngine.js
|
||||||
|
|||||||
Reference in New Issue
Block a user