use chess::{Board, Piece, BoardStatus};
use crate::piece::Value;
pub trait Evaluation {
fn evaluate(&self) -> f32;
}
impl Evaluation for Board {
fn evaluate(&self) -> f32 {
let mut score = 0.0;
if self.status() == BoardStatus::Checkmate { return 3.55E10 }
for piece_type in [Piece::Pawn, Piece::Knight, Piece::Bishop, Piece::Rook, Piece::Queen, Piece::King] {
score += self.pieces(piece_type).count() as f32 * piece_type.value();
}
score -= self.checkers().count() as f32 * 2.0;
score
}
}