diff --git a/src/lib/chess/types.ts b/src/lib/chess/types.ts index 44e147d..1abd471 100644 --- a/src/lib/chess/types.ts +++ b/src/lib/chess/types.ts @@ -9,36 +9,4 @@ export enum Piece { WHITE = 8, BLACK = 16, -} - -export const CHAR_TO_PIECE: Record = { - "-": Piece.EMPTY, - "K": Piece.WHITE | Piece.KING, - "Q": Piece.WHITE | Piece.QUEEN, - "R": Piece.WHITE | Piece.ROOK, - "B": Piece.WHITE | Piece.BISHOP, - "N": Piece.WHITE | Piece.KNIGHT, - "P": Piece.WHITE | Piece.PAWN, - "k": Piece.BLACK | Piece.KING, - "q": Piece.BLACK | Piece.QUEEN, - "r": Piece.BLACK | Piece.ROOK, - "b": Piece.BLACK | Piece.BISHOP, - "n": Piece.BLACK | Piece.KNIGHT, - "p": Piece.BLACK | Piece.PAWN, -}; - -export const PIECE_TO_CHAR: Record = { - [Piece.EMPTY]: "-", - [Piece.WHITE | Piece.KING]: "K", - [Piece.WHITE | Piece.QUEEN]: "Q", - [Piece.WHITE | Piece.ROOK]: "R", - [Piece.WHITE | Piece.BISHOP]: "B", - [Piece.WHITE | Piece.KNIGHT]: "N", - [Piece.WHITE | Piece.PAWN]: "P", - [Piece.BLACK | Piece.KING]: "k", - [Piece.BLACK | Piece.QUEEN]: "q", - [Piece.BLACK | Piece.ROOK]: "r", - [Piece.BLACK | Piece.BISHOP]: "b", - [Piece.BLACK | Piece.KNIGHT]: "n", - [Piece.BLACK | Piece.PAWN]: "p", } \ No newline at end of file diff --git a/src/lib/chess/utils.ts b/src/lib/chess/utils.ts index 90acea8..6f2e7f8 100644 --- a/src/lib/chess/utils.ts +++ b/src/lib/chess/utils.ts @@ -1,11 +1,29 @@ -import { CHAR_TO_PIECE, Piece } from "./types"; +import { Piece } from "./types"; + +// export function fen2array(fen: string): Int8Array { +// } 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, + "B": Piece.WHITE | Piece.BISHOP, + "N": Piece.WHITE | Piece.KNIGHT, + "P": Piece.WHITE | Piece.PAWN, + "k": Piece.BLACK | Piece.KING, + "q": Piece.BLACK | Piece.QUEEN, + "r": Piece.BLACK | Piece.ROOK, + "b": Piece.BLACK | Piece.BISHOP, + "n": Piece.BLACK | Piece.KNIGHT, + "p": Piece.BLACK | Piece.PAWN, +}; export class Board { public board = new Int8Array(8 ** 2); public details = { - whiteTurn: true, + turn: "w", castling: { white: { king: true, queen: true }, black: { king: true, queen: true }, @@ -21,8 +39,8 @@ export class Board { 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) => { @@ -31,33 +49,5 @@ export class Board { file++; }); }); - - this.details.whiteTurn = turn === "w"; - - this.details.castling.white.king = castling.includes("K"); - this.details.castling.white.queen = castling.includes("Q"); - this.details.castling.black.king = castling.includes("k"); - this.details.castling.black.queen = castling.includes("q"); - - this.details.enPassant = algebraicToIndex(enPassant); - - this.details.halfMove = parseInt(halfMove); - this.details.fullMove = parseInt(fullMove); - } -} - -function algebraicToIndex(algebraic: string): number { - const FILE_TO_INDEX: Record = { - a: 0, b: 1, c: 2, d: 3, e: 4, f: 5, g: 6, h: 7, - } - try { - if (algebraic.length !== 2) return -1; - const [file, rank] = algebraic.split(""); - const rankIndex = parseInt(rank) - 1; - const fileIndex = FILE_TO_INDEX[file]; - - return rankIndex * 8 + fileIndex; - } catch { - return -1; } } \ No newline at end of file diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 3ac01ec..4eff4e1 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,5 +1,4 @@