X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=variants%2FGiveaway%2Fclass.js;h=39f586c1b0f3ff679e153a3a57510df96bba4d76;hb=HEAD;hp=15a8998c965ca4e68b8e1f71536b0fec931483a7;hpb=f31de5e46015a93dca20765da61670035ce8f491;p=xogo.git diff --git a/variants/Giveaway/class.js b/variants/Giveaway/class.js index 15a8998..45f6a34 100644 --- a/variants/Giveaway/class.js +++ b/variants/Giveaway/class.js @@ -1,6 +1,7 @@ import ChessRules from "/base_rules.js"; import {ArrayFun} from "/utils/array.js"; import {Random} from "/utils/alea.js"; +import {FenUtil} from "/utils/setupPieces.js"; export default class GiveawayRules extends ChessRules { @@ -37,43 +38,21 @@ export default class GiveawayRules extends ChessRules { } genRandInitBaseFen() { - if (this.options["mode"] == "losers") - return super.genRandInitBaseFen(); - - let fen = ""; - if (this.options["randomness"] == 0) - fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w 0"; - else { - let pieces = { w: new Array(8), b: new Array(8) }; - for (let c of ["w", "b"]) { - if (c == 'b' && this.options["randomness"] == 1) { - pieces['b'] = pieces['w']; - break; - } - // Get random squares for every piece, totally freely - let positions = Random.shuffle(ArrayFun.range(8)); - const composition = ['b', 'b', 'r', 'r', 'n', 'n', 'k', 'q']; - const rem2 = positions[0] % 2; - if (rem2 == positions[1] % 2) { - // Fix bishops (on different colors) - for (let i=2; i<8; i++) { - if (positions[i] % 2 != rem2) { - [positions[1], positions[i]] = [positions[i], positions[1]]; - break; - } - } - } - for (let i = 0; i < 8; i++) - pieces[c][positions[i]] = composition[i]; - } - fen = ( - pieces["b"].join("") + - "/pppppppp/8/8/8/8/PPPPPPPP/" + - pieces["w"].join("").toUpperCase() + - " w 0" - ); + let setupOpts = { + randomness: this.options["randomness"], + diffCol: ['b'] + }; + if (this.options["mode"] == "losers") { + setupOpts["between"] = [{p1: 'k', p2: 'r'}]; + setupOpts["flags"] = ['r']; } - return { fen: fen, o: {} }; + const s = FenUtil.setupPieces( + ['r', 'n', 'b', 'q', 'k', 'b', 'n', 'r'], setupOpts); + return { + fen: s.b.join("") + "/pppppppp/8/8/8/8/PPPPPPPP/" + + s.w.join("").toUpperCase(), + o: {flags: s.flags} + }; } constructor(o) { @@ -81,10 +60,10 @@ export default class GiveawayRules extends ChessRules { super(o); } - underCheck(square, oppCol) { + underCheck(square_s, oppCol) { if (this.options["mode"] == "suicide") return false; - return super.underCheck(square, oppCol); + return super.underCheck(square_s, oppCol); } getCurrentScore() {