X-Git-Url: https://git.auder.net/?p=vchess.git;a=blobdiff_plain;f=public%2Fjavascripts%2Fvariants%2FMagnetic.js;h=ec2c975207d176d2edbff4e98ac8442f136b778c;hp=03912e7e81a32cf8bc3c80540f6505117e05cd6b;hb=9d218497ab97bc0e94ec4c1f0a40cf02df3ea0d4;hpb=1221ac47836806efb287b0323b92957d9129c653 diff --git a/public/javascripts/variants/Magnetic.js b/public/javascripts/variants/Magnetic.js index 03912e7e..ec2c9752 100644 --- a/public/javascripts/variants/Magnetic.js +++ b/public/javascripts/variants/Magnetic.js @@ -137,10 +137,11 @@ class MagneticRules extends ChessRules return moves; } - // TODO: verify this assertion atLeastOneMove() { - return true; //always at least one possible move + if (this.kingPos[this.turn][0] < 0) + return false; + return true; //TODO: is it right? } underCheck(move) @@ -165,8 +166,8 @@ class MagneticRules extends ChessRules { super.updateVariables(move); const c = this.getColor(move.start.x,move.start.y); - if (c != this.getColor(move.end.x,move.end.y) - && this.board[move.end.x][move.end.y] != VariantRules.EMPTY + if (this.board[move.end.x][move.end.y] != VariantRules.EMPTY + && c != this.getColor(move.end.x,move.end.y) && this.getPiece(move.end.x,move.end.y) == VariantRules.KING) { // We took opponent king ! @@ -174,6 +175,16 @@ class MagneticRules extends ChessRules this.kingPos[oppCol] = [-1,-1]; this.castleFlags[oppCol] = [false,false]; } + // Did we magnetically move our (init) rooks or opponents' ones ? + const firstRank = (c == "w" ? 7 : 0); + const oppFirstRank = 7 - firstRank; + const oppCol = this.getOppCol(c); + move.vanish.forEach(psq => { + if (psq.x == firstRank && this.INIT_COL_ROOK[c].includes(psq.y)) + this.castleFlags[c][psq.y==this.INIT_COL_ROOK[c][0] ? 0 : 1] = false; + else if (psq.x == oppFirstRank && this.INIT_COL_ROOK[oppCol].includes(psq.y)) + this.castleFlags[oppCol][psq.y==this.INIT_COL_ROOK[oppCol][0] ? 0 : 1] = false; + }); } unupdateVariables(move) @@ -195,19 +206,6 @@ class MagneticRules extends ChessRules } } - checkGameOver() - { - if (this.checkRepetition()) - return "1/2"; - - const color = this.turn; - // TODO: do we need "atLeastOneMove()"? - if (this.atLeastOneMove() && this.kingPos[color][0] >= 0) - return "*"; - - return this.checkGameEnd(); - } - checkGameEnd() { // No valid move: our king disappeared