cleanroom implementation of a chess engine. doesn't work :)

making moves, specifically castling

+52 -2
+52 -2
src/lib.rs
··· 1 - #[derive(Debug, Clone, Copy)] 1 + #[derive(Debug, Clone, Copy, PartialEq, Eq)] 2 2 enum Piece { 3 3 Pawn, 4 4 Knight, ··· 20 20 } 21 21 } 22 22 23 - #[derive(Debug, Clone, Copy)] 23 + #[derive(Debug, Clone, Copy, PartialEq, Eq)] 24 24 struct LocatedPiece { 25 25 piece: Piece, 26 26 rank: usize, ··· 30 30 struct Board { 31 31 white: Vec<LocatedPiece>, 32 32 black: Vec<LocatedPiece>, 33 + white_to_move: bool, 33 34 } 34 35 35 36 impl Board { ··· 72 73 Self { 73 74 white: white_pieces.chain(white_pawns).collect(), 74 75 black: black_pieces.chain(black_pawns).collect(), 76 + white_to_move: true, 75 77 } 76 78 } 77 79 fn material(&self) -> i32 { ··· 86 88 .map(|piece| piece.piece.value()) 87 89 .sum::<i32>(); 88 90 white_value - black_value 91 + } 92 + fn make_move(&mut self, algebra: &str) { 93 + let mover = if self.white_to_move { 94 + &mut self.white 95 + } else { 96 + &mut self.black 97 + }; 98 + 99 + if algebra == "O-O" || algebra == "0-0" { 100 + mover 101 + .iter_mut() 102 + .find(|lp| lp.piece == Piece::King) 103 + .unwrap() 104 + .file = 6; //castles kingside 105 + mover 106 + .iter_mut() 107 + .find(|lp| lp.piece == Piece::Rook && lp.file == 7) 108 + .unwrap() 109 + .file = 5; 110 + } else if algebra == "O-O-O" || algebra == "0-0-0" { 111 + mover 112 + .iter_mut() 113 + .find(|lp| lp.piece == Piece::King) 114 + .unwrap() 115 + .file = 2; //castles queenside 116 + mover 117 + .iter_mut() 118 + .find(|lp| lp.piece == Piece::Rook && lp.file == 0) 119 + .unwrap() 120 + .file = 3; 121 + } 122 + 123 + let first_char = algebra.chars().next().unwrap(); 124 + let piece = if first_char.is_ascii_uppercase() { 125 + match first_char { 126 + 'R' => Piece::Rook, 127 + 'N' => Piece::Knight, 128 + 'B' => Piece::Bishop, 129 + 'K' => Piece::King, 130 + 'Q' => Piece::Queen, 131 + _ => unreachable!(), 132 + } 133 + } else { 134 + Piece::Pawn 135 + }; 136 + 137 + let destination_square = todo!(); 138 + todo!() 89 139 } 90 140 } 91 141