ai.js
changeset 172 021cd45cb5ef
parent 171 6fce1391c2c0
--- a/ai.js	Fri Jul 03 23:45:55 2015 -0500
+++ b/ai.js	Sat Jul 04 00:33:19 2015 -0500
@@ -87,6 +87,51 @@
 
 
 ////////////////////////////////////////////////////////////////
+// Always up AI.
+////////////////////////////////////////////////////////////////
+
+/** Always up AI.
+ * @param {Board} brd  board engine from board.js
+ * @constructor */
+ai.AlwaysUp = function(brd) {
+    this.brd = brd;
+}
+/** Select best direction for next step. */
+ai.AlwaysUp.prototype.analyse = function(brd2d) {
+    var origBrd = new this.brd(brd2d);
+    var nextBrd = new this.brd();
+    var tmpBrd = new this.brd();
+    if (origBrd.canUp())
+        return "up";
+    var canRight = origBrd.right(nextBrd);
+    if (canRight) {
+        var canRightUp = nextBrd.up(tmpBrd);
+        var rightScore = tmpBrd.score();
+    }
+    var canLeft = origBrd.left(nextBrd);
+    if (canLeft) {
+        var canLeftUp = nextBrd.up(tmpBrd);
+        var leftScore = tmpBrd.score();
+    }
+    if (canRight && canLeft) {
+        if (canRightUp && canLeftUp)
+            return (rightScore > leftScore) ? "right": "left";
+        else if (canRightUp)
+            return "right";
+        else
+            return "left";
+    } else if (canRight)
+        return "right";
+    else if (canLeft)
+        return "left";
+    return "down";
+}
+/* Mark that next board will be unrelated to previous, so any stored precompution can be cleared. */
+ai.AlwaysUp.prototype.cleanup = function() { }
+
+
+
+////////////////////////////////////////////////////////////////
 // Blind weight random AI.
 ////////////////////////////////////////////////////////////////