From: Benjamin Auder <benjamin.auder@somewhere>
Date: Fri, 9 Sep 2022 15:51:24 +0000 (+0200)
Subject: Update TODO 'Weiqi rules' + draft setupPieces
X-Git-Url: https://git.auder.net/doc/html/app_dev.php/img/mini-custom.min.css?a=commitdiff_plain;h=f3824309fa7dffd121ebb859088362997cabe9c3;p=xogo.git

Update TODO 'Weiqi rules' + draft setupPieces
---

diff --git a/TODO b/TODO
index 78cb5dd..275ed22 100644
--- a/TODO
+++ b/TODO
@@ -1,9 +1,3 @@
-Berolina Bicolour Brotherhood
-For Baroque (and Fugue and...) --> maybe a dedicated parent class ?
-
-Go game with option oneColor (révélée à la fin phase counting -->).
-Endgame :: mode "counting", déplacements libres (indépendamment de chaque coté)
-
 add variants :
 Dark Racing Kings ? Checkered-Teleport ?
 
diff --git a/utils/setupPieces.js b/utils/setupPieces.js
new file mode 100644
index 0000000..f0a8cfc
--- /dev/null
+++ b/utils/setupPieces.js
@@ -0,0 +1,98 @@
+import {Random} from "/utils/alea.js";
+
+export class Fenutil = {
+
+  // arg o (constraints): "between" with p1 and p2.
+  //                      "flags", "diffCol": array of pieceType
+  setupRow(arr, o) {
+    let res = arr;
+    if (o.randomness >= 1)
+      res = Random.shuffle(arr);
+    let flags = "";
+    if (o.flags) {
+      res.forEach((p, i) => {
+        if (o.flags.includes(p))
+          flags += i;
+      });
+    }
+    if (o.between) {
+      // Locate p1. If appearing first, exchange with first p2.
+      // If appearing last, exchange with last p2.
+      res.findIndex(p => p == o.between["p1"])
+    }
+
+    return {fen: res, flags: flags};
+  }
+
+  setupPieces(arr, o) {
+    if (o.randomness == 0)
+
+
+    return {
+      row1: 
+
+
+
+  }
+};
+
+let fen, flags = "0707";
+    if (!this.options.randomness)
+      // Deterministic:
+      fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR";
+
+    else {
+      // Randomize
+      let pieces = {w: new Array(8), b: new Array(8)};
+      flags = "";
+      // Shuffle pieces on first (and last rank if randomness == 2)
+      for (let c of ["w", "b"]) {
+        if (c == 'b' && this.options.randomness == 1) {
+          pieces['b'] = pieces['w'];
+          flags += flags;
+          break;
+        }
+        let positions = ArrayFun.range(8);
+        // Get random squares for bishops
+        let randIndex = 2 * Random.randInt(4);
+        const bishop1Pos = positions[randIndex];
+        // The second bishop must be on a square of different color
+        let randIndex_tmp = 2 * Random.randInt(4) + 1;
+        const bishop2Pos = positions[randIndex_tmp];
+        // Remove chosen squares
+        positions.splice(Math.max(randIndex, randIndex_tmp), 1);
+        positions.splice(Math.min(randIndex, randIndex_tmp), 1);
+        // Get random squares for knights
+        randIndex = Random.randInt(6);
+        const knight1Pos = positions[randIndex];
+        positions.splice(randIndex, 1);
+        randIndex = Random.randInt(5);
+        const knight2Pos = positions[randIndex];
+        positions.splice(randIndex, 1);
+        // Get random square for queen
+        randIndex = Random.randInt(4);
+        const queenPos = positions[randIndex];
+        positions.splice(randIndex, 1);
+        // Rooks and king positions are now fixed,
+        // because of the ordering rook-king-rook
+        const rook1Pos = positions[0];
+        const kingPos = positions[1];
+        const rook2Pos = positions[2];
+        // Finally put the shuffled pieces in the board array
+        pieces[c][rook1Pos] = "r";
+        pieces[c][knight1Pos] = "n";
+        pieces[c][bishop1Pos] = "b";
+        pieces[c][queenPos] = "q";
+        pieces[c][kingPos] = "k";
+        pieces[c][bishop2Pos] = "b";
+        pieces[c][knight2Pos] = "n";
+        pieces[c][rook2Pos] = "r";
+        flags += rook1Pos.toString() + rook2Pos.toString();
+      }
+      fen = (
+        pieces["b"].join("") +
+        "/pppppppp/8/8/8/8/PPPPPPPP/" +
+        pieces["w"].join("").toUpperCase()
+      );
+    }
+    return { fen: fen, o: {flags: flags} };
diff --git a/variants/Weiqi/rules.html b/variants/Weiqi/rules.html
index c65158e..c73d844 100644
--- a/variants/Weiqi/rules.html
+++ b/variants/Weiqi/rules.html
@@ -1 +1,8 @@
-<p>TODO</p>
+<a href="https://en.wikipedia.org/wiki/Go_(game)">
+  Go game rules.
+</a>
+
+<p>
+  Warning: it's implemented here in a lazy way. Ko rule isn't checked,
+  and points are not counted in the end.
+</p>