Implement get_legal_moves function
This commit is contained in:
@@ -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())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user