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

first steps

+67
+67
src/lib.rs
··· 1 + #[derive(Debug, Clone, Copy)] 2 + enum Piece { 3 + Pawn, 4 + Knight, 5 + Bishop, 6 + Rook, 7 + Queen, 8 + King, 9 + } 10 + 11 + impl Piece { 12 + fn value(self) -> i32 { 13 + match self { 14 + Piece::Pawn => 1, 15 + Piece::Knight | Piece::Bishop => 3, 16 + Piece::Rook => 5, 17 + Piece::Queen => 9, 18 + Piece::King => 0, 19 + } 20 + } 21 + } 22 + 23 + #[derive(Debug, Clone, Copy)] 24 + struct LocatedPiece { 25 + piece: Piece, 26 + rank: usize, 27 + file: usize, 28 + } 29 + 30 + struct Board { 31 + white: Vec<LocatedPiece>, 32 + black: Vec<LocatedPiece>, 33 + } 34 + 35 + impl Board { 36 + fn new() -> Self { 37 + let white_pawns = (0..8) 38 + .map(|file| LocatedPiece { 39 + piece: Piece::Pawn, 40 + rank: 1, 41 + file, 42 + }) 43 + .collect::<Vec<_>>(); 44 + let black_pawns = white_pawns 45 + .iter() 46 + .map(|&lp| LocatedPiece { rank: 7, ..lp }) 47 + .collect::<Vec<_>>(); 48 + Self { 49 + white: white_pawns, 50 + black: black_pawns, 51 + } 52 + } 53 + fn material(&self) -> i32 { 54 + let white_value = self 55 + .white 56 + .iter() 57 + .map(|piece| piece.piece.value()) 58 + .sum::<i32>(); 59 + let black_value = self 60 + .black 61 + .iter() 62 + .map(|piece| piece.piece.value()) 63 + .sum::<i32>(); 64 + white_value - black_value 65 + } 66 + } 67 + 1 68 pub fn add(left: u64, right: u64) -> u64 { 2 69 left + right 3 70 }