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 @@
-
-
-
-
-
-
+
+
+
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