X-Git-Url: https://git.auder.net/assets/rpsls.css?a=blobdiff_plain;f=utils%2FsetupPieces.js;h=2c8cceee81f5edd4ea8e6fc9c0d2ec7df24861f3;hb=ceeac4e82346ffba2d87d763df3cffcddaec912a;hp=7cd67790caa6b3f9c919907d58646488c670f90d;hpb=7c03823594cef3ce6e8da7ac1d7d3504c73695a9;p=xogo.git diff --git a/utils/setupPieces.js b/utils/setupPieces.js index 7cd6779..2c8ccee 100644 --- a/utils/setupPieces.js +++ b/utils/setupPieces.js @@ -1,10 +1,10 @@ import {Random} from "/utils/alea.js"; -export class FenUtil = { +export const FenUtil = { // arg o (constraints): "between" with p1 and p2. // "flags", "diffCol": array of pieceType - setupRow(arr, o) { + setupRow: function(arr, o) { let res = JSON.parse(JSON.stringify(arr)); if (o.randomness >= 1) res = Random.shuffle(arr); @@ -15,45 +15,47 @@ export class FenUtil = { flags += i; }); } - if (o.diffCol) { - o.diffCol.forEach(p => { - // Pieces of type p on different colors: - const firstP = res.indexOf(p), - lastP = res.lastIndexOf(p); - if ((firstP - lastP) % 2 != 0) { - const choice1 = Random.randBool() ? firstP : lastP; - let choice2; - do { - choice2 = Random.randInt(arr.length); + if (o.randomness >= 1) { + if (o.diffCol) { + o.diffCol.forEach(p => { + // Pieces of type p on different colors: + const firstP = res.indexOf(p), + lastP = res.lastIndexOf(p); + if ((firstP - lastP) % 2 != 0) { + const choice1 = Random.randBool() ? firstP : lastP; + let choice2; + do { + choice2 = Random.randInt(arr.length); + } + while ( + choice2 == choice1 || + o.diffCol.includes(choice2) || + (choice2 - choice1) % 2 != 0 + ); + res[choice1] = res[choice2]; + res[choice2] = p; } - while ( - choice2 == choice1 || - o.diffCol.includes(choice2) || - (choice2 - choice1) % 2 != 0 - ); - res[choice1] = res[choice2]; - res[choice2] = p; + }); + } + if (o.between) { + // Locate p1. If appearing first, exchange with first p2. + // If appearing last, exchange with last p2. + const p1 = res.indexOf(o.between["p1"]); + const firstP2 = res.indexOf(o.between["p2"]), + lastP2 = res.lastIndexOf(o.between["p2"]); + if (p1 < firstP2 || p1 > lastP2) { + res[p1] = o.between["p2"]; + if (p1 < firstP2) + res[firstP2] = o.between["p1"]; + else //p1 > lastP2 + res[lastP2] = o.between["p1"]; } - }); - } - if (o.between) { - // Locate p1. If appearing first, exchange with first p2. - // If appearing last, exchange with last p2. - const p1 = res.indexOf(o.between["p1"]); - const firstP2 = res.indexOf(o.between["p2"]), - lastP2 = res.lastIndexOf(o.between["p2"]); - if (p1 < firstP2 || p1 > lastP2) { - res[p1] = o.between["p2"]; - if (p1 < firstP2) - res[firstP2] = o.between["p1"]; - else //p1 > lastP2 - res[lastP2] = o.between["p1"]; } } return {fen: res, flags: flags}; - } + }, - setupPieces(arr, o) { + setupPieces: function(arr, o) { const row1 = FenUtil.setupRow(arr, o); const row2 = o.randomness == 2 ? FenUtil.setupRow(arr, o) : row1; return {