UNPKG

chess-easy

Version:

Chess engine that makes writing chessgame easier than writing a calculator

105 lines (82 loc) 3.06 kB
# chess-easy ## Description This is a Typescript library for validating chess moves, generating possible moves, detection of check, checkmate and draw (Insufficient Material or Stalemate) and keeping state of the game using [FEN notation](https://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation). ## Installation ``` npm i chess-easy ``` ## How to use You can initialize game without any arguments, and that object will be initialized with starting game fen: "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1". You can also pass different fen string and if it will be valid, game will be initialized with given Fen state. ``` import { Game } from "chess-easy const chessGame = new Game(); const gameFromFen = new Game(`rnbqkbnr/pp1ppppp/8/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 1 2`); ``` ## Game object methods - `getGameStateObject(): GameStateObject`: Getting current state of game as object ex. `{'e4': {piece: ChessPieces.KNHIGHT, color: COLORS.WHITE}, ...}` - `isPromotionMove(from: string, to: string): boolean`: Getting information if given move will cause promoting a pawn, useful for fronted, when you want to show some modal with choice of the promortion piece - `isDraw(): {isDraw: boolean, reason?: string}`: Getting information if current game state is draw. Reason field exists if `isDraw` is `true` and can be one of 2 values: `'Stalemate'`, or `'Insufficient Material'` - `move(from: string, to: string, promotion: PromotionPossibility = PromotionPossibility.QUEEN): boolean` - This method validates if given move is correct and makes the move if it is valid. `promotion` argument is used only if move ends with promotion of a pawn and can have one of four values: - `PromotionPossibility.ROOK` - `PromotionPossibility.BISHOP` - `PromotionPossibility.KNIGHT` - `PromotionPossibility.QUEEN` - `generateFen(): string`: Returns Fen string from current game state - `getNextColor(): "black" | "white"`: Returns string with next moving color. ## Game object fields ``` fen: string; gameState: GameState; movesNext: Colors; castlingAvailability: string; enPassantPossibility: string; halfMoveClock: number; fullMoveNumber: number; possibleMoves: PossibleMoves; isCheck: boolean; isCheckmate: boolean; isStalemate: boolean; isInsufficientMaterial: boolean; ``` ## Types - ``` enum ChessPieces { PAWN, BISHOP, KNIGHT, ROOK, QUEEN, KING, } ``` - ``` enum Colors { WHITE, BLACK, } ``` - ``` interface GameStateField { color: Colors; piece: ChessPieces; } ``` - ``` type GameStateRow = (GameStateField | null)[]; ``` - ``` type GameState = GameStateRow[]; ``` - ``` type GameStateObject = { [key: string]: GameStateField; }; ``` - ``` type PossibleMoves = { [key: string]: string[]; }; ``` ## Example If you want to see an example how this package can be used, you can see this chess service, than uses this package on both: frontend, and backend: https://github.com/mwisniewski00/Chess