From d1b8b777ac31d0005abe5b9cdda0067f3071313b Mon Sep 17 00:00:00 2001 From: satr14 Date: Sat, 25 Jul 2026 16:29:55 +0700 Subject: [PATCH 1/5] fen input and index label --- src/routes/+page.svelte | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 4eff4e1..e873a34 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -14,11 +14,11 @@
{#each boardView as square, index} -
+ {showIndex ? index : ''} {#if square}p{square}{/if} - {showIndex ? index : ''}
{/each}
@@ -29,7 +29,10 @@ From 9032a40b2489eec25d1403779e8ac45f5873179d Mon Sep 17 00:00:00 2001 From: satr14 Date: Sat, 25 Jul 2026 16:41:01 +0700 Subject: [PATCH 2/5] algebraic to index func --- src/lib/chess/utils.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/lib/chess/utils.ts b/src/lib/chess/utils.ts index 6f2e7f8..c5aca34 100644 --- a/src/lib/chess/utils.ts +++ b/src/lib/chess/utils.ts @@ -50,4 +50,20 @@ export class Board { }); }); } +} + +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 From 07c90e9ef56247473e7de4022d33a64177b5c4b2 Mon Sep 17 00:00:00 2001 From: satr14 Date: Sat, 25 Jul 2026 16:42:33 +0700 Subject: [PATCH 3/5] full fen parsing --- src/lib/chess/utils.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/lib/chess/utils.ts b/src/lib/chess/utils.ts index c5aca34..c4a0dd7 100644 --- a/src/lib/chess/utils.ts +++ b/src/lib/chess/utils.ts @@ -1,3 +1,4 @@ +import type { GTK_A11Y, TPM2_PKCS11_TCTI } from "$env/static/private"; import { Piece } from "./types"; // export function fen2array(fen: string): Int8Array { @@ -23,7 +24,7 @@ const CHAR_TO_PIECE: Record = { export class Board { public board = new Int8Array(8 ** 2); public details = { - turn: "w", + whiteTurn: true, castling: { white: { king: true, queen: true }, black: { king: true, queen: true }, @@ -39,8 +40,8 @@ export class Board { loadFEN(fen = startFEN) { const [position, turn, castling, enPassant, halfMove, fullMove] = fen.split(" "); - this.board.fill(Piece.EMPTY); + this.board.fill(Piece.EMPTY); position.split("/").forEach((row, rank) => { let file = 0; row.split("").forEach((char) => { @@ -49,6 +50,18 @@ 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); } } From d9683b43d37f3630247e9fbd5e1a049a884605d5 Mon Sep 17 00:00:00 2001 From: satr14 Date: Sat, 25 Jul 2026 16:48:06 +0700 Subject: [PATCH 4/5] remove random import? --- src/lib/chess/utils.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/chess/utils.ts b/src/lib/chess/utils.ts index c4a0dd7..9bd39e1 100644 --- a/src/lib/chess/utils.ts +++ b/src/lib/chess/utils.ts @@ -1,4 +1,3 @@ -import type { GTK_A11Y, TPM2_PKCS11_TCTI } from "$env/static/private"; import { Piece } from "./types"; // export function fen2array(fen: string): Int8Array { From fd03fe7ca582b524295742ea3af3d649ead7ebd8 Mon Sep 17 00:00:00 2001 From: satr14 Date: Sat, 25 Jul 2026 16:55:43 +0700 Subject: [PATCH 5/5] piece display change and move constant to types.ts --- src/lib/chess/types.ts | 32 ++++++++++++++++++++++++++++++++ src/lib/chess/utils.ts | 20 +------------------- src/routes/+page.svelte | 3 ++- static/assets/{12.svg => B.svg} | 0 static/assets/{9.svg => K.svg} | 0 static/assets/{13.svg => N.svg} | 0 static/assets/{14.svg => P.svg} | 0 static/assets/{10.svg => Q.svg} | 0 static/assets/{11.svg => R.svg} | 0 static/assets/{20.svg => b.svg} | 0 static/assets/{17.svg => k.svg} | 0 static/assets/{21.svg => n.svg} | 0 static/assets/{22.svg => p.svg} | 0 static/assets/{18.svg => q.svg} | 0 static/assets/{19.svg => r.svg} | 0 15 files changed, 35 insertions(+), 20 deletions(-) rename static/assets/{12.svg => B.svg} (100%) rename static/assets/{9.svg => K.svg} (100%) rename static/assets/{13.svg => N.svg} (100%) rename static/assets/{14.svg => P.svg} (100%) rename static/assets/{10.svg => Q.svg} (100%) rename static/assets/{11.svg => R.svg} (100%) rename static/assets/{20.svg => b.svg} (100%) rename static/assets/{17.svg => k.svg} (100%) rename static/assets/{21.svg => n.svg} (100%) rename static/assets/{22.svg => p.svg} (100%) rename static/assets/{18.svg => q.svg} (100%) rename static/assets/{19.svg => r.svg} (100%) diff --git a/src/lib/chess/types.ts b/src/lib/chess/types.ts index 1abd471..44e147d 100644 --- a/src/lib/chess/types.ts +++ b/src/lib/chess/types.ts @@ -9,4 +9,36 @@ 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 9bd39e1..90acea8 100644 --- a/src/lib/chess/utils.ts +++ b/src/lib/chess/utils.ts @@ -1,24 +1,6 @@ -import { Piece } from "./types"; - -// export function fen2array(fen: string): Int8Array { -// } +import { CHAR_TO_PIECE, 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, - "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); diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index e873a34..3ac01ec 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,4 +1,5 @@