chlss
Version:
Open-Source Chess Engine in TypeScript.
72 lines (71 loc) • 2.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BoardObj = void 0;
const fen_1 = require("./fen");
const board_1 = require("./board");
const moveGenerator_1 = require("./moveGenerator");
const moveMaker_1 = require("./moveMaker");
const uci_1 = require("./uci");
const termination_1 = require("./termination");
const colour_1 = require("./colour");
class BoardObj {
constructor(fen = undefined) {
this.board = board_1.Board.createEmpty();
if (fen) {
this.fen(fen);
}
}
fen(setFen = undefined) {
if (!setFen)
return fen_1.FEN.writeFEN(this.board);
fen_1.FEN.loadFEN(setFen, this.board);
return setFen;
}
pose() {
return this.board.position;
}
pushUci(uci) {
const legalMoves = this.legalMoves();
const move = uci_1.UCI.parse(uci, legalMoves, this.board.position);
this.push(move);
}
legalMoves() {
return moveGenerator_1.MoveGenerator.generateLegalMoves(this.board, this.board.toMove);
}
legalMovesUci() {
const moves = this.legalMoves();
const r = [];
for (const move of moves) {
if (move.isPromo) {
move.promotion = "knight";
r.push(uci_1.UCI.write(move));
move.promotion = "rook";
r.push(uci_1.UCI.write(move));
move.promotion = "queen";
r.push(uci_1.UCI.write(move));
move.promotion = "bishop";
r.push(uci_1.UCI.write(move));
move.promotion = undefined;
}
else {
const uci = uci_1.UCI.write(move);
r.push(uci);
}
}
return r;
}
push(move) {
return moveMaker_1.MoveMaker.makeMove(this.board, move);
}
getEnemyMoves() {
return moveGenerator_1.MoveGenerator.generateLegalMoves(this.board, colour_1.Colours.inverseColour(this.board.toMove));
}
getTermination() {
const legalMoves = this.legalMoves();
return termination_1.TerminationApi.getTermination(this.board, legalMoves, this.getEnemyMoves());
}
getColour() {
return this.board.toMove;
}
}
exports.BoardObj = BoardObj;