# HG changeset patch # User Oleksandr Gavenko # Date 1411765431 -10800 # Node ID bb5994be7edab972f140d4b75d43fba26e40db8a # Parent cab72d83a6e60419c7b3f070ecc092486cc370f6 Implement functions that return array of which values will be merged. diff -r cab72d83a6e6 -r bb5994be7eda board.js --- 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; +}