diff --git a/rs/src/board.rs b/rs/src/board.rs index f598d0c..cd262d6 100644 --- a/rs/src/board.rs +++ b/rs/src/board.rs @@ -1,6 +1,6 @@ use std::collections::HashMap; -#[derive(Clone)] +#[derive(Eq, PartialEq, Clone)] pub enum Color { Black, White, @@ -234,4 +234,25 @@ impl Board { pub fn iter(&self) -> impl Iterator { self.state.iter() } + pub fn get_legal_moves( + &self, + position: &Position, + ) -> Option> { + let piece = match self.get_at(position) { + None => return None, + Some(piece) => piece, + }; + let valid_moves = piece + .get_moves(position) + .into_iter() + .filter(|pos| self.get_at(pos).is_none()); + let valid_captures = + piece.get_captures(position).into_iter().filter(|pos| match self + .get_at(pos) + { + None => false, + Some(other_piece) => (other_piece.color != piece.color), + }); + Some(valid_moves.chain(valid_captures).collect()) + } }