Implement get_legal_moves function

This commit is contained in:
2021-12-11 19:00:09 +01:00
parent 7788aea805
commit 1f5e58d981

View File

@@ -1,6 +1,6 @@
use std::collections::HashMap; use std::collections::HashMap;
#[derive(Clone)] #[derive(Eq, PartialEq, Clone)]
pub enum Color { pub enum Color {
Black, Black,
White, White,
@@ -234,4 +234,25 @@ impl Board {
pub fn iter(&self) -> impl Iterator<Item = (&Position, &Piece)> { pub fn iter(&self) -> impl Iterator<Item = (&Position, &Piece)> {
self.state.iter() self.state.iter()
} }
pub fn get_legal_moves(
&self,
position: &Position,
) -> Option<Vec<Position>> {
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())
}
} }