projects
/
vchess.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[Pandemonium] Apply rules changes as given by the author
[vchess.git]
/
client
/
src
/
base_rules.js
diff --git
a/client/src/base_rules.js
b/client/src/base_rules.js
index
6502679
..
df15026
100644
(file)
--- a/
client/src/base_rules.js
+++ b/
client/src/base_rules.js
@@
-22,8
+22,8
@@
export const Move = class Move {
constructor(o) {
this.appear = o.appear;
this.vanish = o.vanish;
constructor(o) {
this.appear = o.appear;
this.vanish = o.vanish;
- this.start = o.start
? o.start :
{ x: o.vanish[0].x, y: o.vanish[0].y };
- this.end = o.end
? o.end :
{ x: o.appear[0].x, y: o.appear[0].y };
+ this.start = o.start
||
{ x: o.vanish[0].x, y: o.vanish[0].y };
+ this.end = o.end
||
{ x: o.appear[0].x, y: o.appear[0].y };
}
};
}
};
@@
-135,6
+135,15
@@
export const ChessRules = class ChessRules {
static get LoseOnRepetition() {
return false;
}
static get LoseOnRepetition() {
return false;
}
+ // And in some others (Iceage), repetitions should be ignored:
+ static get IgnoreRepetition() {
+ return false;
+ }
+
+ // At some stages, some games could wait clicks only:
+ onlyClick() {
+ return false;
+ }
// Some variants use click infos:
doClick() {
// Some variants use click infos:
doClick() {
@@
-163,7
+172,6
@@
export const ChessRules = class ChessRules {
// Check if FEN describes a board situation correctly
static IsGoodFen(fen) {
// Check if FEN describes a board situation correctly
static IsGoodFen(fen) {
-console.log("ddd");
const fenParsed = V.ParseFen(fen);
// 1) Check position
if (!V.IsGoodPosition(fenParsed.position)) return false;
const fenParsed = V.ParseFen(fen);
// 1) Check position
if (!V.IsGoodPosition(fenParsed.position)) return false;
@@
-438,8
+446,10
@@
console.log("ddd");
// if more than 9 consecutive free spaces, break the integer,
// otherwise FEN parsing will fail.
if (count <= 9) return count;
// if more than 9 consecutive free spaces, break the integer,
// otherwise FEN parsing will fail.
if (count <= 9) return count;
- // Currently only boards of size up to 11 or 12:
- return "9" + (count - 9);
+ // Most boards of size < 18:
+ if (count <= 18) return "9" + (count - 9);
+ // Except Gomoku:
+ return "99" + (count - 18);
};
let position = "";
for (let i = 0; i < V.size.x; i++) {
};
let position = "";
for (let i = 0; i < V.size.x; i++) {
@@
-663,7
+673,7
@@
console.log("ddd");
case V.QUEEN: return this.getPotentialQueenMoves(sq);
case V.KING: return this.getPotentialKingMoves(sq);
}
case V.QUEEN: return this.getPotentialQueenMoves(sq);
case V.KING: return this.getPotentialKingMoves(sq);
}
- return []; //never reached
+ return []; //never reached
(but some variants may use it: Bario...)
}
// Build a regular move from its initial and destination squares.
}
// Build a regular move from its initial and destination squares.
@@
-714,7
+724,7
@@
console.log("ddd");
let j = y + step[1];
while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
moves.push(this.getBasicMove([x, y], [i, j]));
let j = y + step[1];
while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
moves.push(this.getBasicMove([x, y], [i, j]));
- if (oneStep) continue outerLoop;
+ if (
!!
oneStep) continue outerLoop;
i += step[0];
j += step[1];
}
i += step[0];
j += step[1];
}
@@
-1031,6
+1041,9
@@
console.log("ddd");
// Stop at the first move found
// TODO: not really, it explores all moves from a square (one is enough).
// Stop at the first move found
// TODO: not really, it explores all moves from a square (one is enough).
+ // Possible fix: add extra arg "oneMove" to getPotentialMovesFrom,
+ // and then return only boolean true at first move found
+ // (in all getPotentialXXXMoves() ... for all variants ...)
atLeastOneMove() {
const color = this.turn;
for (let i = 0; i < V.size.x; i++) {
atLeastOneMove() {
const color = this.turn;
for (let i = 0; i < V.size.x; i++) {
@@
-1073,8
+1086,7
@@
console.log("ddd");
V.OnBoard(rx, ry) &&
this.board[rx][ry] != V.EMPTY &&
this.getPiece(rx, ry) == piece &&
V.OnBoard(rx, ry) &&
this.board[rx][ry] != V.EMPTY &&
this.getPiece(rx, ry) == piece &&
- this.getColor(rx, ry) == color &&
- this.canTake([rx, ry], [x, y]) //for Paco-Sako (TODO: necessary?)
+ this.getColor(rx, ry) == color
) {
return true;
}
) {
return true;
}