Skip to content

Commit

Permalink
Merge pull request #41 from Piterden/feature/load-fen
Browse files Browse the repository at this point in the history
Feature/load fen
  • Loading branch information
brozeph committed Nov 6, 2020
2 parents 59e4acd + bfb11b2 commit ee73f5b
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 1 deletion.
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

43 changes: 43 additions & 0 deletions src/board.js
Expand Up @@ -82,6 +82,49 @@ export class Board extends EventEmitter {
return b;
}

static load (fen) {
const pieces = {
b: { arg: SideType.Black, method: 'createBishop' },
B: { arg: SideType.White, method: 'createBishop' },
k: { arg: SideType.Black, method: 'createKing' },
K: { arg: SideType.White, method: 'createKing' },
n: { arg: SideType.Black, method: 'createKnight' },
N: { arg: SideType.White, method: 'createKnight' },
p: { arg: SideType.Black, method: 'createPawn' },
P: { arg: SideType.White, method: 'createPawn' },
q: { arg: SideType.Black, method: 'createQueen' },
Q: { arg: SideType.White, method: 'createQueen' },
r: { arg: SideType.Black, method: 'createRook' },
R: { arg: SideType.White, method: 'createRook' }
};

const lines = fen.split('/')
.map((line, rank) => {
const arr = line.split('');
let file = 0;

return arr.reduce((acc, cur) => {
if (!isNaN(Number(cur))) {
for (let i = 0; i < Number(cur); i += 1) {
acc.push(Square.create('abcdefgh'[file], rank + 1));
file = file < 7 ? file + 1 : 0;
}
} else {
const square = Square.create('abcdefgh'[file], rank + 1);
square.piece = Piece[pieces[cur].method](pieces[cur].arg);
acc.push(square);
file = file < 7 ? file + 1 : 0;
}
return acc;
}, []);
});

return new Board(lines.reduce((acc, cur) => {
acc.push(...cur);
return acc;
}, []));
}

getNeighborSquare (sq, n) {
if (sq && n) {
// validate boundaries of board
Expand Down
8 changes: 8 additions & 0 deletions test/src/board.js
Expand Up @@ -12,6 +12,14 @@ describe('Board', () => {
});
});

describe('#load(FEN)', () => {
// ensure 64 squares
it('should return 64 squares', () => {
let b = Board.load('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR');
assert.strictEqual(b.squares.length, 64);
});
});

describe('#getSquare()', () => {
// ensure squares retrieved via getSquare are correct
it('should be square a1', () => {
Expand Down

0 comments on commit ee73f5b

Please sign in to comment.