Implement get_legal_moves function
This commit is contained in:
@@ -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<Item = (&Position, &Piece)> {
|
||||
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())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user