X-Git-Url: https://git.auder.net/?p=xogo.git;a=blobdiff_plain;f=variants%2FGiveaway%2Fclass.js;h=15a8998c965ca4e68b8e1f71536b0fec931483a7;hp=71f70be0adec698837765446e07b3d4a222cf9de;hb=f31de5e46015a93dca20765da61670035ce8f491;hpb=bc2bc396ec4df092f218b58a0fbf08ba7eb8ca6e diff --git a/variants/Giveaway/class.js b/variants/Giveaway/class.js index 71f70be..15a8998 100644 --- a/variants/Giveaway/class.js +++ b/variants/Giveaway/class.js @@ -1,6 +1,6 @@ import ChessRules from "/base_rules.js"; -import { ArrayFun } from "/utils/array.js"; -import { Random } from "/utils/alea.js"; +import {ArrayFun} from "/utils/array.js"; +import {Random} from "/utils/alea.js"; export default class GiveawayRules extends ChessRules { @@ -36,47 +36,44 @@ export default class GiveawayRules extends ChessRules { return res; } - genRandInitFen(seed) { + genRandInitBaseFen() { if (this.options["mode"] == "losers") - return super.genRandInitFen(seed); + return super.genRandInitBaseFen(); - 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; + 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]; } - 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" + ); } - return ( - pieces["b"].join("") + - "/pppppppp/8/8/8/8/PPPPPPPP/" + - pieces["w"].join("").toUpperCase() + - // En-passant allowed, but no flags - ' w 0 {"enpassant":"-"}' - ); + return { fen: fen, o: {} }; } constructor(o) { @@ -84,14 +81,15 @@ export default class GiveawayRules extends ChessRules { super(o); } - underCheck([x, y], oppCol) { + underCheck(square, oppCol) { if (this.options["mode"] == "suicide") return false; - return super.underCheck([x, y], oppCol); + return super.underCheck(square, 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"); }