diff --git a/src/evaluation/evaluation.rs b/src/evaluation/evaluation.rs index 7f070d5..c156a9f 100644 --- a/src/evaluation/evaluation.rs +++ b/src/evaluation/evaluation.rs @@ -17,23 +17,20 @@ const fn piece_score(piece_type: PieceType) -> i32 { PieceType::Bishop => 330, PieceType::Rook => 500, PieceType::Queen => 900, - PieceType::King => 20000, + PieceType::King => 0, } } -// TODO: Use piece scores instead of piece count fn is_end_game(board: &Board) -> bool { - let white_pieces_num = board - .white_pieces - .iter() - .fold(0, |acc, p| acc + bitboard::bit_count(p.bitboard)); + let white_pieces = board.white_pieces.iter().fold(0, |acc, p| { + acc + bitboard::bit_count(p.bitboard) * piece_score(p.piece_type) as usize + }); - let black_pieces_num = board - .black_pieces - .iter() - .fold(0, |acc, p| acc + bitboard::bit_count(p.bitboard)); + let black_pieces = board.black_pieces.iter().fold(0, |acc, p| { + acc + bitboard::bit_count(p.bitboard) * piece_score(p.piece_type) as usize + }); - white_pieces_num < 6 && black_pieces_num < 6 + (white_pieces + black_pieces) < 2000 } fn evaluate_side_for(board: &Board, color: Color) -> i32 { @@ -43,10 +40,10 @@ fn evaluate_side_for(board: &Board, color: Color) -> i32 { Color::Black => &board.black_pieces, }; - let psqt = if !is_end_game(board) { - piece_square_score - } else { + let psqt = if is_end_game(board) { piece_square_score_endgame + } else { + piece_square_score }; for piece in pieces { @@ -99,7 +96,7 @@ mod tests { assert_eq!(330, piece_score(PieceType::Bishop)); assert_eq!(500, piece_score(PieceType::Rook)); assert_eq!(900, piece_score(PieceType::Queen)); - assert_eq!(20000, piece_score(PieceType::King)); + assert_eq!(0, piece_score(PieceType::King)); Ok(()) } @@ -117,8 +114,8 @@ mod tests { let evaluate_white = evaluate_side_for(&game_2.board, Color::White); let evaluate_black = evaluate_side_for(&game_2.board, Color::Black); - assert_eq!(24005, evaluate_white); - assert_eq!(23965, evaluate_black); + assert_eq!(4005, evaluate_white); + assert_eq!(3965, evaluate_black); Ok(()) }