import { ChessRules } from "@/base_rules";
-import { randInt } from "@/utils/alea";
+import { randInt, shuffle } from "@/utils/alea";
+import { ArrayFun } from "@/utils/array";
export class AmbiguousRules extends ChessRules {
+
static get HasFlags() {
return false;
}
const oppCol = V.GetOppCol(color);
if (this.subTurn == 2) {
// Just play a normal move (which in fact only indicate a square)
+ let movesHash = {};
return (
super.getPotentialMovesFrom([x, y])
+ .filter(m => {
+ // Filter promotions: keep only one, since no choice now.
+ if (m.appear[0].p != m.vanish[0].p) {
+ const hash = V.CoordsToSquare(m.start) + V.CoordsToSquare(m.end);
+ if (!movesHash[hash]) {
+ movesHash[hash] = true;
+ return true;
+ }
+ return false;
+ }
+ return true;
+ })
.map(m => {
if (m.vanish.length == 1) m.appear[0].p = V.GOAL;
else m.appear[0].p = V.TARGET_CODE[m.vanish[1].p];
if (rem2 == positions[1] % 2) {
// Fix bishops (on different colors)
for (let i=2; i<8; i++) {
- if (positions[i] % 2 != rem2)
+ if (positions[i] % 2 != rem2) {
[positions[1], positions[i]] = [positions[i], positions[1]];
+ break;
+ }
}
}
for (let i = 0; i < 8; i++) pieces[c][positions[i]] = composition[i];
else move.vanish[1].p = V.TARGET_CODE[move.vanish[1].p];
return notation;
}
+
};