Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,78 @@
|
|||
Array.prototype.shuffle = function() {
|
||||
for (let i = this.length - 1; i > 0; i--) {
|
||||
let j = Math.floor(Math.random() * (i + 1));
|
||||
[this[i], this[j]] = [this[j], this[i]];
|
||||
}
|
||||
}
|
||||
|
||||
function randomFEN() {
|
||||
|
||||
let board = [];
|
||||
for (let x = 0; x < 8; x++) board.push('. . . . . . . .'.split(' '));
|
||||
|
||||
function getRandPos() {
|
||||
return [Math.floor(Math.random() * 8), Math.floor(Math.random() * 8)];
|
||||
}
|
||||
|
||||
function isOccupied(pos) {
|
||||
return board[pos[0]][pos[1]] != '.';
|
||||
}
|
||||
|
||||
function isAdjacent(pos1, pos2) {
|
||||
if (pos1[0] == pos2[0] || pos1[0] == pos2[0]-1 || pos1[0] == pos2[0]+1)
|
||||
if (pos1[1] == pos2[1] || pos1[1] == pos2[1]-1 || pos1[1] == pos2[1]+1)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
// place kings
|
||||
let wk, bk;
|
||||
do { wk = getRandPos(); bk = getRandPos(); }
|
||||
while (isAdjacent(wk, bk));
|
||||
board[wk[0]][wk[1]] = 'K';
|
||||
board[bk[0]][bk[1]] = 'k';
|
||||
|
||||
// get peaces
|
||||
let peaces = [];
|
||||
let names = 'PRNBQ';
|
||||
function pick() {
|
||||
for (x = 1; x < Math.floor(Math.random() * 32); x++)
|
||||
peaces.push(names[Math.floor(Math.random() * names.length)]);
|
||||
}
|
||||
pick();
|
||||
names = names.toLowerCase();
|
||||
pick();
|
||||
peaces.shuffle();
|
||||
|
||||
// place peaces
|
||||
while (peaces.length > 0) {
|
||||
let p = peaces.shift(), pos;
|
||||
// paws: cannot be placed in bottom or top row
|
||||
if (p == 'p' || p == 'P')
|
||||
do { pos = getRandPos() }
|
||||
while (isOccupied(pos) || pos[0] == 0 || pos[0] == 7);
|
||||
// everything else
|
||||
else do { pos = getRandPos(); } while (isOccupied(pos));
|
||||
board[pos[0]][pos[1]] = p;
|
||||
}
|
||||
|
||||
// write FEN
|
||||
let fen = [];
|
||||
for (x = 0; x < board.length; x++) {
|
||||
let str ='', buf = 0;
|
||||
for (let y = 0; y < board[x].length; y++)
|
||||
if (board[x][y] == '.') buf++;
|
||||
else {
|
||||
if (buf > 0) { str += buf; buf = 0; }
|
||||
str += board[x][y];
|
||||
}
|
||||
if (buf > 0) str += buf;
|
||||
fen.push(str);
|
||||
}
|
||||
fen = fen.join('/') + ' w - - 0 1';
|
||||
console.table(board); // for demonstrating purpose
|
||||
return fen;
|
||||
}
|
||||
|
||||
// example
|
||||
console.log(randomFEN());
|
||||
Loading…
Add table
Add a link
Reference in a new issue