X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FCwda.js;h=e340ef52cc365d559f95140b8e0b7f96722be524;hb=a9fa8bec3a96ec7d53002932054cc500efbf3e80;hp=40127208b7a22b2fcc00fce2bf8124d0f27f2d37;hpb=f25f375ad0ee4797277510aab55fdb632adfde50;p=vchess.git diff --git a/client/src/variants/Cwda.js b/client/src/variants/Cwda.js index 40127208..e340ef52 100644 --- a/client/src/variants/Cwda.js +++ b/client/src/variants/Cwda.js @@ -55,8 +55,8 @@ export class CwdaRules extends ChessRules { 'n': 'w', 'b': 'f', 'q': 'c', - 'k': 'k', - 'p': 'p' + 'k': 'm', + 'p': 'z' }, // Nutty Knights 'N': { @@ -64,8 +64,8 @@ export class CwdaRules extends ChessRules { 'n': 'i', 'b': 't', 'q': 'l', - 'k': 'k', //TODO: e - 'p': 'p' //TODO: v + 'k': 'e', + 'p': 'v' }, // Remarkable Rookies 'R': { @@ -109,6 +109,26 @@ export class CwdaRules extends ChessRules { this.army2 = armies.charAt(1); } + scanKings(fen) { + this.kingPos = { w: [-1, -1], b: [-1, -1] }; + const fenRows = V.ParseFen(fen).position.split("/"); + for (let i = 0; i < fenRows.length; i++) { + let k = 0; + for (let j = 0; j < fenRows[i].length; j++) { + const newChar = fenRows[i].charAt(j); + if (['a', 'e', 'k', 'm'].includes(newChar)) + this.kingPos["b"] = [i, k]; + else if (['A', 'E', 'K', 'M'].includes(newChar)) + this.kingPos["w"] = [i, k]; + else { + const num = parseInt(fenRows[i].charAt(j), 10); + if (!isNaN(num)) k += num - 1; + } + k++; + } + } + } + static ParseFen(fen) { return Object.assign( { armies: fen.split(" ")[5] }, @@ -138,6 +158,12 @@ export class CwdaRules extends ChessRules { static get C_QUEEN() { return 'c'; } + static get C_KING() { + return 'm'; + } + static get C_PAWN() { + return 'z'; + } static get N_ROOK() { return 'g'; } @@ -177,15 +203,15 @@ export class CwdaRules extends ChessRules { getPiece(x, y) { const p = this.board[x][y][1]; - if (['u', 'v'].includes(p)) return 'p'; - if (['a', 'e'].includes(p)) return 'k'; + if (['u', 'v', 'z'].includes(p)) return 'p'; + if (['a', 'e', 'm'].includes(p)) return 'k'; return p; } static get PIECES() { return ChessRules.PIECES.concat( [ - V.C_ROOK, V.C_KNIGHT, V.C_BISHOP, V.C_QUEEN, + V.C_ROOK, V.C_KNIGHT, V.C_BISHOP, V.C_QUEEN, V.C_KING, V.C_PAWN, V.N_ROOK, V.N_KNIGHT, V.N_BISHOP, V.N_QUEEN, V.N_KING, V.N_PAWN, V.R_ROOK, V.R_KNIGHT, V.R_BISHOP, V.R_QUEEN, V.R_KING, V.R_PAWN ] @@ -572,6 +598,28 @@ export class CwdaRules extends ChessRules { return super.isAttackedByQueen(sq, color); } + postPlay(move) { + const c = V.GetOppCol(this.turn); + const piece = move.appear[0].p; + // Update king position + flags + if (['k', 'a', 'e', 'm'].includes(piece)) { + this.kingPos[c][0] = move.appear[0].x; + this.kingPos[c][1] = move.appear[0].y; + this.castleFlags[c] = [V.size.y, V.size.y]; + } + // Next call is still required because the king may eat an opponent's rook + // TODO: castleFlags will be turned off twice then. + super.updateCastleFlags(move, piece); + } + + postUndo(move) { + // (Potentially) Reset king position + const c = this.getColor(move.start.x, move.start.y); + const piece = move.appear[0].p; + if (['k', 'a', 'e', 'm'].includes(piece)) + this.kingPos[c] = [move.start.x, move.start.y]; + } + static get VALUES() { return Object.assign( { @@ -598,7 +646,7 @@ export class CwdaRules extends ChessRules { getNotation(move) { let notation = super.getNotation(move); - if (['u', 'v'].includes(move.appear[0].p)) + if (['u', 'v', 'z'].includes(move.appear[0].p)) notation = notation.slice(0, -2); return notation; }