From 3d7802fa6e5cff094b5fb81e57f62b4cfb902590 Mon Sep 17 00:00:00 2001 From: satr14 Date: Sat, 25 Jul 2026 16:09:26 +0700 Subject: [PATCH] FEN parser --- src/lib/chess/utils.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lib/chess/utils.ts b/src/lib/chess/utils.ts index c597548..6f2e7f8 100644 --- a/src/lib/chess/utils.ts +++ b/src/lib/chess/utils.ts @@ -5,6 +5,7 @@ import { Piece } from "./types"; export const startFEN = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0"; const CHAR_TO_PIECE: Record = { + "-": Piece.EMPTY, "K": Piece.WHITE | Piece.KING, "Q": Piece.WHITE | Piece.QUEEN, "R": Piece.WHITE | Piece.ROOK, @@ -31,13 +32,22 @@ export class Board { halfMove: 0, fullMove: 0, }; + constructor() { this.loadFEN(); } loadFEN(fen = startFEN) { const [position, turn, castling, enPassant, halfMove, fullMove] = fen.split(" "); + this.board.fill(Piece.EMPTY); - + position.split("/").forEach((row, rank) => { + let file = 0; + row.split("").forEach((char) => { + if (!isNaN(parseInt(char))) return file += parseInt(char); + this.board[rank * 8 + file] = CHAR_TO_PIECE[char] + file++; + }); + }); } } \ No newline at end of file