From 402a8449ba561ee08a322871a800994016ee84e2 Mon Sep 17 00:00:00 2001 From: nocturn9x Date: Mon, 16 Oct 2023 09:39:17 +0200 Subject: [PATCH] There can now be more than one queen on the board (LoL) --- src/Chess/board.nim | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/Chess/board.nim b/src/Chess/board.nim index ed901da..06be12b 100644 --- a/src/Chess/board.nim +++ b/src/Chess/board.nim @@ -23,7 +23,7 @@ type # Useful type aliases Location = tuple[row, col: int] - Pieces = tuple[king: Location, queen: Location, rooks: seq[Location], + Pieces = tuple[king: Location, queens: seq[Location], rooks: seq[Location], bishops: seq[Location], knights: seq[Location], pawns: seq[Location]] @@ -153,7 +153,7 @@ proc newChessboardFromFEN*(state: string): ChessBoard = of Rook: result.pieces.black.rooks.add((row, column)) of Queen: - result.pieces.black.queen = (row, column) + result.pieces.black.queens.add((row, column)) of King: result.pieces.black.king = (row, column) else: @@ -169,7 +169,7 @@ proc newChessboardFromFEN*(state: string): ChessBoard = of Rook: result.pieces.white.rooks.add((row, column)) of Queen: - result.pieces.white.queen = (row, column) + result.pieces.white.queens.add((row, column)) of King: result.pieces.white.king = (row, column) else: @@ -274,7 +274,7 @@ proc countPieces*(self: ChessBoard, kind: PieceKind, color: PieceColor): int = of Rook: return self.pieces.white.rooks.len() of Queen: - return int(self.pieces.white.queen != (-1, -1)) + return self.pieces.white.queens.len() of King: # There shall be only one, forever return 1 @@ -291,7 +291,7 @@ proc countPieces*(self: ChessBoard, kind: PieceKind, color: PieceColor): int = of Rook: return self.pieces.black.rooks.len() of Queen: - return int(self.pieces.black.queen != emptyLocation()) + return self.pieces.black.queens.len() of King: return 1 else: @@ -443,7 +443,7 @@ proc removePiece(self: ChessBoard, location: Location) = of Rook: self.pieces.white.rooks.delete(self.pieces.white.rooks.find(location)) of Queen: - self.pieces.white.queen = emptyLocation() + self.pieces.white.queens.delete(self.pieces.white.rooks.find(location)) of King: doAssert false, "removePiece: attempted to remove the white king" else: @@ -459,7 +459,7 @@ proc removePiece(self: ChessBoard, location: Location) = of Rook: self.pieces.black.rooks.delete(self.pieces.black.rooks.find(location)) of Queen: - self.pieces.black.queen = emptyLocation() + self.pieces.black.queens.delete(self.pieces.black.rooks.find(location)) of King: doAssert false, "removePiece: attempted to remove the black king" else: @@ -500,7 +500,8 @@ proc updatePositions(self: ChessBoard, move: Move) = self.pieces.white.rooks.delete(self.pieces.white.rooks.find(move.startSquare)) self.pieces.white.rooks.add(move.targetSquare) of Queen: - self.pieces.white.queen = move.targetSquare + self.pieces.white.queens.delete(self.pieces.white.queens.find(move.startSquare)) + self.pieces.white.queens.add(move.targetSquare) of King: self.pieces.white.king = move.targetSquare else: @@ -520,7 +521,8 @@ proc updatePositions(self: ChessBoard, move: Move) = self.pieces.black.rooks.delete(self.pieces.black.rooks.find(move.startSquare)) self.pieces.black.rooks.add(move.targetSquare) of Queen: - self.pieces.black.queen = move.targetSquare + self.pieces.black.queens.delete(self.pieces.black.queens.find(move.startSquare)) + self.pieces.white.queens.add(move.targetSquare) of King: self.pieces.black.king = move.targetSquare else: