From f4764f2174bd2581ed17a5c802addb77350b105e Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Mon, 1 Apr 2024 22:46:44 +0100 Subject: [PATCH] Use turn counts in 'ChessBoardBuilder' This makes more sense from a user's perspective. --- src/board/chess_board/builder.rs | 15 +++++++++------ src/fen.rs | 4 +--- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/board/chess_board/builder.rs b/src/board/chess_board/builder.rs index 8221d92..d509e67 100644 --- a/src/board/chess_board/builder.rs +++ b/src/board/chess_board/builder.rs @@ -9,8 +9,9 @@ pub struct ChessBoardBuilder { castle_rights: [CastleRights; Color::NUM_VARIANTS], en_passant: Option, half_move_clock: u8, - total_plies: u32, side: Color, + // 1-based, a turn is *two* half-moves (i.e: both players have played). + turn_count: u32, } impl ChessBoardBuilder { @@ -20,8 +21,8 @@ impl ChessBoardBuilder { castle_rights: [CastleRights::NoSide; 2], en_passant: Default::default(), half_move_clock: Default::default(), - total_plies: Default::default(), side: Color::White, + turn_count: 1, } } @@ -45,8 +46,8 @@ impl ChessBoardBuilder { self } - pub fn with_total_plies(&mut self, plies: u32) -> &mut Self { - self.total_plies = plies; + pub fn with_turn_count(&mut self, count: u32) -> &mut Self { + self.turn_count = count; self } @@ -90,8 +91,8 @@ impl TryFrom for ChessBoard { castle_rights, en_passant, half_move_clock, - total_plies, side, + turn_count, } = builder; for square in Square::iter() { @@ -103,6 +104,8 @@ impl TryFrom for ChessBoard { combined_occupancy |= square; } + let total_plies = (turn_count - 1) * 2 + if side == Color::White { 0 } else { 1 }; + let board = ChessBoard { piece_occupancy, color_occupancy, @@ -146,7 +149,7 @@ mod test { builder .with_half_move_clock(board.half_move_clock()) - .with_total_plies(board.total_plies()) + .with_turn_count(board.total_plies() / 2 + 1) .with_current_player(board.current_player()); builder diff --git a/src/fen.rs b/src/fen.rs index 3096c95..a7a6825 100644 --- a/src/fen.rs +++ b/src/fen.rs @@ -154,9 +154,7 @@ impl FromFen for ChessBoard { let full_move_counter = full_move_counter .parse::() .map_err(|_| FenError::InvalidFen)?; - builder.with_total_plies( - (full_move_counter - 1) * 2 + if side == Color::White { 0 } else { 1 }, - ); + builder.with_turn_count(full_move_counter); { let mut rank: usize = 8;