--- a/board.js Fri Sep 26 09:53:50 2014 +0300
+++ b/board.js Sat Sep 27 00:03:51 2014 +0300
@@ -798,6 +798,103 @@
BoardArr2d.prototype.up = BoardArr2d.prototype.shiftUp_mostly_unrolled;
BoardArr2d.prototype.down = BoardArr2d.prototype.shiftDown_mostly_unrolled;
+/** Array of which values will be merged. */
+BoardObj.prototype.rightMerges = function() {
+ var merges = [];
+ var brd = this.brd;
+ for (var i = 0; i < 3; i++) {
+ var f0 = brd[i][0], f1 = brd[i][1], f2 = brd[i][2], f3 = brd[i][3];
+ if (f2 === f3) {
+ if (f2 === 0) {
+ if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ } else {
+ merges.push(f2);
+ }
+ } else if (f1 === f2) {
+ if (f1 !== 0) {
+ merges.push(f1);
+ }
+ } else if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ }
+ return merges;
+}
+/** Array of which values will be merged. */
+BoardObj.prototype.downMerges = function() {
+ var merges = [];
+ var brd = this.brd;
+ for (var j = 0; j < 3; j++) {
+ var f0 = brd[0][j], f1 = brd[1][j], f2 = brd[2][j], f3 = brd[3][j];
+ if (f2 === f3) {
+ if (f2 === 0) {
+ if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ } else {
+ merges.push(f2);
+ }
+ } else if (f1 === f2) {
+ if (f1 !== 0) {
+ merges.push(f1);
+ }
+ } else if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ }
+ return merges;
+}
+/** Array of which values will be merged. */
+BoardObj.prototype.leftMerges = function() {
+ var merges = [];
+ var brd = this.brd;
+ for (var i = 0; i < 3; i++) {
+ var f0 = brd[i][0], f1 = brd[i][1], f2 = brd[i][2], f3 = brd[i][3];
+ if (f1 === f0) {
+ if (f1 === 0) {
+ if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ } else {
+ merges.push(f1);
+ }
+ } else if (f2 === f1) {
+ if (f2 !== 0) {
+ merges.push(f2);
+ }
+ } else if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ }
+ return merges;
+}
+/** Array of which values will be merged. */
+BoardObj.prototype.upMerges = function() {
+ var merges = [];
+ var brd = this.brd;
+ for (var j = 0; j < 3; j++) {
+ var f0 = brd[0][j], f1 = brd[1][j], f2 = brd[2][j], f3 = brd[3][j];
+ if (f1 === f0) {
+ if (f1 === 0) {
+ if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ } else {
+ merges.push(f1);
+ }
+ } else if (f2 === f1) {
+ if (f2 !== 0) {
+ merges.push(f2);
+ }
+ } else if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ }
+ return merges;
+}
+
////////////////////////////////////////////////////////////////
@@ -2575,3 +2672,284 @@
}
return updated;
}
+
+/** Array of which values will be merged. */
+BoardObj.prototype.rightMerges = function() {
+ var merges = [];
+ var brd = this.brd;
+ var f0 = brd.aa, f1 = brd.ab, f2 = brd.ac, f3 = brd.ad;
+ if (f2 === f3) {
+ if (f2 === 0) {
+ if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ } else {
+ merges.push(f2);
+ }
+ } else if (f1 === f2) {
+ if (f1 !== 0) {
+ merges.push(f1);
+ }
+ } else if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ var f0 = brd.ba, f1 = brd.bb, f2 = brd.bc, f3 = brd.bd;
+ if (f2 === f3) {
+ if (f2 === 0) {
+ if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ } else {
+ merges.push(f2);
+ }
+ } else if (f1 === f2) {
+ if (f1 !== 0) {
+ merges.push(f1);
+ }
+ } else if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ var f0 = brd.ca, f1 = brd.cb, f2 = brd.cc, f3 = brd.cd;
+ if (f2 === f3) {
+ if (f2 === 0) {
+ if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ } else {
+ merges.push(f2);
+ }
+ } else if (f1 === f2) {
+ if (f1 !== 0) {
+ merges.push(f1);
+ }
+ } else if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ var f0 = brd.da, f1 = brd.db, f2 = brd.dc, f3 = brd.dd;
+ if (f2 === f3) {
+ if (f2 === 0) {
+ if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ } else {
+ merges.push(f2);
+ }
+ } else if (f1 === f2) {
+ if (f1 !== 0) {
+ merges.push(f1);
+ }
+ } else if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ return merges;
+}
+/** Array of which values will be merged. */
+BoardObj.prototype.downMerges = function() {
+ var merges = [];
+ var brd = this.brd;
+ var f0 = brd.aa, f1 = brd.ba, f2 = brd.ca, f3 = brd.da;
+ if (f2 === f3) {
+ if (f2 === 0) {
+ if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ } else {
+ merges.push(f2);
+ }
+ } else if (f1 === f2) {
+ if (f1 !== 0) {
+ merges.push(f1);
+ }
+ } else if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ var f0 = brd.ab, f1 = brd.bb, f2 = brd.cb, f3 = brd.db;
+ if (f2 === f3) {
+ if (f2 === 0) {
+ if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ } else {
+ merges.push(f2);
+ }
+ } else if (f1 === f2) {
+ if (f1 !== 0) {
+ merges.push(f1);
+ }
+ } else if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ var f0 = brd.ac, f1 = brd.bc, f2 = brd.cc, f3 = brd.dc;
+ if (f2 === f3) {
+ if (f2 === 0) {
+ if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ } else {
+ merges.push(f2);
+ }
+ } else if (f1 === f2) {
+ if (f1 !== 0) {
+ merges.push(f1);
+ }
+ } else if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ var f0 = brd.ad, f1 = brd.bd, f2 = brd.cd, f3 = brd.dd;
+ if (f2 === f3) {
+ if (f2 === 0) {
+ if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ } else {
+ merges.push(f2);
+ }
+ } else if (f1 === f2) {
+ if (f1 !== 0) {
+ merges.push(f1);
+ }
+ } else if (f0 === f1 && f0 !== 0) {
+ merges.push(f0);
+ }
+ return merges;
+}
+/** Array of which values will be merged. */
+BoardObj.prototype.leftMerges = function() {
+ var merges = [];
+ var brd = this.brd;
+ var f0 = brd.aa, f1 = brd.ab, f2 = brd.ac, f3 = brd.ad;
+ if (f1 === f0) {
+ if (f1 === 0) {
+ if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ } else {
+ merges.push(f1);
+ }
+ } else if (f2 === f1) {
+ if (f2 !== 0) {
+ merges.push(f2);
+ }
+ } else if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ var f0 = brd.ba, f1 = brd.bb, f2 = brd.bc, f3 = brd.bd;
+ if (f1 === f0) {
+ if (f1 === 0) {
+ if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ } else {
+ merges.push(f1);
+ }
+ } else if (f2 === f1) {
+ if (f2 !== 0) {
+ merges.push(f2);
+ }
+ } else if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ var f0 = brd.ca, f1 = brd.cb, f2 = brd.cc, f3 = brd.cd;
+ if (f1 === f0) {
+ if (f1 === 0) {
+ if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ } else {
+ merges.push(f1);
+ }
+ } else if (f2 === f1) {
+ if (f2 !== 0) {
+ merges.push(f2);
+ }
+ } else if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ var f0 = brd.da, f1 = brd.db, f2 = brd.dc, f3 = brd.dd;
+ if (f1 === f0) {
+ if (f1 === 0) {
+ if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ } else {
+ merges.push(f1);
+ }
+ } else if (f2 === f1) {
+ if (f2 !== 0) {
+ merges.push(f2);
+ }
+ } else if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ return merges;
+}
+/** Array of which values will be merged. */
+BoardObj.prototype.upMerges = function() {
+ var merges = [];
+ var brd = this.brd;
+ var f0 = brd.aa, f1 = brd.ba, f2 = brd.ca, f3 = brd.da;
+ if (f1 === f0) {
+ if (f1 === 0) {
+ if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ } else {
+ merges.push(f1);
+ }
+ } else if (f2 === f1) {
+ if (f2 !== 0) {
+ merges.push(f2);
+ }
+ } else if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ var f0 = brd.ab, f1 = brd.bb, f2 = brd.cb, f3 = brd.db;
+ if (f1 === f0) {
+ if (f1 === 0) {
+ if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ } else {
+ merges.push(f1);
+ }
+ } else if (f2 === f1) {
+ if (f2 !== 0) {
+ merges.push(f2);
+ }
+ } else if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ var f0 = brd.ac, f1 = brd.bc, f2 = brd.cc, f3 = brd.dc;
+ if (f1 === f0) {
+ if (f1 === 0) {
+ if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ } else {
+ merges.push(f1);
+ }
+ } else if (f2 === f1) {
+ if (f2 !== 0) {
+ merges.push(f2);
+ }
+ } else if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ var f0 = brd.ad, f1 = brd.bd, f2 = brd.cd, f3 = brd.dd;
+ if (f1 === f0) {
+ if (f1 === 0) {
+ if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ } else {
+ merges.push(f1);
+ }
+ } else if (f2 === f1) {
+ if (f2 !== 0) {
+ merges.push(f2);
+ }
+ } else if (f3 === f2 && f3 !== 0) {
+ merges.push(f3);
+ }
+ return merges;
+}