From a15bd0dae6c5cf81a87fcec6bde7992bff0091d4 Mon Sep 17 00:00:00 2001
From: Benjamin Auder <benjamin.auder@somewhere>
Date: Tue, 7 Apr 2020 00:50:13 +0200
Subject: [PATCH] Fix Ambiguous chess for computer play

---
 client/src/variants/Ambiguous.js | 30 +++++++++++++++++++++++++++---
 1 file changed, 27 insertions(+), 3 deletions(-)

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:
-- 
2.44.0