From: Benjamin Auder Date: Mon, 6 Apr 2020 22:50:13 +0000 (+0200) Subject: Fix Ambiguous chess for computer play X-Git-Url: https://git.auder.net/doc/html/%7B%7B%20asset%28%27mixstore/current/pieces/cq.svg?a=commitdiff_plain;h=a15bd0dae6c5cf81a87fcec6bde7992bff0091d4;p=vchess.git Fix Ambiguous chess for computer play --- diff --git a/client/src/variants/Ambiguous.js b/client/src/variants/Ambiguous.js index dea19d55..29ab2ca6 100644 --- a/client/src/variants/Ambiguous.js +++ b/client/src/variants/Ambiguous.js @@ -1,4 +1,5 @@ import { ChessRules } from "@/base_rules"; +import { randInt } from "@/utils/alea"; export class AmbiguousRules extends ChessRules { static get HasFlags() { @@ -118,11 +119,17 @@ export class AmbiguousRules extends ChessRules { let potentialMoves = []; for (let i = 0; i < V.size.x; i++) { for (let j = 0; j < V.size.y; j++) { + const colIJ = this.getColor(i, j); if ( this.board[i][j] != V.EMPTY && - this.getColor(i, j) == color && - this.board[i][j][1] != V.GOAL && - !(Object.keys(V.TARGET_DECODE).includes(this.board[i][j][1])) + ( + (this.subTurn == 2 && colIJ == color) || + ( + this.subTurn == 1 && colIJ != color && + this.board[i][j][1] != V.GOAL && + !(Object.keys(V.TARGET_DECODE).includes(this.board[i][j][1])) + ) + ) ) { Array.prototype.push.apply( potentialMoves, @@ -243,6 +250,23 @@ export class AmbiguousRules extends ChessRules { ); } + getComputerMove() { + let moves = this.getAllValidMoves(); + if (moves.length == 0) return null; + // Random mover for now + const color = this.turn; + const m1 = moves[randInt(moves.length)]; + this.play(m1); + let m = undefined; + if (this.turn != color) m = m1; + else { + const moves2 = this.getAllValidMoves(); + m = [m1, moves2[randInt(moves2.length)]]; + } + this.undo(m1); + return m; + } + getNotation(move) { if (this.subTurn == 2) return "T:" + V.CoordsToSquare(move.end); // Remove and re-add target to get a good notation: