projects
/
vchess.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Move 'anonymousCount' which was computed to a method in Hall. Seems more accurate
[vchess.git]
/
client
/
src
/
variants
/
Grand.js
diff --git
a/client/src/variants/Grand.js
b/client/src/variants/Grand.js
index
c4e2eb1
..
d4f620f
100644
(file)
--- a/
client/src/variants/Grand.js
+++ b/
client/src/variants/Grand.js
@@
-5,10
+5,6
@@
import { randInt } from "@/utils/alea";
// NOTE: initial setup differs from the original; see
// https://www.chessvariants.com/large.dir/freeling.html
export const VariantRules = class GrandRules extends ChessRules {
// NOTE: initial setup differs from the original; see
// https://www.chessvariants.com/large.dir/freeling.html
export const VariantRules = class GrandRules extends ChessRules {
- static getPpath(b) {
- return ([V.MARSHALL, V.CARDINAL].includes(b[1]) ? "Grand/" : "") + b;
- }
-
static IsGoodFen(fen) {
if (!ChessRules.IsGoodFen(fen)) return false;
const fenParsed = V.ParseFen(fen);
static IsGoodFen(fen) {
if (!ChessRules.IsGoodFen(fen)) return false;
const fenParsed = V.ParseFen(fen);
@@
-35,10
+31,18
@@
export const VariantRules = class GrandRules extends ChessRules {
return Object.assign(ChessRules.ParseFen(fen), { captured: fenParts[5] });
}
return Object.assign(ChessRules.ParseFen(fen), { captured: fenParts[5] });
}
+ getPpath(b) {
+ return ([V.MARSHALL, V.CARDINAL].includes(b[1]) ? "Grand/" : "") + b;
+ }
+
getFen() {
return super.getFen() + " " + this.getCapturedFen();
}
getFen() {
return super.getFen() + " " + this.getCapturedFen();
}
+ getFenForRepeat() {
+ return super.getFenForRepeat() + "_" + this.getCapturedFen();
+ }
+
getCapturedFen() {
let counts = [...Array(14).fill(0)];
let i = 0;
getCapturedFen() {
let counts = [...Array(14).fill(0)];
let i = 0;
@@
-251,20
+255,20
@@
export const VariantRules = class GrandRules extends ChessRules {
);
}
);
}
- isAttacked(sq, color
s
) {
+ isAttacked(sq, color) {
return (
return (
- super.isAttacked(sq, color
s
) ||
- this.isAttackedByMarshall(sq, color
s
) ||
- this.isAttackedByCardinal(sq, color
s
)
+ super.isAttacked(sq, color) ||
+ this.isAttackedByMarshall(sq, color) ||
+ this.isAttackedByCardinal(sq, color)
);
}
);
}
- isAttackedByMarshall(sq, color
s
) {
+ isAttackedByMarshall(sq, color) {
return (
return (
- this.isAttackedBySlideNJump(sq, color
s
, V.MARSHALL, V.steps[V.ROOK]) ||
+ this.isAttackedBySlideNJump(sq, color, V.MARSHALL, V.steps[V.ROOK]) ||
this.isAttackedBySlideNJump(
sq,
this.isAttackedBySlideNJump(
sq,
- color
s
,
+ color,
V.MARSHALL,
V.steps[V.KNIGHT],
"oneStep"
V.MARSHALL,
V.steps[V.KNIGHT],
"oneStep"
@@
-272,12
+276,12
@@
export const VariantRules = class GrandRules extends ChessRules {
);
}
);
}
- isAttackedByCardinal(sq, color
s
) {
+ isAttackedByCardinal(sq, color) {
return (
return (
- this.isAttackedBySlideNJump(sq, color
s
, V.CARDINAL, V.steps[V.BISHOP]) ||
+ this.isAttackedBySlideNJump(sq, color, V.CARDINAL, V.steps[V.BISHOP]) ||
this.isAttackedBySlideNJump(
sq,
this.isAttackedBySlideNJump(
sq,
- color
s
,
+ color,
V.CARDINAL,
V.steps[V.KNIGHT],
"oneStep"
V.CARDINAL,
V.steps[V.KNIGHT],
"oneStep"
@@
-285,8
+289,8
@@
export const VariantRules = class GrandRules extends ChessRules {
);
}
);
}
-
updateVariables
(move) {
- super.
updateVariables
(move);
+
postPlay
(move) {
+ super.
postPlay
(move);
if (move.vanish.length == 2 && move.appear.length == 1) {
// Capture: update this.captured
this.captured[move.vanish[1].c][move.vanish[1].p]++;
if (move.vanish.length == 2 && move.appear.length == 1) {
// Capture: update this.captured
this.captured[move.vanish[1].c][move.vanish[1].p]++;
@@
-297,8
+301,8
@@
export const VariantRules = class GrandRules extends ChessRules {
}
}
}
}
-
unupdateVariables
(move) {
- super.
unupdateVariables
(move);
+
postUndo
(move) {
+ super.
postUndo
(move);
if (move.vanish.length == 2 && move.appear.length == 1)
this.captured[move.vanish[1].c][move.vanish[1].p]--;
if (move.vanish[0].p != move.appear[0].p)
if (move.vanish.length == 2 && move.appear.length == 1)
this.captured[move.vanish[1].c][move.vanish[1].p]--;
if (move.vanish[0].p != move.appear[0].p)
@@
-307,8
+311,8
@@
export const VariantRules = class GrandRules extends ChessRules {
static get VALUES() {
return Object.assign(
static get VALUES() {
return Object.assign(
- ChessRules.VALUES,
- { c: 5, m: 7 } //experimental
+ { c: 5, m: 7 }, //experimental
+ ChessRules.VALUES
);
}
);
}
@@
-316,10
+320,21
@@
export const VariantRules = class GrandRules extends ChessRules {
return 2;
}
return 2;
}
- static GenRandInitFen() {
+ 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";
+ }
+
let pieces = { w: new Array(10), b: new Array(10) };
// Shuffle pieces on first and last rank
for (let c of ["w", "b"]) {
let pieces = { w: new Array(10), b: new Array(10) };
// Shuffle pieces on first and last rank
for (let c of ["w", "b"]) {
+ if (c == 'b' && randomness == 1) {
+ pieces['b'] = pieces['w'];
+ break;
+ }
+
let positions = ArrayFun.range(10);
// Get random squares for bishops
let positions = ArrayFun.range(10);
// Get random squares for bishops