projects
/
vchess.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix Checkered init FEN
[vchess.git]
/
client
/
src
/
variants
/
Koopa.js
diff --git
a/client/src/variants/Koopa.js
b/client/src/variants/Koopa.js
index
dbce842
..
38b3e88
100644
(file)
--- a/
client/src/variants/Koopa.js
+++ b/
client/src/variants/Koopa.js
@@
-1,6
+1,7
@@
import { ChessRules, PiPo } from "@/base_rules";
export class KoopaRules extends ChessRules {
import { ChessRules, PiPo } from "@/base_rules";
export class KoopaRules extends ChessRules {
+
static get HasEnpassant() {
return false;
}
static get HasEnpassant() {
return false;
}
@@
-58,7
+59,6
@@
export class KoopaRules extends ChessRules {
// stand for stunned indicator.
scanKings(fen) {
// stand for stunned indicator.
scanKings(fen) {
- this.INIT_COL_KING = { w: -1, b: -1 };
// Squares of white and black king:
this.kingPos = { w: [-1, -1], b: [-1, -1] };
const fenRows = V.ParseFen(fen).position.split("/");
// Squares of white and black king:
this.kingPos = { w: [-1, -1], b: [-1, -1] };
const fenRows = V.ParseFen(fen).position.split("/");
@@
-70,12
+70,10
@@
export class KoopaRules extends ChessRules {
case "k":
case "l":
this.kingPos["b"] = [i, k];
case "k":
case "l":
this.kingPos["b"] = [i, k];
- this.INIT_COL_KING["b"] = k;
break;
case "K":
case "L":
this.kingPos["w"] = [i, k];
break;
case "K":
case "L":
this.kingPos["w"] = [i, k];
- this.INIT_COL_KING["w"] = k;
break;
default: {
const num = parseInt(fenRows[i].charAt(j), 10);
break;
default: {
const num = parseInt(fenRows[i].charAt(j), 10);
@@
-118,7
+116,17
@@
export class KoopaRules extends ChessRules {
}
getPotentialMovesFrom([x, y]) {
}
getPotentialMovesFrom([x, y]) {
- let moves = super.getPotentialMovesFrom([x, y]);
+ let moves = super.getPotentialMovesFrom([x, y]).filter(m => {
+ if (
+ m.vanish[0].p != V.PAWN ||
+ m.appear[0].p == V.PAWN ||
+ m.vanish.length == 1
+ ) {
+ return true;
+ }
+ // Pawn promotion, "capturing": remove duplicates
+ return m.appear[0].p == V.QUEEN;
+ });
// Complete moves: stuns & kicks
let promoteAfterStun = [];
const color = this.turn;
// Complete moves: stuns & kicks
let promoteAfterStun = [];
const color = this.turn;
@@
-205,18
+213,26
@@
export class KoopaRules extends ChessRules {
return moves.concat(promoteAfterStun);
}
return moves.concat(promoteAfterStun);
}
+ getPotentialKingMoves(sq) {
+ return (
+ this.getSlideNJumpMoves(
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1
+ ).concat(super.getCastleMoves(sq, null, true, ['r']))
+ );
+ }
+
filterValid(moves) {
// Forbid kicking own king out
const color = this.turn;
return moves.filter(m => {
filterValid(moves) {
// Forbid kicking own king out
const color = this.turn;
return moves.filter(m => {
- const king
Appear = m.appear.some(a => a.c == color && a.p == V.KING);
- return m.vanish.every(v => {
- return (
- v.c != color ||
- !["k", "l"].includes(v.p) ||
- (v.p == "k" && kingAppear)
- );
-
})
;
+ const king
Vanish =
+ m.vanish.some(v => v.c == color && ['k', 'l'].includes(v.p));
+ if (kingVanish) {
+ const kingAppear =
+ m.appear.some(a => a.c == color && ['k', 'l'].includes(a.p));
+ return kingAppear;
+ }
+
return true
;
});
}
});
}
@@
-349,4
+365,5
@@
export class KoopaRules extends ChessRules {
}
return notation;
}
}
return notation;
}
+
};
};