75 lines
2.2 KiB
TypeScript
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
|
|
}
|