X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=variants%2FGiveaway%2Fclass.js;h=39f586c1b0f3ff679e153a3a57510df96bba4d76;hb=HEAD;hp=69addf2191717300ec87f58535c21df593669298;hpb=f3e90e30b6e7ff416afe288bc9dd865e5daf9860;p=xogo.git diff --git a/variants/Giveaway/class.js b/variants/Giveaway/class.js index 69addf2..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 { @@ -36,47 +37,22 @@ export default class GiveawayRules extends ChessRules { return res; } - genRandInitFen(seed) { - if (this.options["mode"] == "losers") - return super.genRandInitFen(seed); - - if (this.options["randomness"] == 0) { - return ( - 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w 0 {"enpassant":"-"}' - ); - } - - Random.setSeed(seed); - 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]; + genRandInitBaseFen() { + let setupOpts = { + randomness: this.options["randomness"], + diffCol: ['b'] + }; + if (this.options["mode"] == "losers") { + setupOpts["between"] = [{p1: 'k', p2: 'r'}]; + setupOpts["flags"] = ['r']; } - return ( - pieces["b"].join("") + - "/pppppppp/8/8/8/8/PPPPPPPP/" + - pieces["w"].join("").toUpperCase() + - // En-passant allowed, but no flags - ' w 0 {"enpassant":"-"}' - ); + 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) { @@ -84,14 +60,15 @@ 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() { - if (this.atLeastOneMove()) return "*"; + if (this.atLeastOneMove(this.turn)) + return "*"; // No valid move: the side who cannot move wins return (this.turn == "w" ? "1-0" : "0-1"); }