import { ArrayFun } from "@/utils/array";
import { randInt } from "@/utils/alea";
-export const VariantRules = class GrasshopperRules extends ChessRules {
+export class GrasshopperRules extends ChessRules {
static get HasEnpassant() {
return false;
}
+ static get PawnSpecs() {
+ return Object.assign(
+ {},
+ ChessRules.PawnSpecs,
+ {
+ twoSquares: false,
+ promotions: ChessRules.PawnSpecs.promotions.concat([V.GRASSHOPPER])
+ }
+ );
+ }
+
static get GRASSHOPPER() {
return "g";
}
return moves;
}
- isAttacked(sq, colors) {
+ isAttacked(sq, color) {
return (
- super.isAttacked(sq, colors) ||
- this.isAttackedByGrasshopper(sq, colors)
+ super.isAttacked(sq, color) ||
+ this.isAttackedByGrasshopper(sq, color)
);
}
- isAttackedByGrasshopper([x, y], colors) {
+ isAttackedByGrasshopper([x, y], color) {
// Reversed process: is there an adjacent obstacle,
// and a grasshopper next in the same line?
for (const step of V.steps[V.ROOK].concat(V.steps[V.BISHOP])) {
if (
V.OnBoard(i, j) &&
this.getPiece(i, j) == V.GRASSHOPPER &&
- colors.includes(this.getColor(i, j))
+ this.getColor(i, j) == color
) {
return true;
}
static GenRandInitFen(randomness) {
return ChessRules.GenRandInitFen(randomness)
- .replace("w 0 1111 -", "w 0 1111")
+ .slice(0, -2)
.replace(
"/pppppppp/8/8/8/8/PPPPPPPP/",
"/gggggggg/pppppppp/8/8/PPPPPPPP/GGGGGGGG/"