1 import { ChessRules
} from "@/base_rules";
3 export class CaptureRules
extends ChessRules
{
4 // Trim all non-capturing moves
5 static KeepCaptures(moves
) {
6 return moves
.filter(m
=> m
.vanish
.length
== 2 && m
.appear
.length
== 1);
9 // Stop at the first capture found (if any)
11 const color
= this.turn
;
12 for (let i
= 0; i
< V
.size
.x
; i
++) {
13 for (let j
= 0; j
< V
.size
.y
; j
++) {
15 this.board
[i
][j
] != V
.EMPTY
&&
16 this.getColor(i
, j
) == color
&&
17 this.filterValid(this.getPotentialMovesFrom([i
, j
])).some(m
=> {
19 // Warning: discard castle moves
20 m
.vanish
.length
== 2 && m
.appear
.length
== 1 &&
21 this.filterValid([m
]).length
== 1
32 getPossibleMovesFrom(sq
) {
33 let moves
= this.filterValid(this.getPotentialMovesFrom(sq
));
34 const captureMoves
= V
.KeepCaptures(moves
);
35 if (captureMoves
.length
> 0) return captureMoves
;
36 if (this.atLeastOneCapture()) return [];
41 const moves
= super.getAllValidMoves();
42 if (moves
.some(m
=> m
.vanish
.length
== 2 && m
.appear
.length
== 1))
43 return V
.KeepCaptures(moves
);