changeset 151:bb5994be7eda

Implement functions that return array of which values will be merged.
author Oleksandr Gavenko <gavenkoa@gmail.com>
date Sat, 27 Sep 2014 00:03:51 +0300
parents cab72d83a6e6
children 07814b979a8a
files board.js
diffstat 1 files changed, 378 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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;
+}