248 </div> |
249 </div> |
249 |
250 |
250 <script> |
251 <script> |
251 "use strict"; |
252 "use strict"; |
252 |
253 |
|
254 var ui = {}; |
|
255 |
|
256 //////////////////////////////////////////////////////////////// |
|
257 // UI widgets. |
|
258 |
|
259 ui.dom = {}; |
|
260 ui.dom.table = function(tbl, cols, cfg) { |
|
261 var tableDom = document.createElement('table'); |
|
262 if (typeof cfg.tableClass === 'string') |
|
263 tableDom.classList.add(cfg.tableClass); |
|
264 var trDom = document.createElement('tr'); |
|
265 for (var i = 0; i < cols.length; i++) { |
|
266 var thDom = document.createElement('td'); |
|
267 thDom.appendChild(document.createTextNode(cols[i])); |
|
268 trDom.appendChild(thDom); |
|
269 } |
|
270 tableDom.appendChild(trDom); |
|
271 for (var i = 0; i < tbl.length; i++) { |
|
272 var row = tbl[i]; |
|
273 var trDom = document.createElement('tr'); |
|
274 for (var j = 0; j < row.length; j++) { |
|
275 var tdDom = document.createElement('td'); |
|
276 tdDom.appendChild(document.createTextNode(row[j])); |
|
277 trDom.appendChild(tdDom); |
|
278 } |
|
279 tableDom.appendChild(trDom); |
|
280 } |
|
281 return tableDom; |
|
282 }; |
|
283 |
|
284 //////////////////////////////////////////////////////////////// |
|
285 // Board. |
|
286 |
253 var boardDom = document.getElementById("board"); |
287 var boardDom = document.getElementById("board"); |
254 var ui = {}; |
|
255 ui.board = {}; |
288 ui.board = {}; |
256 ui.board.val2048Dom = document.getElementById('2048'); |
289 ui.board.val2048Dom = document.getElementById('2048'); |
257 ui.board.val2048Dom.addEventListener("click", function(event) { |
290 ui.board.val2048Dom.addEventListener("click", function(event) { |
258 event.preventDefault(); event.stopPropagation(); |
291 event.preventDefault(); event.stopPropagation(); |
259 ui.board.update(ui.board.position); |
292 ui.board.update(ui.board.position); |
696 var reportDom = document.createElement('div'); |
731 var reportDom = document.createElement('div'); |
697 reportDom.classList.add('report'); |
732 reportDom.classList.add('report'); |
698 var h5Dom = document.createElement('h5'); |
733 var h5Dom = document.createElement('h5'); |
699 h5Dom.appendChild(document.createTextNode(ui.ai.currentName)); |
734 h5Dom.appendChild(document.createTextNode(ui.ai.currentName)); |
700 reportDom.appendChild(h5Dom); |
735 reportDom.appendChild(h5Dom); |
701 var tableDom = document.createElement('table'); |
|
702 tableDom.classList.add('report-by-maxval'); |
|
703 var trDom = document.createElement('tr'); |
|
704 var thDom = document.createElement('td'); |
|
705 thDom.appendChild(document.createTextNode('maxVal')); |
|
706 trDom.appendChild(thDom); |
|
707 var thDom = document.createElement('td'); |
|
708 thDom.appendChild(document.createTextNode('n')); |
|
709 trDom.appendChild(thDom); |
|
710 var thDom = document.createElement('td'); |
|
711 thDom.appendChild(document.createTextNode('%')); |
|
712 trDom.appendChild(thDom); |
|
713 var thDom = document.createElement('td'); |
|
714 thDom.appendChild(document.createTextNode('min\nscore')); |
|
715 trDom.appendChild(thDom); |
|
716 var thDom = document.createElement('td'); |
|
717 thDom.appendChild(document.createTextNode('mean score')); |
|
718 trDom.appendChild(thDom); |
|
719 var thDom = document.createElement('td'); |
|
720 thDom.appendChild(document.createTextNode('max score')); |
|
721 trDom.appendChild(thDom); |
|
722 tableDom.appendChild(trDom); |
|
723 var maxVals = Object.keys(histo).sort(function(a,b){return a - b}); |
736 var maxVals = Object.keys(histo).sort(function(a,b){return a - b}); |
|
737 var tbl = []; |
724 for (var i = maxVals.length-1; i >= 0; i--) { |
738 for (var i = maxVals.length-1; i >= 0; i--) { |
725 var maxVal = maxVals[i]; |
739 var maxVal = maxVals[i]; |
726 var row = histo[maxVals[i]]; |
740 var row = histo[maxVals[i]]; |
727 console.log("%d: %o", maxVals[i], row); |
741 var perc = parseFloat((100 * row.n / gameCnt).toPrecision(3)); |
728 var trDom = document.createElement('tr'); |
742 var meanScore = parseFloat(row.meanScore.toPrecision(3)); |
729 var tdDom = document.createElement('td'); |
743 tbl.push([maxVal, row.n, perc, row.minScore, meanScore, row.maxScore]); |
730 tdDom.appendChild(document.createTextNode(maxVal)); |
744 } |
731 trDom.appendChild(tdDom); |
745 var tableDom = ui.dom.table( |
732 var tdDom = document.createElement('td'); |
746 tbl, |
733 tdDom.appendChild(document.createTextNode(row.n)); |
747 ['maxVal', 'n', '%', 'min score', 'mean score', 'max score'], |
734 trDom.appendChild(tdDom); |
748 { tableClass: 'report-by-maxval' }); |
735 var tdDom = document.createElement('td'); |
|
736 tdDom.appendChild(document.createTextNode(parseFloat((100 * row.n / gameCnt).toPrecision(3)))); |
|
737 trDom.appendChild(tdDom); |
|
738 var tdDom = document.createElement('td'); |
|
739 tdDom.appendChild(document.createTextNode(row.minScore)); |
|
740 trDom.appendChild(tdDom); |
|
741 var tdDom = document.createElement('td'); |
|
742 tdDom.appendChild(document.createTextNode(parseFloat(row.meanScore.toPrecision(3)))); |
|
743 trDom.appendChild(tdDom); |
|
744 var tdDom = document.createElement('td'); |
|
745 tdDom.appendChild(document.createTextNode(row.maxScore)); |
|
746 trDom.appendChild(tdDom); |
|
747 tableDom.appendChild(trDom); |
|
748 } |
|
749 reportDom.appendChild(tableDom); |
749 reportDom.appendChild(tableDom); |
750 reportsDom.insertBefore(reportDom, reportsDom.firstChild); |
750 reportsDom.insertBefore(reportDom, reportsDom.firstChild); |
751 } |
751 } |
752 |
752 |
753 var statisticBtn = document.getElementById('statistic'); |
753 var statisticBtn = document.getElementById('statistic'); |
754 statisticBtn.addEventListener("click", statistic, false); |
754 statisticBtn.addEventListener("click", ui.report.stat, false); |
755 |
755 |
756 |
756 |
757 //////////////////////////////////////////////////////////////// |
757 //////////////////////////////////////////////////////////////// |
758 // Initialise game. |
758 // Initialise game. |
759 |
759 |