--- a/ai.js Sun Jun 07 12:30:26 2015 +0300
+++ b/ai.js Thu Jul 02 01:06:48 2015 +0300
@@ -56,14 +56,14 @@
////////////////////////////////////////////////////////////////
/** Blind random AI.
- * @param {Board} brdEngine board engine from board.js
+ * @param {Board} brd board engine from board.js
* @constructor */
-ai.BlindRandom = function(brdEngine) {
- this.brdEngine = brdEngine;
+ai.BlindRandom = function(brd) {
+ this.brd = brd;
}
/** Select best direction for next step. */
ai.BlindRandom.prototype.analyse = function(brd2d) {
- var origBrd = new this.brdEngine(brd2d);
+ var origBrd = new this.brd(brd2d);
while (true) {
var rnd = Math.floor(Math.random()*4);
if (origBrd[ai.canFn[rnd]]())
@@ -89,11 +89,11 @@
*/
/** Blind weight random AI.
- * @param {Board} brdEngine board engine from board.js
+ * @param {Board} brd board engine from board.js
* @param {ai.BlindWeightRandom.cfg} cfg configuration settings
* @constructor */
-ai.BlindWeightRandom = function(brdEngine, cfg) {
- this.brdEngine = brdEngine;
+ai.BlindWeightRandom = function(brd, cfg) {
+ this.brd = brd;
this.cfg = ai.copyObj(ai.BlindWeightRandom.bestCfg);
ai.copyObj(cfg, this.cfg);
var total = this.cfg.left + this.cfg.right + this.cfg.up + this.cfg.down;
@@ -104,7 +104,7 @@
ai.BlindWeightRandom.bestCfg = { left: 1, right: 16, up: 4, down: 8 };
/** Select best direction for next step. */
ai.BlindWeightRandom.prototype.analyse = function(brd2d) {
- var origBrd = new this.brdEngine(brd2d);
+ var origBrd = new this.brd(brd2d);
while (true) {
var rnd = Math.random();
if (rnd < this.threshold1)
@@ -136,11 +136,11 @@
*/
/** Blind cycle AI.
- * @param {Board} brdEngine board engine from board.js
+ * @param {Board} brd board engine from board.js
* @param {ai.BlindCycle.cfg} cfg configuration settings
* @constructor */
-ai.BlindCycle = function(brdEngine, cfg) {
- this.brdEngine = brdEngine;
+ai.BlindCycle = function(brd, cfg) {
+ this.brd = brd;
this.cfg = cfg || {};
this.cfg.whilePossible = this.cfg.whilePossible || false;
this.cfg.clockwise = this.cfg.clockwise || false;
@@ -155,7 +155,7 @@
}
/** Select best direction for next step. */
ai.BlindCycle.prototype.analyse = function(brd2d) {
- var origBrd = new this.brdEngine(brd2d);
+ var origBrd = new this.brd(brd2d);
this.prevDir = this.prevDir || 0;
if (!this.cfg.whilePossible)
this.prevDir = this.nextDir(this.prevDir);
@@ -190,11 +190,11 @@
*/
/** 1 step deep with * AI.
- * @param {Board} brdEngine board engine from board.js
+ * @param {Board} brd board engine from board.js
* @param {ai.OneStepAhead.cfg} cfg configuration settings
* @constructor */
-ai.OneStepAhead = function(brdEngine, cfg) {
- this.brdEngine = brdEngine;
+ai.OneStepAhead = function(brd, cfg) {
+ this.brd = brd;
this.cfg = ai.copyObj(ai.OneStepAhead.bestCfg);
ai.copyObj(cfg, this.cfg);
}
@@ -216,8 +216,8 @@
}
/** Select best direction for next step. */
ai.OneStepAhead.prototype.analyse = function(brd2d) {
- var origBrd = new this.brdEngine(brd2d);
- var nextBrd = new this.brdEngine();
+ var origBrd = new this.brd(brd2d);
+ var nextBrd = new this.brd();
var maxWeight = -1;
var bestDir;
for (var i = 0; i < ai.dirs.length; i++) {
@@ -253,11 +253,11 @@
*/
/** Deep merges AI without random simulation.
- * @param {Board} brdEngine board engine from board.js
+ * @param {Board} brd board engine from board.js
* @param {Object} cfg configuration settings
* @constructor */
-ai.StaticDeepMerges = function(brdEngine, cfg) {
- this.brdEngine = brdEngine;
+ai.StaticDeepMerges = function(brd, cfg) {
+ this.brd = brd;
this.cfg = ai.copyObj(ai.OneStepAhead.bestCfg);
ai.copyObj(cfg, this.cfg);
}
@@ -279,8 +279,8 @@
}
/** Select best direction for next step. */
ai.StaticDeepMerges.prototype.analyse = function(brd2d) {
- var origBrd = new this.brdEngine(brd2d);
- var nextBrd = new this.brdEngine();
+ var origBrd = new this.brd(brd2d);
+ var nextBrd = new this.brd();
var prevScore = -1, nextScore = -1;
var maxWeight = -1;
var bestDir;
@@ -305,7 +305,7 @@
ai.StaticDeepMerges.prototype.evalFn = function(brd) {
var currScore = brd.score();
var maxWeight = currScore;
- var nextBrd = new this.brdEngine();
+ var nextBrd = new this.brd();
for (var i = 0; i < ai.dirs.length; i++) {
if (brd[ai.dirs[i]](nextBrd)) {
var score = nextBrd.score();
@@ -336,11 +336,11 @@
*/
/** N level deep with random simulation.
- * @param {Board} brdEngine board engine from board.js
+ * @param {Board} brd board engine from board.js
* @param {ai.expectimax.cfg} cfg configuration settings
* @constructor */
-ai.expectimax = function(brdEngine, cfg) {
- this.brdEngine = brdEngine;
+ai.expectimax = function(brd, cfg) {
+ this.brd = brd;
this.cfg = ai.copyObj(ai.expectimax.bestCfg);
ai.copyObj(cfg, this.cfg);
if (this.cfg.balance <= 0)
@@ -374,8 +374,8 @@
/** Select best direction for next step. */
ai.expectimax.prototype.analyse = function(brd2d) {
this.brdCache = new ai.brdCache();
- var origBrd = new this.brdEngine(brd2d);
- var nextBrd = new this.brdEngine();
+ var origBrd = new this.brd(brd2d);
+ var nextBrd = new this.brd();
var maxW = -1;
var bestDir;
this.cleanup();
@@ -403,8 +403,8 @@
if (wCached)
return wCached;
var wMin = +Infinity;
- var randBoard = new this.brdEngine();
- var nextBrd = new this.brdEngine();
+ var randBoard = new this.brd();
+ var nextBrd = new this.brd();
for (var i = 0; i < 3; i++) {
for (var j = 0; j < 3; j++) {
if (brd.get(i, j) === 0) {
@@ -453,25 +453,25 @@
*/
/** N level deep with random simulation.
- * @param {Board} brdEngine board engine from board.js
+ * @param {Board} brd board engine from board.js
* @param {ai.survive.cfg} cfg configuration settings
* @constructor */
-ai.survive = function(brdEngine, cfg) {
- this.brdEngine = brdEngine;
+ai.survive = function(brd, cfg) {
+ this.brd = brd;
this.cfg = ai.copyObj(ai.survive.bestCfg);
ai.copyObj(cfg, this.cfg);
if (this.cfg.freeCells <= 0)
this.cfg.freeCells = ai.survive.bestCfg.freeCells;
if (!this.cfg.maxDepth || this.cfg.maxDepth < 0 || 20 <= this.cfg.maxDepth)
this.cfg.maxDepth = ai.survive.bestCfg.maxDepth;
- this.cfg.altAI = new ai.StaticDeepMerges(brdEngine, ai.survive.altAICfg);
+ this.cfg.altAI = new ai.StaticDeepMerges(brd, ai.survive.altAICfg);
}
ai.survive.bestCfg = {freeCells: 8, maxDepth: 5};
ai.survive.altAICfg = {scoreCoef: 1, maxValCoef: 0, cornerBonus: 0, edgeBonus: 0, freeBonus: 0, weightThreshold: 0};
/** Select best direction for next step. */
ai.survive.prototype.analyse = function(brd2d) {
- var origBrd = new this.brdEngine(brd2d);
- var nextBrd = new this.brdEngine();
+ var origBrd = new this.brd(brd2d);
+ var nextBrd = new this.brd();
var bestW = -2;
var bestDir;
var freeCnt = origBrd.freeCnt();
@@ -495,8 +495,8 @@
if (depth >= this.cfg.maxDepth)
return 0;
var wMin = +Infinity;
- var randBoard = new this.brdEngine();
- var nextBrd = new this.brdEngine();
+ var randBoard = new this.brd();
+ var nextBrd = new this.brd();
exit:
for (var i = 0; i < 3; i++) {
for (var j = 0; j < 3; j++) {