| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113 |
1
1196
1000
1
1
1
1
1
1
1
1
1
1195
1195
1195
1195
1195
1
1000
1000
1000
1000
1000
1
1
3195
3195
3195
3195
3195
3195
3195
3195
3195
3195
3195
3195
3195
3195
3195
1
2195
17560
17560
1
1195
1195
1195
1195
9560
9560
9560
9560
1
5585
1
3195
1
19170
153360
153360
86265
67095
19170
1
12780
1
2195
| "use strict";
Object.defineProperties(exports, {
fischerandom: {get: function() {
return fischerandom;
}},
doubleFischerandom: {get: function() {
return doubleFischerandom;
}},
ninesixty: {get: function() {
return ninesixty;
}},
__esModule: {value: true}
});
var $__0 = require('./brands'),
WHITE = $__0.WHITE,
BLACK = $__0.BLACK,
DARK = $__0.DARK,
LIGHT = $__0.LIGHT;
var $__1 = require('./standard'),
King = $__1.King,
Queen = $__1.Queen,
Rook = $__1.Rook,
Bishop = $__1.Bishop,
Knight = $__1.Knight,
Pawn = $__1.Pawn;
var Point = require('./point').Point;
var Board = require('./board').Board;
var FEN = require('./fen').FEN;
var $__5 = require('./util'),
isEven = $__5.isEven,
isOdd = $__5.isOdd,
oppositeColor = $__5.oppositeColor;
var Die = require('jsdice');
function fischerandom() {
var board = new Board();
randomizeSide(board);
copySide(board);
placePawns(board);
return position(board);
}
;
function doubleFischerandom() {
var board = new Board();
randomizeSide(board, WHITE);
randomizeSide(board, BLACK);
placePawns(board);
return position(board);
}
;
var ninesixty = fischerandom;
function randomizeSide(board) {
var color = arguments[1] !== (void 0) ? arguments[1] : WHITE;
var rank = colorRank(color);
var place = placeOnEmptySquare.bind(null, rank, board);
var b1 = rollDie('d8');
board.placePiece(new Bishop({color: color}), new Point(b1, rank));
var b2 = rollDie('d4');
var b2Prime = colorClash(b1, b2) ? b2 + 1 : b2;
board.placePiece(new Bishop({color: color}), new Point(b2Prime, rank));
place(new Queen({color: color}), rollDie('d6'));
var n = rollDie('d20');
place(new Knight({color: color}), Math.floor(n / 4));
place(new Knight({color: color}), n % 4);
place(new Rook({color: color}), 0);
place(new King({color: color}), 0);
place(new Rook({color: color}), 0);
}
function placePawns(board) {
for (var j = 0; j < board.files; j++) {
board.placePiece(new Pawn({color: WHITE}), new Point(j, 6));
board.placePiece(new Pawn({color: BLACK}), new Point(j, 1));
}
}
function copySide(board) {
var color = arguments[1] !== (void 0) ? arguments[1] : BLACK;
var rank = colorRank(color);
var oppRank = colorRank(oppositeColor(color));
for (var j = 0; j < board.files; j++) {
try {
throw undefined;
} catch (Brand) {
{
Brand = $traceurRuntime.assertObject(board.getPieceByCoords(new Point(j, oppRank))).constructor;
board.placePiece(new Brand({color: color}), new Point(j, rank));
}
}
}
}
function colorRank(color) {
return color === WHITE ? 7 : 0;
}
function colorClash(a, b) {
return ((isEven(a) && isEven(b)) || (isOdd(a) && isOdd(b)));
}
function placeOnEmptySquare(rank, board, piece, n) {
for (var j = 0,
count = 0; j < board.files; j++) {
var point = new Point(j, rank);
if (board.getPieceByCoords(point) != null) {
continue;
}
if (n === count++) {
board.placePiece(piece, point);
}
}
}
function rollDie(signature) {
return new Die(signature).roll().total - 1;
}
function position(board) {
return FEN.standardPosition.beget({board: board});
}
|