// Modify capturing moves among listed pincer moves
addPincerCaptures(moves, byChameleon) {
const steps = this.pieces()['p'].moves[0].steps;
- const color = this.turn;
+ 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)
}
addCoordinatorCaptures(moves, byChameleon) {
- const color = this.turn;
+ const color = moves[0].vanish[0].c;
const oppCol = V.GetOppTurn(color);
const kp = this.searchKingPos(color)[0];
moves.forEach(m => {
getLeaperCaptures([x, y], byChameleon, onlyOne) {
// Look in every direction for captures
const steps = this.pieces()['r'].moves[0].steps;
- const color = this.turn;
+ const color = this.getColor(x, y);
const oppCol = C.GetOppTurn(color);
let moves = [];
outerLoop: for (let step of steps) {
[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])];
}
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");
// 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 color = moves[0].vanish[0].c;
const oppCol = C.GetOppTurn(color);
if (type != "push") {
adjacentSteps.forEach(step => {
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") {
}
}
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});
}
});
}
- 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 &&