From 5e3ef9d21e52577e38a68fc57bee1dc7fbc0ef4c Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sun, 28 Jan 2024 15:48:11 -0800 Subject: [PATCH] Remove the move lists from bishop, knight, queen, and rook move set construction These are the easy ones. --- position/src/move_generator/bishop.rs | 12 ++++-------- position/src/move_generator/knight.rs | 20 +++++--------------- position/src/move_generator/queen.rs | 14 +++++--------- position/src/move_generator/rook.rs | 12 ++++-------- 4 files changed, 18 insertions(+), 40 deletions(-) diff --git a/position/src/move_generator/bishop.rs b/position/src/move_generator/bishop.rs index 48fd833..3eb1405 100644 --- a/position/src/move_generator/bishop.rs +++ b/position/src/move_generator/bishop.rs @@ -42,16 +42,12 @@ impl MoveGeneratorInternal for ClassicalMoveGenerator { update_moves_with_ray!(SouthEast, occupied_squares); update_moves_with_ray!(SouthWest, occupied_squares); - let quiet_moves_bb = all_moves & (empty_squares | !friendly_pieces); - let capture_moves_bb = all_moves & opposing_pieces; - - let map_to_move = |sq| MoveBuilder::new(*piece, square, sq).build(); - let quiet_moves = quiet_moves_bb.occupied_squares().map(map_to_move); - let capture_moves = capture_moves_bb.occupied_squares().map(map_to_move); + let quiet_moves = all_moves & (empty_squares | !friendly_pieces); + let capture_moves = all_moves & opposing_pieces; MoveSet::new(placed_piece) - .quiet_moves(quiet_moves_bb, quiet_moves) - .capture_moves(capture_moves_bb, capture_moves) + .quiet_moves(quiet_moves) + .capture_moves(capture_moves) } } diff --git a/position/src/move_generator/knight.rs b/position/src/move_generator/knight.rs index 751217a..f2e3fcd 100644 --- a/position/src/move_generator/knight.rs +++ b/position/src/move_generator/knight.rs @@ -17,22 +17,12 @@ impl MoveGeneratorInternal for KnightMoveGenerator { let empty_squares = position.empty_squares(); let knight_moves = BitBoard::knight_moves(placed_piece.square()); - let quiet_moves_bb = knight_moves & empty_squares; - let capture_moves_bb = knight_moves & opposing_pieces; - - let quiet_moves = quiet_moves_bb.occupied_squares().map(|to_sq| { - MoveBuilder::new(*placed_piece.piece(), placed_piece.square(), to_sq).build() - }); - let capture_moves = capture_moves_bb.occupied_squares().map(|to_sq| { - let captured_piece = position.piece_on_square(to_sq).unwrap(); - MoveBuilder::new(*placed_piece.piece(), placed_piece.square(), to_sq) - .capturing(captured_piece) - .build() - }); + let quiet_moves = knight_moves & empty_squares; + let capture_moves = knight_moves & opposing_pieces; MoveSet::new(placed_piece) - .quiet_moves(quiet_moves_bb, quiet_moves) - .capture_moves(capture_moves_bb, capture_moves) + .quiet_moves(quiet_moves) + .capture_moves(capture_moves) } } @@ -72,7 +62,7 @@ mod tests { MoveBuilder::new(piece!(White Knight), Square::E4, Square::F6).build(), ]; - let mut generated_moves: HashSet = generator.iter().cloned().collect(); + let mut generated_moves: HashSet = generator.iter().collect(); for ex_move in expected_moves { assert!( diff --git a/position/src/move_generator/queen.rs b/position/src/move_generator/queen.rs index f38da4a..737686c 100644 --- a/position/src/move_generator/queen.rs +++ b/position/src/move_generator/queen.rs @@ -1,7 +1,7 @@ // Eryn Wells use super::{move_generator_declaration, MoveGeneratorInternal, MoveSet}; -use crate::{MoveBuilder, Position}; +use crate::Position; use chessfriend_bitboard::BitBoard; use chessfriend_core::{Color, Direction, Piece, PlacedPiece}; @@ -48,16 +48,12 @@ impl MoveGeneratorInternal for ClassicalMoveGenerator { update_moves_with_ray!(SouthWest, occupied_squares); update_moves_with_ray!(West, occupied_squares); - let quiet_moves_bb = all_moves & (empty_squares | !friendly_pieces); - let capture_moves_bb = all_moves & opposing_pieces; - - let map_to_move = |sq| MoveBuilder::new(*piece, square, sq).build(); - let quiet_moves = quiet_moves_bb.occupied_squares().map(map_to_move); - let capture_moves = capture_moves_bb.occupied_squares().map(map_to_move); + let quiet_moves = all_moves & (empty_squares | !friendly_pieces); + let capture_moves = all_moves & opposing_pieces; MoveSet::new(placed_piece) - .quiet_moves(quiet_moves_bb, quiet_moves) - .capture_moves(capture_moves_bb, capture_moves) + .quiet_moves(quiet_moves) + .capture_moves(capture_moves) } } diff --git a/position/src/move_generator/rook.rs b/position/src/move_generator/rook.rs index 71e17e7..4d74c11 100644 --- a/position/src/move_generator/rook.rs +++ b/position/src/move_generator/rook.rs @@ -44,16 +44,12 @@ impl MoveGeneratorInternal for ClassicalMoveGenerator { update_moves_with_ray!(South, occupied_squares); update_moves_with_ray!(West, occupied_squares); - let quiet_moves_bb = all_moves & (empty_squares | !friendly_pieces); - let capture_moves_bb = all_moves & opposing_pieces; - - let map_to_move = |sq| MoveBuilder::new(*piece, square, sq).build(); - let quiet_moves = quiet_moves_bb.occupied_squares().map(map_to_move); - let capture_moves = capture_moves_bb.occupied_squares().map(map_to_move); + let quiet_moves = all_moves & (empty_squares | !friendly_pieces); + let capture_moves = all_moves & opposing_pieces; MoveSet::new(placed_piece) - .quiet_moves(quiet_moves_bb, quiet_moves) - .capture_moves(capture_moves_bb, capture_moves) + .quiet_moves(quiet_moves) + .capture_moves(capture_moves) } }