diff --git a/src/lib.rs b/src/lib.rs index c097d31..d5394eb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,4 @@ -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] enum Piece { Pawn, Knight, @@ -20,7 +20,7 @@ impl Piece { } } -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] struct LocatedPiece { piece: Piece, rank: usize, @@ -30,6 +30,7 @@ struct LocatedPiece { struct Board { white: Vec, black: Vec, + white_to_move: bool, } impl Board { @@ -72,6 +73,7 @@ impl Board { Self { white: white_pieces.chain(white_pawns).collect(), black: black_pieces.chain(black_pawns).collect(), + white_to_move: true, } } fn material(&self) -> i32 { @@ -87,6 +89,54 @@ impl Board { .sum::(); white_value - black_value } + fn make_move(&mut self, algebra: &str) { + let mover = if self.white_to_move { + &mut self.white + } else { + &mut self.black + }; + + if algebra == "O-O" || algebra == "0-0" { + mover + .iter_mut() + .find(|lp| lp.piece == Piece::King) + .unwrap() + .file = 6; //castles kingside + mover + .iter_mut() + .find(|lp| lp.piece == Piece::Rook && lp.file == 7) + .unwrap() + .file = 5; + } else if algebra == "O-O-O" || algebra == "0-0-0" { + mover + .iter_mut() + .find(|lp| lp.piece == Piece::King) + .unwrap() + .file = 2; //castles queenside + mover + .iter_mut() + .find(|lp| lp.piece == Piece::Rook && lp.file == 0) + .unwrap() + .file = 3; + } + + let first_char = algebra.chars().next().unwrap(); + let piece = if first_char.is_ascii_uppercase() { + match first_char { + 'R' => Piece::Rook, + 'N' => Piece::Knight, + 'B' => Piece::Bishop, + 'K' => Piece::King, + 'Q' => Piece::Queen, + _ => unreachable!(), + } + } else { + Piece::Pawn + }; + + let destination_square = todo!(); + todo!() + } } #[cfg(test)]