X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=variants%2F_SpecialCaptures%2Fclass.js;h=7d9f78673201aef77f22065f40a30955c04f01a3;hb=b98feb3f6bb7e03319474f7a032e296750eb179f;hp=9b482669af50939ff86486cacdde8ed0361e3549;hpb=a89fb4e9c92632a2e8295048a86d7a0ae0a7ec46;p=xogo.git diff --git a/variants/_SpecialCaptures/class.js b/variants/_SpecialCaptures/class.js index 9b48266..7d9f786 100644 --- a/variants/_SpecialCaptures/class.js +++ b/variants/_SpecialCaptures/class.js @@ -22,8 +22,8 @@ export default class AbstractSpecialCaptureRules extends ChessRules { // Modify capturing moves among listed pincer moves addPincerCaptures(moves, byChameleon) { const steps = this.pieces()['p'].moves[0].steps; - const color = this.turn; - const oppCol = C.GetOppCol(color); + const color = moves[0].vanish[0].c; + const oppCol = C.GetOppTurn(color); moves.forEach(m => { if (byChameleon && m.start.x != m.end.x && m.start.y != m.end.y) // Chameleon not moving as pawn @@ -60,8 +60,8 @@ export default class AbstractSpecialCaptureRules extends ChessRules { } addCoordinatorCaptures(moves, byChameleon) { - const color = this.turn; - const oppCol = V.GetOppCol(color); + const color = moves[0].vanish[0].c; + const oppCol = V.GetOppTurn(color); const kp = this.searchKingPos(color)[0]; moves.forEach(m => { // Check piece-king rectangle (if any) corners for enemy pieces @@ -90,8 +90,8 @@ export default class AbstractSpecialCaptureRules extends ChessRules { getLeaperCaptures([x, y], byChameleon, onlyOne) { // Look in every direction for captures const steps = this.pieces()['r'].moves[0].steps; - const color = this.turn; - const oppCol = C.GetOppCol(color); + const color = this.getColor(x, y); + const oppCol = C.GetOppTurn(color); let moves = []; outerLoop: for (let step of steps) { let [i, j] = [x + step[0], this.getY(y + step[1])]; @@ -112,7 +112,7 @@ export default class AbstractSpecialCaptureRules extends ChessRules { [i, j] = [i + step[0], this.getY(j + step[1])]; while (this.onBoard(i, j) && this.board[i][j] == "") { let mv = this.getBasicMove([x, y], [i, j]); - Array.prorotype.push.apply(mv.vanish, vanished); + Array.prototype.push.apply(mv.vanish, vanished); moves.push(mv); [i, j] = [i + step[0], this.getY(j + step[1])]; } @@ -133,7 +133,7 @@ export default class AbstractSpecialCaptureRules extends ChessRules { getChameleonCaptures(moves, pushPullType, onlyOneJump) { const [x, y] = [moves[0].start.x, moves[0].start.y]; moves = moves.concat( - this.getKnightCaptures([x, y], "asChameleon", onlyOneJump)); + this.getLeaperCaptures([x, y], "asChameleon", onlyOneJump)); // No "king capture" because king cannot remain under check this.addPincerCaptures(moves, "asChameleon"); this.addCoordinatorCaptures(moves, "asChameleon"); @@ -154,13 +154,11 @@ export default class AbstractSpecialCaptureRules extends ChessRules { // type: nothing (freely, capture all), or pull or push, or "exclusive" addPushmePullyouCaptures(moves, byChameleon, type) { - if (moves.length == 0) - return; const [sx, sy] = [moves[0].start.x, moves[0].start.y]; const adjacentSteps = this.pieces()['r'].moves[0].steps; let capturingPullDir = {}; - const color = this.turn; - const oppCol = C.GetOppCol(color); + const color = moves[0].vanish[0].c; + const oppCol = C.GetOppTurn(color); if (type != "push") { adjacentSteps.forEach(step => { const [bi, bj] = [sx - step[0], this.getY(sy - step[1])]; @@ -177,8 +175,8 @@ export default class AbstractSpecialCaptureRules extends ChessRules { moves.forEach(m => { const [ex, ey] = [m.end.x, m.end.y]; const step = [ - ex != x ? (ex - x) / Math.abs(ex - x) : 0, - ey != y ? (ey - y) / Math.abs(ey - y) : 0 + ex != sx ? (ex - sx) / Math.abs(ex - sx) : 0, + ey != sy ? (ey - sy) / Math.abs(ey - sy) : 0 ]; let vanishPull, vanishPush; if (type != "pull") { @@ -194,7 +192,7 @@ export default class AbstractSpecialCaptureRules extends ChessRules { } } if (capturingPullDir[step[0] + "." + step[1]]) { - const [bi, bj] = [x - step[0], this.getY(y - step[1])]; + const [bi, bj] = [sx - step[0], this.getY(sy - step[1])]; vanishPull = new PiPo({x: bi, y: bj, p: this.getPiece(bi, bj), c: oppCol}); } @@ -216,14 +214,14 @@ export default class AbstractSpecialCaptureRules extends ChessRules { }); } - underAttack([x, y], oppCol) { + underAttack([x, y], oppCols) { // Generate all potential opponent moves, check if king captured. // TODO: do it more efficiently. const color = this.getColor(x, y); for (let i = 0; i < this.size.x; i++) { for (let j = 0; j < this.size.y; j++) { if ( - this.board[i][j] != "" && this.getColor(i, j) == oppCol && + this.board[i][j] != "" && oppCols.includes(this.getColor(i, j)) && this.getPotentialMovesFrom([i, j]).some(m => { return ( m.vanish.length >= 2 &&