X-Git-Url: https://git.auder.net/?a=blobdiff_plain;ds=sidebyside;f=public%2Fjavascripts%2Fvariants%2FAtomic.js;h=28ee1f267bdc95983260f949c237e5094b178fe2;hb=61a262b2a441bb27d87701f7d3818723b3ac913d;hp=a6934e739af546744f14d78a4a605ba8d3c14d30;hpb=cf1303697774a12ef9bb154014a38797716944cf;p=vchess.git diff --git a/public/javascripts/variants/Atomic.js b/public/javascripts/variants/Atomic.js index a6934e73..28ee1f26 100644 --- a/public/javascripts/variants/Atomic.js +++ b/public/javascripts/variants/Atomic.js @@ -8,7 +8,7 @@ class AtomicRules extends ChessRules moves.forEach(m => { if (m.vanish.length > 1 && m.appear.length <= 1) //avoid castles { - // Explosion! TODO: drop moves which explode our king here + // Explosion! TODO(?): drop moves which explode our king here let steps = [ [-1,-1],[-1,0],[-1,1],[0,-1],[0,1],[1,-1],[1,0],[1,1] ]; for (let step of steps) { @@ -17,7 +17,8 @@ class AtomicRules extends ChessRules if (x>=0 && x<8 && y>=0 && y<8 && this.board[x][y] != VariantRules.EMPTY && this.getPiece(x,y) != VariantRules.PAWN) { - m.vanish.push(new PiPo({p:this.getPiece(x,y),c:this.getColor(x,y),x:x,y:y})); + m.vanish.push( + new PiPo({p:this.getPiece(x,y),c:this.getColor(x,y),x:x,y:y})); } } m.end = {x:m.appear[0].x, y:m.appear[0].y}; @@ -47,8 +48,11 @@ class AtomicRules extends ChessRules isAttacked(sq, colors) { - if (this.getPiece(sq[0],sq[1]) == VariantRules.KING && this.isAttackedByKing(sq, colors)) + if (this.getPiece(sq[0],sq[1]) == VariantRules.KING + && this.isAttackedByKing(sq, colors)) + { return false; //king cannot take... + } return (this.isAttackedByPawn(sq, colors) || this.isAttackedByRook(sq, colors) || this.isAttackedByKnight(sq, colors) @@ -59,39 +63,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.castleFlags[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) - { - this.kingPos[oppCol] = [-1,-1]; - this.castleFlags[oppCol] = [false,false]; - } - else + const firstRank = {"w": 7, "b": 0}; + for (let c of ["w","b"]) { - // 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) { - if (Math.abs(move.end.y-this.INIT_COL_ROOK[oppCol][0]) <= 1) - this.castleFlags[oppCol][0] = false; - if (Math.abs(move.end.y-this.INIT_COL_ROOK[oppCol][1]) <= 1) - this.castleFlags[oppCol][1] = false; + this.kingPos[c] = [-1,-1]; + this.castleFlags[c] = [false,false]; + } + else + { + // 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; + } } } } @@ -155,7 +149,6 @@ class AtomicRules extends ChessRules return color == "w" ? "0-1" : "1-0"; if (!this.isAttacked(kp, [this.getOppCol(color)])) return "1/2"; - // Checkmate - return color == "w" ? "0-1" : "1-0"; + return color == "w" ? "0-1" : "1-0"; //checkmate } }