black-horse

0.6.3 • Public • Published

Black Horse

https://www.npmjs.com/package/black-horse

Javascript Chess Engine

Installation

npm install black-horse --save

Usage

Just import the library and all of Black Horse namespace will be available to you:

const BlackHorseChessEngine = require('black-horse');

Public API

All the methods use the coordinates system based on the following board:

/*
         8    r  n  b  q  k  b  n  r
         7    p  p  p  p  p  p  p  p
         6
         5
         4
         3
         2    P  P  P  P  P  P  P  P
         1    R  N  B  Q  K  B  N  R

              1  2  3  4  5  6  7  8
*/

initBoard()

Set the board to the default opening board.

BlackHorseChessEngine.initBoard();

printBoard()

Prints de current board to the console

BlackHorseChessEngine.printBoard();
/*
         8   r  n  b  q  k  b  n  r 
         7   p  p  p  p  p  p  p  p 
         6   .  .  .  .  .  .  .  . 
         5   .  .  .  .  .  .  .  . 
         4   .  .  .  .  .  .  .  . 
         3   .  .  .  .  .  .  .  . 
         2   P  P  P  P  P  P  P  P 
         1   R  N  B  Q  K  B  N  R 
 
             a  b  c  d  e  f  g  h 
*/

parseFEN(fenString)

Used to set the board to different state, using the FEN notation

BlackHorseChessEngine.parseFEN("2r3k1/1q1nbppp/r3p3/3pP3/p1pP4/P1Q2N2/1PRN1PPP/2R4K b - - 0 0");

getBoard()

Return the board object with all the current status, including the current FEN string

console.log(BlackHorseChessEngine.getBoard());
/*
{
      board:
       [ [ 10, 8, 9, 11, 12, 9, 8, 10 ],
         [ 7, 7, 7, 7, 7, 7, 7, 7 ],
         [ 0, 0, 0, 0, 0, 0, 0, 0 ],
         [ 0, 0, 0, 0, 0, 0, 0, 0 ],
         [ 0, 0, 0, 0, 0, 0, 0, 0 ],
         [ 0, 0, 0, 0, 0, 0, 0, 0 ],
         [ 1, 1, 1, 1, 1, 1, 1, 1 ],
         [ 4, 2, 3, 5, 6, 3, 2, 4 ] ],
      castle:
       [ { kingSide: true, queenSide: true },
         { kingSide: true, queenSide: true } ],
      pieceMaterial: [ 54100, 54100 ],
      pawnMaterial: [ 800, 800 ],
      capturedPieces: [ [], [] ],
      kingPosition: [ [ 1, 5 ], [ 8, 5 ] ],
      piecesCounter: [ null, 8, 2, 2, 2, 1, 1, 8, 2, 2, 2, 1, 1 ],
      hash: 726761150,
      color: 0,
      enPassant: false,
      fiftyMoveCounter: 0,
      fullmoveCounter: 0,
      pawnList: [ { list: [Object] }, { list: [Object] } ],
      pieceList: [ { list: [Object] }, { list: [Object] } ],
      fenString: 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 0'
}
*/

getPieceValidMoves(row, column)

getPieceValidMoves(notation)

Returns an Array of all the valid moves for the piece in the position indicated by the coordinates or by the Standart Algebraic Notation

console.log(BlackHorseChessEngine.getPieceValidMoves(2, 2)); 
console.log(BlackHorseChessEngine.getPieceValidMoves('b2')); 
/*
[ 
  { 
    algebraicNotation: 'b3',
    piece: 1,
    pieceDest: 0,
    color: 0,
    rowOrig: 2,
    columnOrig: 2,
    rowDest: 3,
    columnDest: 2,
    flag: null,
    promotedPiece: null,
    hash: 2127761049,
    score: -10 
  },
  { 
    algebraicNotation: 'b4',
    piece: 1,
    pieceDest: 0,
    color: 0,
    rowOrig: 2,
    columnOrig: 2,
    rowDest: 4,
    columnDest: 2,
    flag: null,
    promotedPiece: null,
    hash: 2127761049,
    score: -10 
  } 
]
*/

isCheckMate(color)

Checks if for the given color, is it in check mate or not

BlackHorseChessEngine.parseFEN("2Q4k/1R6/8/8/8/8/8/7K w - - 0 2");
//0 - white, 1 - black
BlackHorseChessEngine.isCheckMate(0); //false
BlackHorseChessEngine.isCheckMate(1); //true

searchNextMove(options)

options

{
    minDepth: 4, // min search depth - default 4
    maxSearchTime: 3000 //max search time spended in seconds - default 3000
}

Search the next move for the current color

BlackHorseChessEngine.initBoard();
const searchOptions = {
  minDepth:6, 
  maxSearchTime: 1000 
} 
const nextMove = BlackHorseChessEngine.searchNextMove(searchOptions);
/*
{
    "algebraicNotation": "d4",
    "columnDest": 4,
    "columnOrig": 4,
    "piece": 1,
    "pieceDest": 0,
    "promotedPiece": null,
    "rowDest": 4,
    "rowOrig": 2,
    "score": 10,
    "color": 0
}
*/

move(moveObject)

Search the next move for the current color. Can accept an object with the coordinates and move flag or can accept a string with the Standart Algebraic Notation

console.log(BlackHorseChessEngine.move({
                                   "columnDest": 4,
                                   "columnOrig": 4,
                                   "rowDest": 4,
                                   "rowOrig": 2,
                               }));
console.log(BlackHorseChessEngine.move('d4');
/*
{
  algebraicNotation: 'd4',
  board: { 'board object' },
  isCheckMate: false
}
*/

configs

Object containing all the configurations used in the chess engine.

Pieces codes

  • 0 - empty
  • 1 - White Pawn
  • 2 - White Knight
  • 3 - White Bishop
  • 4 - White Rook
  • 5 - White Queen
  • 6 - White King
  • 7 - Black Pawn
  • 8 - Black Knight
  • 9 - Black Bishop
  • 10 - Black Rook
  • 11 - Black Queen
  • 12 - Black King

Color codes

  • 0 - White
  • 1 - Black

Node.js version compatibility

12.0.0 or higher

Package Sidebar

Install

npm i black-horse

Weekly Downloads

16

Version

0.6.3

License

MIT

Unpacked Size

97.1 kB

Total Files

21

Last publish

Collaborators

  • redsoul