# HG changeset patch # User Oleksandr Gavenko # Date 1410277496 -10800 # Node ID 2ef10a49a28f1ae7203917c9871e68711c5b83ec # Parent 079bcd734b681b1dd71526308cf3ec25343f04a3 Prepare UI for AI configuration. diff -r 079bcd734b68 -r 2ef10a49a28f 2048.html --- a/2048.html Tue Sep 09 18:39:52 2014 +0300 +++ b/2048.html Tue Sep 09 18:44:56 2014 +0300 @@ -11,9 +11,6 @@ @@ -82,14 +97,32 @@ -

AI

+

AIs

- - - - - - +
+ +
bling random
+
+
+ +
next merge makes max score
+
+
+ +
next merge makes max value
+
+
+ +
deep merges without simulation make max score
+
+
+ +
deep merges without simulation make max score + bonus if max value at corner/edge
+
+
+ +
expectimax
+
@@ -292,7 +325,7 @@ } var tmpBrd = board.create(); board.copy(board.current, tmpBrd); - var move = ui.ai.analyse(tmpBrd); + var move = ui.ai.current.analyse(tmpBrd); if (typeof move === 'undefined') { ui.message.set("I don't know how to move!"); return; @@ -315,7 +348,7 @@ while (!board.gameOver(board.current)) { var tmpBrd = board.create(); board.copy(board.current, tmpBrd); - var move = ui.ai.analyse(tmpBrd); + var move = ui.ai.current.analyse(tmpBrd); if (typeof move === 'undefined') { ui.message.set("I don't know how to move!"); return; @@ -342,26 +375,56 @@ //////////////////////////////////////////////////////////////// // Register AIs. - ui.brdEngine = BoardArr2d; // TODO make user selectable + ui.ai = {}; + ui.ai.current = null; + ui.ai.algList = { + "ai-random": function() { + return new ai.random(ui.brdEngine); + }, + "ai-next-max-score": function() { + return new ai.nextMaxScore(ui.brdEngine); + }, + "ai-next-max-value": function() { + return new ai.nextMaxValue(ui.brdEngine); + }, + "ai-deep-max-score": function() { + return new ai.deepMaxScore(ui.brdEngine); + }, + "ai-deep-max-score-corner": function() { + return new ai.deepMaxScoreCorner(ui.brdEngine); + }, + "ai-expectimax": function() { + return new ai.expectimax(ui.brdEngine); + }, + // "": function() { + // return new ai.(ui.brdEngine); + // }, + }; + ui.ai.domList = document.querySelectorAll('div.ai'); + for (var i = 0; i < ui.ai.domList.length; i++) { + ui.ai.domList[i].querySelectorAll('button.ai')[0].addEventListener("click", function (event) { + ui.ai.enable(event.target.parentNode); + }); + } - document.getElementById("ai-random").addEventListener("click", function() { - ui.ai = new ai.random(ui.brdEngine); - }); - document.getElementById("ai-next-max-score").addEventListener("click", function() { - ui.ai = new ai.nextMaxScore(ui.brdEngine); - }); - document.getElementById("ai-next-max-value").addEventListener("click", function() { - ui.ai = new ai.nextMaxValue(ui.brdEngine); - }); - document.getElementById("ai-deep-max-score").addEventListener("click", function() { - ui.ai = new ai.deepMaxScore(ui.brdEngine); - }); - document.getElementById("ai-deep-max-score-corner").addEventListener("click", function() { - ui.ai = new ai.deepMaxScoreCorner(ui.brdEngine); - }); - document.getElementById("ai-expectimax").addEventListener("click", function() { - ui.ai = new ai.expectimax(ui.brdEngine); - }); + ui.ai.moveToTop = function(aiDom) { + for (var i = 0; i < ui.ai.domList.length; i++) { + ui.ai.domList[i].classList.remove('enabled'); + } + var rootDom = aiDom.parentNode; + rootDom.removeChild(aiDom); + rootDom.insertBefore(aiDom, rootDom.firstChild); + aiDom.classList.add('enabled'); + } + ui.ai.enable = function(aiDom) { + if (ui.ai.current) + ui.ai.current.cleanup(); + var ai = ui.ai.algList[aiDom.id]; + ui.ai.moveToTop(aiDom); + ui.ai.current = ai(); + } + + ui.brdEngine = BoardArr2d; // TODO make user selectable