projects
/
vchess.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Remove castling as an option to escape from check in Allmate variants
[vchess.git]
/
client
/
src
/
variants
/
Wildebeest.js
diff --git
a/client/src/variants/Wildebeest.js
b/client/src/variants/Wildebeest.js
index
565f627
..
526da1a
100644
(file)
--- a/
client/src/variants/Wildebeest.js
+++ b/
client/src/variants/Wildebeest.js
@@
-2,7
+2,7
@@
import { ChessRules } from "@/base_rules";
import { ArrayFun } from "@/utils/array";
import { sample, randInt } from "@/utils/alea";
import { ArrayFun } from "@/utils/array";
import { sample, randInt } from "@/utils/alea";
-export c
onst VariantRules = c
lass WildebeestRules extends ChessRules {
+export class WildebeestRules extends ChessRules {
static get size() {
return { x: 10, y: 11 };
}
static get size() {
return { x: 10, y: 11 };
}
@@
-20,7
+20,9
@@
export const VariantRules = class WildebeestRules extends ChessRules {
static get steps() {
return Object.assign(
static get steps() {
return Object.assign(
- ChessRules.steps, //add camel moves:
+ {},
+ ChessRules.steps,
+ // Add camel moves:
{
c: [
[-3, -1],
{
c: [
[-3, -1],
@@
-37,14
+39,7
@@
export const VariantRules = class WildebeestRules extends ChessRules {
}
static IsGoodEnpassant(enpassant) {
}
static IsGoodEnpassant(enpassant) {
- if (enpassant != "-") {
- const squares = enpassant.split(",");
- if (squares.length > 2) return false;
- for (let sq of squares) {
- const ep = V.SquareToCoords(sq);
- if (isNaN(ep.x) || !V.OnBoard(ep)) return false;
- }
- }
+ if (enpassant != "-") return !!enpassant.match(/^([a-j][0-9]{1,2},?)+$/);
return true;
}
return true;
}
@@
-160,7
+155,7
@@
export const VariantRules = class WildebeestRules extends ChessRules {
// En passant
const Lep = this.epSquares.length;
const epSquare = this.epSquares[Lep - 1];
// En passant
const Lep = this.epSquares.length;
const epSquare = this.epSquares[Lep - 1];
- if (epSquare) {
+ if (
!!
epSquare) {
for (let epsq of epSquare) {
// TODO: some redundant checks
if (epsq.x == x + shiftX && Math.abs(epsq.y - y) == 1) {
for (let epsq of epSquare) {
// TODO: some redundant checks
if (epsq.x == x + shiftX && Math.abs(epsq.y - y) == 1) {
@@
-196,28
+191,28
@@
export const VariantRules = class WildebeestRules extends ChessRules {
);
}
);
}
- isAttacked(sq, color
s
) {
+ isAttacked(sq, color) {
return (
return (
- super.isAttacked(sq, color
s
) ||
- this.isAttackedByCamel(sq, color
s
) ||
- this.isAttackedByWildebeest(sq, color
s
)
+ super.isAttacked(sq, color) ||
+ this.isAttackedByCamel(sq, color) ||
+ this.isAttackedByWildebeest(sq, color)
);
}
);
}
- isAttackedByCamel(sq, color
s
) {
+ isAttackedByCamel(sq, color) {
return this.isAttackedBySlideNJump(
sq,
return this.isAttackedBySlideNJump(
sq,
- color
s
,
+ color,
V.CAMEL,
V.steps[V.CAMEL],
"oneStep"
);
}
V.CAMEL,
V.steps[V.CAMEL],
"oneStep"
);
}
- isAttackedByWildebeest(sq, color
s
) {
+ isAttackedByWildebeest(sq, color) {
return this.isAttackedBySlideNJump(
sq,
return this.isAttackedBySlideNJump(
sq,
- color
s
,
+ color,
V.WILDEBEEST,
V.steps[V.KNIGHT].concat(V.steps[V.CAMEL]),
"oneStep"
V.WILDEBEEST,
V.steps[V.KNIGHT].concat(V.steps[V.CAMEL]),
"oneStep"
@@
-225,10
+220,7
@@
export const VariantRules = class WildebeestRules extends ChessRules {
}
getCurrentScore() {
}
getCurrentScore() {
- if (this.atLeastOneMove())
- // game not over
- return "*";
-
+ if (this.atLeastOneMove()) return "*";
// No valid move: game is lost (stalemate is a win)
return this.turn == "w" ? "0-1" : "1-0";
}
// No valid move: game is lost (stalemate is a win)
return this.turn == "w" ? "0-1" : "1-0";
}
@@
-246,13
+238,19
@@
export const VariantRules = class WildebeestRules extends ChessRules {
static GenRandInitFen(randomness) {
if (!randomness) randomness = 2;
static GenRandInitFen(randomness) {
if (!randomness) randomness = 2;
- if (randomness == 0)
- return "rnccwkqbbnr/ppppppppppp/11/11/11/11/11/11/PPPPPPPPPPP/RNBBQKWCCNR w 0 1111 -";
+ if (randomness == 0) {
+ return (
+ "rnccwkqbbnr/ppppppppppp/92/92/92/92/92/92/PPPPPPPPPPP/RNBBQKWCCNR " +
+ "w 0 akak -"
+ );
+ }
- let pieces = { w: new Array(10), b: new Array(10) };
+ let pieces = { w: new Array(11), b: new Array(11) };
+ let flags = "";
for (let c of ["w", "b"]) {
if (c == 'b' && randomness == 1) {
pieces['b'] = pieces['w'];
for (let c of ["w", "b"]) {
if (c == 'b' && randomness == 1) {
pieces['b'] = pieces['w'];
+ flags += flags;
break;
}
break;
}
@@
-308,12
+306,13
@@
export const VariantRules = class WildebeestRules extends ChessRules {
pieces[c][bishop2Pos] = "b";
pieces[c][knight2Pos] = "n";
pieces[c][rook2Pos] = "r";
pieces[c][bishop2Pos] = "b";
pieces[c][knight2Pos] = "n";
pieces[c][rook2Pos] = "r";
+ flags += V.CoordToColumn(rook1Pos) + V.CoordToColumn(rook2Pos);
}
return (
pieces["b"].join("") +
}
return (
pieces["b"].join("") +
- "/ppppppppppp/
11/11/11/11/11/11
/PPPPPPPPPPP/" +
+ "/ppppppppppp/
92/92/92/92/92/92
/PPPPPPPPPPP/" +
pieces["w"].join("").toUpperCase() +
pieces["w"].join("").toUpperCase() +
- " w 0
1111
-"
+ " w 0
" + flags + "
-"
);
}
};
);
}
};