projects
/
vchess.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add Tencubed and Omega variants + some fixes (updateCastleFlags()) + cleaner FEN...
[vchess.git]
/
client
/
src
/
variants
/
Grand.js
diff --git
a/client/src/variants/Grand.js
b/client/src/variants/Grand.js
index
f4a96ce
..
aeb7b6f
100644
(file)
--- a/
client/src/variants/Grand.js
+++ b/
client/src/variants/Grand.js
@@
-9,26
+9,22
@@
export class GrandRules extends ChessRules {
if (!ChessRules.IsGoodFen(fen)) return false;
const fenParsed = V.ParseFen(fen);
// 5) Check captures
if (!ChessRules.IsGoodFen(fen)) return false;
const fenParsed = V.ParseFen(fen);
// 5) Check captures
- if (!fenParsed.captured || !fenParsed.captured.match(/^[0-9]{1
4,14
}$/))
+ if (!fenParsed.captured || !fenParsed.captured.match(/^[0-9]{1
2,12
}$/))
return false;
return true;
}
static IsGoodEnpassant(enpassant) {
return false;
return true;
}
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;
}
static ParseFen(fen) {
const fenParts = fen.split(" ");
return true;
}
static ParseFen(fen) {
const fenParts = fen.split(" ");
- return Object.assign(ChessRules.ParseFen(fen), { captured: fenParts[5] });
+ return Object.assign(
+ ChessRules.ParseFen(fen),
+ { captured: fenParts[5] }
+ );
}
getPpath(b) {
}
getPpath(b) {
@@
-136,7
+132,7
@@
export class GrandRules extends ChessRules {
}
];
if (sx + 2 * step != ex) {
}
];
if (sx + 2 * step != ex) {
- //
3-squares move
+ //
3-squares jump
res.push({
x: sx + 2 * step,
y: sy
res.push({
x: sx + 2 * step,
y: sy
@@
-222,7
+218,7
@@
export class GrandRules 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) {
@@
-325,16
+321,20
@@
export class GrandRules extends ChessRules {
static GenRandInitFen(randomness) {
if (randomness == 0) {
static GenRandInitFen(randomness) {
if (randomness == 0) {
- // No castling in the official initial setup
- return "r8r/1nbqkmcbn1/pppppppppp/10/10/10/10/PPPPPPPPPP/1NBQKMCBN1/R8R " +
- "w 0 zzzz - 00000000000000";
+ return (
+ "r8r/1nbqkmcbn1/pppppppppp/91/91/91/91/PPPPPPPPPP/1NBQKMCBN1/R8R " +
+ // No castling in the official initial setup
+ "w 0 zzzz - 00000000000000"
+ );
}
let pieces = { w: new Array(10), b: new Array(10) };
}
let pieces = { w: new Array(10), b: new Array(10) };
+ let flags = "";
// Shuffle pieces on first and last rank
for (let c of ["w", "b"]) {
if (c == 'b' && randomness == 1) {
pieces['b'] = pieces['w'];
// Shuffle pieces on first and last rank
for (let c of ["w", "b"]) {
if (c == 'b' && randomness == 1) {
pieces['b'] = pieces['w'];
+ flags += flags;
break;
}
break;
}
@@
-373,7
+373,8
@@
export class GrandRules extends ChessRules {
let cardinalPos = positions[randIndex];
positions.splice(randIndex, 1);
let cardinalPos = positions[randIndex];
positions.splice(randIndex, 1);
- // Rooks and king positions are now fixed, because of the ordering rook-king-rook
+ // Rooks and king positions are now fixed,
+ // because of the ordering rook-king-rook
let rook1Pos = positions[0];
let kingPos = positions[1];
let rook2Pos = positions[2];
let rook1Pos = positions[0];
let kingPos = positions[1];
let rook2Pos = positions[2];
@@
-389,12
+390,13
@@
export class GrandRules 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("") +
- "/pppppppppp/
10/10/10/10/10/10
/PPPPPPPPPP/" +
+ "/pppppppppp/
91/91/91/91/91/91
/PPPPPPPPPP/" +
pieces["w"].join("").toUpperCase() +
pieces["w"].join("").toUpperCase() +
- " w 0
1111
- 00000000000000"
+ " w 0
" + flags + "
- 00000000000000"
);
}
};
);
}
};