board.js
changeset 93 c2bf15c3b80b
parent 57 94e1b2d0bd31
child 114 1c3fdde0d481
equal deleted inserted replaced
92:1959a0505639 93:c2bf15c3b80b
   762     for (var i = 0; i < 4; i++)
   762     for (var i = 0; i < 4; i++)
   763         for (var j = 0; j < 4; j++)
   763         for (var j = 0; j < 4; j++)
   764             brd[i][j] = this.brd[4*i + j];
   764             brd[i][j] = this.brd[4*i + j];
   765     return brd;
   765     return brd;
   766 }
   766 }
       
   767 BoardObj.prototype.equals = function(brd) {
       
   768     var self = this.brd;
       
   769     return self.aa == brd.aa && self.ad == brd.ad && self.da == brd.da && self.dd == brd.dd
       
   770         && self.ab == brd.ab && self.ac == brd.ac
       
   771         && self.ba == brd.ba && self.ca == brd.ca
       
   772         && self.bd == brd.bd && self.cd == brd.cd
       
   773         && self.db == brd.db && self.dc == brd.dc
       
   774         && self.bb == brd.bb && self.bc == brd.bc && self.cb == brd.cb && self.cc == brd.cc;
       
   775 };
       
   776 BoardObj.prototype.copy = function(brd) {
       
   777     var self = this.brd;
       
   778     if ( ! brd) {
       
   779         var newBrd = new Object(BoardObj.prototype);
       
   780         newBrd.brd = { aa: self.aa, ab: self.ab, ac: self.ac, ad: self.ad,
       
   781                        ba: self.ba, bb: self.bb, bc: self.bc, bd: self.bd,
       
   782                        ca: self.ca, cb: self.cb, cc: self.cc, cd: self.cd,
       
   783                        da: self.da, db: self.db, dc: self.dc, dd: self.dd };
       
   784         return newBrd;
       
   785     }
       
   786     brd.aa = self.aa; brd.ab = self.ab; brd.ac = self.ac; brd.ad = self.ad;
       
   787     brd.ba = self.ba; brd.bb = self.bb; brd.bc = self.bc; brd.bd = self.bd;
       
   788     brd.ca = self.ca; brd.cb = self.cb; brd.cc = self.cc; brd.cd = self.cd;
       
   789     brd.da = self.da; brd.db = self.db; brd.dc = self.dc; brd.dd = self.dd;
       
   790     return brd;
       
   791 }
       
   792 BoardObj.prototype.free = function() {
       
   793     var cnt = 0;
       
   794     var brd = this.brd;
       
   795     if (brd.aa === 0) cnt++; if (brd.ab === 0) cnt++; if (brd.ac === 0) cnt++; if (brd.ad === 0) cnt++;
       
   796     if (brd.ba === 0) cnt++; if (brd.bb === 0) cnt++; if (brd.bc === 0) cnt++; if (brd.bd === 0) cnt++;
       
   797     if (brd.ca === 0) cnt++; if (brd.cb === 0) cnt++; if (brd.cc === 0) cnt++; if (brd.cd === 0) cnt++;
       
   798     if (brd.da === 0) cnt++; if (brd.db === 0) cnt++; if (brd.dc === 0) cnt++; if (brd.dd === 0) cnt++;
       
   799     return cnt;
       
   800 }
       
   801 BoardObj.prototype.score = function() {
       
   802     var score = 0;
       
   803     var brd = this.brd;
       
   804     var v = brd.aa;
       
   805     if (v > 1) score += (v-1)*(1 << v);
       
   806     var v = brd.ab;
       
   807     if (v > 1) score += (v-1)*(1 << v);
       
   808     var v = brd.ac;
       
   809     if (v > 1) score += (v-1)*(1 << v);
       
   810     var v = brd.ad;
       
   811     if (v > 1) score += (v-1)*(1 << v);
       
   812     var v = brd.ba;
       
   813     if (v > 1) score += (v-1)*(1 << v);
       
   814     var v = brd.bb;
       
   815     if (v > 1) score += (v-1)*(1 << v);
       
   816     var v = brd.bc;
       
   817     if (v > 1) score += (v-1)*(1 << v);
       
   818     var v = brd.bd;
       
   819     if (v > 1) score += (v-1)*(1 << v);
       
   820     var v = brd.ca;
       
   821     if (v > 1) score += (v-1)*(1 << v);
       
   822     var v = brd.cb;
       
   823     if (v > 1) score += (v-1)*(1 << v);
       
   824     var v = brd.cc;
       
   825     if (v > 1) score += (v-1)*(1 << v);
       
   826     var v = brd.cd;
       
   827     if (v > 1) score += (v-1)*(1 << v);
       
   828     var v = brd.da;
       
   829     if (v > 1) score += (v-1)*(1 << v);
       
   830     var v = brd.db;
       
   831     if (v > 1) score += (v-1)*(1 << v);
       
   832     var v = brd.dc;
       
   833     if (v > 1) score += (v-1)*(1 << v);
       
   834     var v = brd.dd;
       
   835     if (v > 1) score += (v-1)*(1 << v);
       
   836     return score;
       
   837 }
       
   838 BoardObj.prototype.max = function() {
       
   839     var brd = this.brd;
       
   840     var max = brd.aa;
       
   841     max = Math.max(max, brd.ab);
       
   842     max = Math.max(max, brd.ac);
       
   843     max = Math.max(max, brd.ad);
       
   844     max = Math.max(max, brd.ba);
       
   845     max = Math.max(max, brd.bb);
       
   846     max = Math.max(max, brd.bc);
       
   847     max = Math.max(max, brd.bd);
       
   848     max = Math.max(max, brd.ca);
       
   849     max = Math.max(max, brd.cb);
       
   850     max = Math.max(max, brd.cc);
       
   851     max = Math.max(max, brd.cd);
       
   852     max = Math.max(max, brd.da);
       
   853     max = Math.max(max, brd.db);
       
   854     max = Math.max(max, brd.dc);
       
   855     max = Math.max(max, brd.dd);
       
   856     return max;
       
   857 }
       
   858 BoardObj.prototype.find = function(val) {
       
   859     var xy = [];
       
   860     var brd = this.brd;
       
   861     if (brd.aa === val) xy.push([0,0]); if (brd.ab === val) xy.push([0,1]); if (brd.ac === val) xy.push([0,2]); if (brd.ad === val) xy.push([0,3]);
       
   862     if (brd.ba === val) xy.push([1,0]); if (brd.bb === val) xy.push([1,1]); if (brd.bc === val) xy.push([1,2]); if (brd.bd === val) xy.push([1,3]);
       
   863     if (brd.ca === val) xy.push([2,0]); if (brd.cb === val) xy.push([2,1]); if (brd.cc === val) xy.push([2,2]); if (brd.cd === val) xy.push([2,3]);
       
   864     if (brd.da === val) xy.push([3,0]); if (brd.db === val) xy.push([3,1]); if (brd.dc === val) xy.push([3,2]); if (brd.dd === val) xy.push([3,3]);
       
   865     return xy;
       
   866 }
       
   867 BoardObj.prototype.atEdge = function(val) {
       
   868     var brd = this.brd;
       
   869     return (brd.aa === val) || (brd.ab === val) || (brd.ac === val) || (brd.ad === val)
       
   870         || (brd.ba === val) || (brd.bd === val)
       
   871         || (brd.ca === val) || (brd.cd === val)
       
   872         || (brd.da === val) || (brd.db === val) || (brd.dc === val) || (brd.dd === val);
       
   873 }
       
   874 BoardObj.prototype.atCorner = function(val) {
       
   875     var brd = this.brd;
       
   876     return (brd.aa === val) || (brd.ad === val) || (brd.da === val) || (brd.dd === val);
       
   877 }
       
   878 
       
   879 BoardObj.prototype.canRight = function() {
       
   880     var brd = this.brd;
       
   881     var f0 = brd.aa, f1 = brd.ab, f2 = brd.ac, f3 = brd.ad;
       
   882     if (f2 > 0 && (f2 === f3 || f3 === 0)) return true;
       
   883     if (f1 > 0 && (f1 === f2 || f2 === 0)) return true;
       
   884     if (f0 > 0 && (f0 === f1 || f1 === 0)) return true;
       
   885     var f0 = brd.ba, f1 = brd.bb, f2 = brd.bc, f3 = brd.bd;
       
   886     if (f2 > 0 && (f2 === f3 || f3 === 0)) return true;
       
   887     if (f1 > 0 && (f1 === f2 || f2 === 0)) return true;
       
   888     if (f0 > 0 && (f0 === f1 || f1 === 0)) return true;
       
   889     var f0 = brd.ca, f1 = brd.cb, f2 = brd.cc, f3 = brd.cd;
       
   890     if (f2 > 0 && (f2 === f3 || f3 === 0)) return true;
       
   891     if (f1 > 0 && (f1 === f2 || f2 === 0)) return true;
       
   892     if (f0 > 0 && (f0 === f1 || f1 === 0)) return true;
       
   893     var f0 = brd.da, f1 = brd.db, f2 = brd.dc, f3 = brd.dd;
       
   894     if (f2 > 0 && (f2 === f3 || f3 === 0)) return true;
       
   895     if (f1 > 0 && (f1 === f2 || f2 === 0)) return true;
       
   896     if (f0 > 0 && (f0 === f1 || f1 === 0)) return true;
       
   897     return false;
       
   898 }
       
   899 BoardObj.prototype.canLeft = function() {
       
   900     var brd = this.brd;
       
   901     var f0 = brd.aa, f1 = brd.ab, f2 = brd.ac, f3 = brd.ad;
       
   902     if (f1 > 0 && (f1 === f0 || f0 === 0)) return true;
       
   903     if (f2 > 0 && (f2 === f1 || f1 === 0)) return true;
       
   904     if (f3 > 0 && (f3 === f2 || f2 === 0)) return true;
       
   905     var f0 = brd.ba, f1 = brd.bb, f2 = brd.bc, f3 = brd.bd;
       
   906     if (f1 > 0 && (f1 === f0 || f0 === 0)) return true;
       
   907     if (f2 > 0 && (f2 === f1 || f1 === 0)) return true;
       
   908     if (f3 > 0 && (f3 === f2 || f2 === 0)) return true;
       
   909     var f0 = brd.ca, f1 = brd.cb, f2 = brd.cc, f3 = brd.cd;
       
   910     if (f1 > 0 && (f1 === f0 || f0 === 0)) return true;
       
   911     if (f2 > 0 && (f2 === f1 || f1 === 0)) return true;
       
   912     if (f3 > 0 && (f3 === f2 || f2 === 0)) return true;
       
   913     var f0 = brd.da, f1 = brd.db, f2 = brd.dc, f3 = brd.dd;
       
   914     if (f1 > 0 && (f1 === f0 || f0 === 0)) return true;
       
   915     if (f2 > 0 && (f2 === f1 || f1 === 0)) return true;
       
   916     if (f3 > 0 && (f3 === f2 || f2 === 0)) return true;
       
   917     return false;
       
   918 }
       
   919 BoardObj.prototype.canUp = function() {
       
   920     var brd = this.brd;
       
   921     var f0 = brd.aa, f1 = brd.ba, f2 = brd.ca, f3 = brd.da;
       
   922     if (f1 > 0 && (f1 === f0 || f0 === 0)) return true;
       
   923     if (f2 > 0 && (f2 === f1 || f1 === 0)) return true;
       
   924     if (f3 > 0 && (f3 === f2 || f2 === 0)) return true;
       
   925     var f0 = brd.ab, f1 = brd.bb, f2 = brd.cb, f3 = brd.db;
       
   926     if (f1 > 0 && (f1 === f0 || f0 === 0)) return true;
       
   927     if (f2 > 0 && (f2 === f1 || f1 === 0)) return true;
       
   928     if (f3 > 0 && (f3 === f2 || f2 === 0)) return true;
       
   929     var f0 = brd.ac, f1 = brd.bc, f2 = brd.cc, f3 = brd.dc;
       
   930     if (f1 > 0 && (f1 === f0 || f0 === 0)) return true;
       
   931     if (f2 > 0 && (f2 === f1 || f1 === 0)) return true;
       
   932     if (f3 > 0 && (f3 === f2 || f2 === 0)) return true;
       
   933     var f0 = brd.ad, f1 = brd.bd, f2 = brd.cd, f3 = brd.dd;
       
   934     if (f1 > 0 && (f1 === f0 || f0 === 0)) return true;
       
   935     if (f2 > 0 && (f2 === f1 || f1 === 0)) return true;
       
   936     if (f3 > 0 && (f3 === f2 || f2 === 0)) return true;
       
   937     return false;
       
   938 }
       
   939 BoardObj.prototype.canDown = function() {
       
   940     var brd = this.brd;
       
   941     var f0 = brd.aa, f1 = brd.ba, f2 = brd.ca, f3 = brd.da;
       
   942     if (f2 > 0 && (f2 === f3 || f3 === 0)) return true;
       
   943     if (f1 > 0 && (f1 === f2 || f2 === 0)) return true;
       
   944     if (f0 > 0 && (f0 === f1 || f1 === 0)) return true;
       
   945     var f0 = brd.ab, f1 = brd.bb, f2 = brd.cb, f3 = brd.db;
       
   946     if (f2 > 0 && (f2 === f3 || f3 === 0)) return true;
       
   947     if (f1 > 0 && (f1 === f2 || f2 === 0)) return true;
       
   948     if (f0 > 0 && (f0 === f1 || f1 === 0)) return true;
       
   949     var f0 = brd.ac, f1 = brd.bc, f2 = brd.cc, f3 = brd.dc;
       
   950     if (f2 > 0 && (f2 === f3 || f3 === 0)) return true;
       
   951     if (f1 > 0 && (f1 === f2 || f2 === 0)) return true;
       
   952     if (f0 > 0 && (f0 === f1 || f1 === 0)) return true;
       
   953     var f0 = brd.ad, f1 = brd.bd, f2 = brd.cd, f3 = brd.dd;
       
   954     if (f2 > 0 && (f2 === f3 || f3 === 0)) return true;
       
   955     if (f1 > 0 && (f1 === f2 || f2 === 0)) return true;
       
   956     if (f0 > 0 && (f0 === f1 || f1 === 0)) return true;
       
   957     return false;
       
   958 }
       
   959