ee1030ac3c0d82cd7dc23355862314d6bb08a36d
[xogo.git] / variants / Antiking2 / class.js
1 import ChessRules from "/base_rules.js";
2 import AbstractAntikingRules from "/variants/_Antiking/class.js";
3 import {Random} from "/utils/alea.js";
4
5 export default class Antiking2Rules extends AbstractAntikingRules {
6
7 static get Options() {
8 return {
9 select: C.Options.select,
10 styles: A.Options.styles.concat("cylinder")
11 };
12 }
13
14 genRandInitFen(seed) {
15 const baseFen = super.genRandInitFen(seed);
16 // Just add an antiking on 3rd ranks
17 let akPos = [3, 3];
18 if (this.options.randomness >= 1) {
19 akPos[0] = Random.randInt(this.size.y);
20 if (this.options.randomness == 2)
21 akPos[1] = Random.randInt(this.size.y);
22 else
23 akPos[1] = akPos[0];
24 }
25 const antikingLine = (color) => {
26 const [idx, symbol] = (color == 'w' ? [0, 'a'] : [1, 'A']);
27 return (
28 (akPos[idx] > 0 ? akPos[idx] : "") + symbol +
29 (akPos[idx] < this.size.y - 1
30 ? C.FenEmptySquares(this.size.y - 1 - akPos[idx])
31 : "")
32 );
33 };
34 return (
35 baseFen.replace("p/8", "p/" + antikingLine('b'))
36 .replace("8/P", antikingLine('w') + "/P")
37 );
38 }
39
40 };