X-Git-Url: https://git.auder.net/images/pieces/Cwda/bd.svg?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FAmbiguous.js;h=9e096a721fbb444cdfee1dfe04a57c127af32739;hb=0e5fe2f0fa3a5d08e4ecfb71d106f6b33790188c;hp=29ab2ca6d98ff024c45438b7de52041eae0aa351;hpb=a15bd0dae6c5cf81a87fcec6bde7992bff0091d4;p=vchess.git diff --git a/client/src/variants/Ambiguous.js b/client/src/variants/Ambiguous.js index 29ab2ca6..9e096a72 100644 --- a/client/src/variants/Ambiguous.js +++ b/client/src/variants/Ambiguous.js @@ -1,5 +1,5 @@ import { ChessRules } from "@/base_rules"; -import { randInt } from "@/utils/alea"; +import { randInt, shuffle } from "@/utils/alea"; export class AmbiguousRules extends ChessRules { static get HasFlags() { @@ -19,8 +19,21 @@ export class AmbiguousRules extends ChessRules { 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];