X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=public%2Fjavascripts%2Fvariants%2FAtomic.js;h=21fbedb2a9b12f1b5a4ebe758de4514741d2ab59;hb=ffd4c71f82d7aaf8cf330a794f118c5de6f8d6e9;hp=f32e21d1ff29717bc608ef825e0808de8bfdd254;hpb=1af36beb39aa5d59735483e915fd1040f93eecca;p=vchess.git diff --git a/public/javascripts/variants/Atomic.js b/public/javascripts/variants/Atomic.js index f32e21d1..21fbedb2 100644 --- a/public/javascripts/variants/Atomic.js +++ b/public/javascripts/variants/Atomic.js @@ -30,10 +30,11 @@ class AtomicRules extends ChessRules getPotentialKingMoves([x,y]) { + const V = VariantRules; // King cannot capture: let moves = []; - let [sizeX,sizeY] = VariantRules.size; - const steps = VariantRules.steps[VariantRules.QUEEN]; + let [sizeX,sizeY] = V.size; + const steps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]); for (let step of steps) { var i = x + step[0]; @@ -58,39 +59,29 @@ class AtomicRules extends ChessRules updateVariables(move) { super.updateVariables(move); - - const c = this.getColor(move.start.x,move.start.y); - // Next condition to avoid conflicts with harmless castle moves - if (c != this.getColor(move.end.x,move.end.y) - && this.board[move.end.x][move.end.y] != VariantRules.EMPTY) + const color = this.getColor(move.start.x,move.start.y); + if (move.appear.length == 0) //capture { - const oppCol = this.getOppCol(c); - const oppFirstRank = (oppCol == "w" ? 7 : 0); - - // Did we explode our king ? (TODO: remove move earlier) - if (Math.abs(this.kingPos[c][0]-move.end.x) <= 1 - && Math.abs(this.kingPos[c][1]-move.end.y) <= 1) - { - this.kingPos[c] = [-1,-1]; - this.flags[c] = [false,false]; - } - - // Did we explode opponent king ? - if (Math.abs(this.kingPos[oppCol][0]-move.end.x) <= 1 - && Math.abs(this.kingPos[oppCol][1]-move.end.y) <= 1) + const firstRank = {"w": 7, "b": 0}; + for (let c of ["w","b"]) { - this.kingPos[oppCol] = [-1,-1]; - this.flags[oppCol] = [false,false]; - } - else - { - // Now check if opponent init rook(s) exploded - if (Math.abs(move.end.x-oppFirstRank) <= 1) + // Did we explode king of color c ? (TODO: remove move earlier) + if (Math.abs(this.kingPos[c][0]-move.end.x) <= 1 + && Math.abs(this.kingPos[c][1]-move.end.y) <= 1) + { + this.kingPos[c] = [-1,-1]; + this.castleFlags[c] = [false,false]; + } + else { - if (Math.abs(move.end.y-this.INIT_COL_ROOK[oppCol][0]) <= 1) - this.flags[oppCol][0] = false; - if (Math.abs(move.end.y-this.INIT_COL_ROOK[oppCol][1]) <= 1) - this.flags[oppCol][1] = false; + // Now check if init rook(s) exploded + if (Math.abs(move.end.x-firstRank[c]) <= 1) + { + if (Math.abs(move.end.y-this.INIT_COL_ROOK[c][0]) <= 1) + this.castleFlags[c][0] = false; + if (Math.abs(move.end.y-this.INIT_COL_ROOK[c][1]) <= 1) + this.castleFlags[c][1] = false; + } } } } @@ -126,7 +117,7 @@ class AtomicRules extends ChessRules res = false; // Otherwise, if we remain under check, move is not valid else - res = this.isAttacked(this.kingPos[c], oppCol); + res = this.isAttacked(this.kingPos[c], [oppCol]); this.undo(move); return res; } @@ -140,7 +131,7 @@ class AtomicRules extends ChessRules let res = [ ]; if (this.kingPos[c][0] < 0) res = [saveKingPos]; - else if (this.isAttacked(this.kingPos[c], this.getOppCol(c))) + else if (this.isAttacked(this.kingPos[c], [this.getOppCol(c)])) res = [ JSON.parse(JSON.stringify(this.kingPos[c])) ] this.undo(move); return res; @@ -152,7 +143,7 @@ class AtomicRules extends ChessRules const kp = this.kingPos[color]; if (kp[0] < 0) //king disappeared return color == "w" ? "0-1" : "1-0"; - if (!this.isAttacked(kp, this.getOppCol(color))) + if (!this.isAttacked(kp, [this.getOppCol(color)])) return "1/2"; // Checkmate return color == "w" ? "0-1" : "1-0";