ghost-chess/lib/chess-types.ts
2025-05-31 00:44:26 +09:00

75 lines
2.2 KiB
TypeScript

export enum PieceType {
PAWN = "pawn",
ROOK = "rook",
KNIGHT = "knight",
BISHOP = "bishop",
QUEEN = "queen",
KING = "king",
}
export enum PieceColor {
WHITE = "white",
BLACK = "black",
}
export enum GameMode {
CLASSIC = "classic",
GHOST = "ghost",
}
export interface ChessPiece {
type: PieceType
color: PieceColor
hasMoved?: boolean
}
export interface Position {
row: number
col: number
}
export interface MoveResult {
newBoard: (ChessPiece | null)[][]
capturedPiece: ChessPiece | null
}
export function initialBoardState(): (ChessPiece | null)[][] {
const board: (ChessPiece | null)[][] = Array(8)
.fill(null)
.map(() => Array(8).fill(null))
// Set up pawns
for (let col = 0; col < 8; col++) {
board[1][col] = { type: PieceType.PAWN, color: PieceColor.BLACK, hasMoved: false }
board[6][col] = { type: PieceType.PAWN, color: PieceColor.WHITE, hasMoved: false }
}
// Set up rooks
board[0][0] = { type: PieceType.ROOK, color: PieceColor.BLACK, hasMoved: false }
board[0][7] = { type: PieceType.ROOK, color: PieceColor.BLACK, hasMoved: false }
board[7][0] = { type: PieceType.ROOK, color: PieceColor.WHITE, hasMoved: false }
board[7][7] = { type: PieceType.ROOK, color: PieceColor.WHITE, hasMoved: false }
// Set up knights
board[0][1] = { type: PieceType.KNIGHT, color: PieceColor.BLACK }
board[0][6] = { type: PieceType.KNIGHT, color: PieceColor.BLACK }
board[7][1] = { type: PieceType.KNIGHT, color: PieceColor.WHITE }
board[7][6] = { type: PieceType.KNIGHT, color: PieceColor.WHITE }
// Set up bishops
board[0][2] = { type: PieceType.BISHOP, color: PieceColor.BLACK }
board[0][5] = { type: PieceType.BISHOP, color: PieceColor.BLACK }
board[7][2] = { type: PieceType.BISHOP, color: PieceColor.WHITE }
board[7][5] = { type: PieceType.BISHOP, color: PieceColor.WHITE }
// Set up queens
board[0][3] = { type: PieceType.QUEEN, color: PieceColor.BLACK }
board[7][3] = { type: PieceType.QUEEN, color: PieceColor.WHITE }
// Set up kings
board[0][4] = { type: PieceType.KING, color: PieceColor.BLACK, hasMoved: false }
board[7][4] = { type: PieceType.KING, color: PieceColor.WHITE, hasMoved: false }
return board
}