X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FEmpire.js;h=d04e4a82fc5d2e43a66745a6ec6c00dde409a1e7;hb=HEAD;hp=2ce84930e348569397d2676de96beac3e74a3cde;hpb=1269441e90bb8437bc63cc6cca63ca050f1e2aae;p=vchess.git diff --git a/client/src/variants/Empire.js b/client/src/variants/Empire.js index 2ce84930..d04e4a82 100644 --- a/client/src/variants/Empire.js +++ b/client/src/variants/Empire.js @@ -23,8 +23,8 @@ export class EmpireRules extends ChessRules { return (b[0] == 'w' ? "Empire/" : "") + b; } - static GenRandInitFen(randomness) { - if (randomness == 0) + static GenRandInitFen(options) { + if (options.randomness == 0) return "rnbqkbnr/pppppppp/8/8/8/PPPSSPPP/8/TECDKCET w 0 ah -"; // Mapping kingdom --> empire: @@ -36,7 +36,7 @@ export class EmpireRules extends ChessRules { 'K': 'K' }; - const baseFen = ChessRules.GenRandInitFen(randomness); + const baseFen = ChessRules.GenRandInitFen(options); return ( baseFen.substr(0, 24) + "PPPSSPPP/8/" + baseFen.substr(35, 8).split('').map(p => piecesMap[p]).join('') + @@ -164,9 +164,6 @@ export class EmpireRules extends ChessRules { // or if move.end.x == enemy king rank. const color = this.getColor(sq[0], sq[1]); const oppCol = V.GetOppCol(color); - // check == -1 if (row, or col) unchecked, 1 if checked and occupied, - // 0 if checked and clear - let check = [-1, -1]; return moves.filter(m => { if ( m.end.y != this.kingPos[oppCol][1] && @@ -174,13 +171,15 @@ export class EmpireRules extends ChessRules { ) { return true; } + // check == -1 if (row, or col) unchecked, 1 if checked and occupied, + // 0 if checked and clear + let check = [-1, -1]; // TODO: factor two next "if"... if (m.end.x == this.kingPos[oppCol][0]) { if (check[0] < 0) { // Do the check: check[0] = 0; - let [kingPos1, kingPos2] = - [this.kingPos[color][1], this.kingPos[oppCol][1]]; + let [kingPos1, kingPos2] = [m.end.y, this.kingPos[oppCol][1]]; if (kingPos1 > kingPos2) [kingPos1, kingPos2] = [kingPos2, kingPos1]; for (let i = kingPos1 + 1; i < kingPos2; i++) { if (this.board[m.end.x][i] != V.EMPTY) { @@ -197,8 +196,7 @@ export class EmpireRules extends ChessRules { if (check[1] < 0) { // Do the check: check[1] = 0; - let [kingPos1, kingPos2] = - [this.kingPos[color][0], this.kingPos[oppCol][0]]; + let [kingPos1, kingPos2] = [m.end.x, this.kingPos[oppCol][0]]; if (kingPos1 > kingPos2) [kingPos1, kingPos2] = [kingPos2, kingPos1]; for (let i = kingPos1 + 1; i < kingPos2; i++) { if (this.board[i][m.end.y] != V.EMPTY) { @@ -213,6 +211,7 @@ export class EmpireRules extends ChessRules { }); } + // TODO: some merging to do with Orda method (and into base_rules.js) getSlideNJumpMoves_([x, y], steps, oneStep) { let moves = []; outerLoop: for (let step of steps) { @@ -223,7 +222,7 @@ export class EmpireRules extends ChessRules { if (!step.onlyTake) moves.push(this.getBasicMove([x, y], [i, j])); // NOTE: (bad) HACK here, since onlyTake is true only for Eagle // capturing moves, which are oneStep... - if (!!oneStep || !!step.onlyTake) continue outerLoop; + if (oneStep || step.onlyTake) continue outerLoop; i += s[0]; j += s[1]; } @@ -320,10 +319,7 @@ export class EmpireRules extends ChessRules { if (this.getColor(x, y) == 'b') return super.getPotentialKingMoves([x, y]); // Empire doesn't castle: return super.getSlideNJumpMoves( - [x, y], - V.steps[V.ROOK].concat(V.steps[V.BISHOP]), - "oneStep" - ); + [x, y], V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1); } getPotentialSoldierMoves([x, y]) { @@ -334,7 +330,7 @@ export class EmpireRules extends ChessRules { if (!lastRank) steps.push([shiftX, 0]); if (y > 0) steps.push([0, -1]); if (y < 9) steps.push([0, 1]); - return super.getSlideNJumpMoves([x, y], steps, "oneStep"); + return super.getSlideNJumpMoves([x, y], steps, 1); } isAttacked(sq, color) { @@ -358,7 +354,7 @@ export class EmpireRules extends ChessRules { isAttackedByEagle(sq, color) { return super.isAttackedBySlideNJump( - sq, color, V.EAGLE, V.steps[V.KNIGHT], "oneStep"); + sq, color, V.EAGLE, V.steps[V.KNIGHT], 1); } isAttackedByCardinal(sq, color) { @@ -370,7 +366,7 @@ export class EmpireRules extends ChessRules { return ( super.isAttackedBySlideNJump( sq, color, V.DUKE, - V.steps[V.ROOK].concat(V.steps[V.BISHOP]), "oneStep" + V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1 ) ); } @@ -378,7 +374,7 @@ export class EmpireRules extends ChessRules { isAttackedBySoldier([x, y], color) { const shiftX = (color == 'w' ? 1 : -1); //shift from king return super.isAttackedBySlideNJump( - [x, y], color, V.SOLDIER, [[shiftX, 0], [0, 1], [0, -1]], "oneStep"); + [x, y], color, V.SOLDIER, [[shiftX, 0], [0, 1], [0, -1]], 1); } updateCastleFlags(move, piece) {