Reduce bitboards from 12 to 8, add color info in mailbox representation
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
use u64 as Bitboard;
|
||||
use strum::IntoEnumIterator;
|
||||
|
||||
use crate::{
|
||||
board::{
|
||||
@@ -22,45 +22,34 @@ pub const fn material_score(piece_type: PieceType) -> i32 {
|
||||
}
|
||||
|
||||
fn is_end_game(board: &Board) -> bool {
|
||||
let white_pieces = board.white_pieces.iter().fold(0, |acc, p| {
|
||||
acc + bitboard::bit_count(p.bitboard) * material_score(p.piece_type) as usize
|
||||
});
|
||||
|
||||
let black_pieces = board.black_pieces.iter().fold(0, |acc, p| {
|
||||
acc + bitboard::bit_count(p.bitboard) * material_score(p.piece_type) as usize
|
||||
});
|
||||
|
||||
(white_pieces + black_pieces) < 2000
|
||||
PieceType::iter().fold(0, |acc, p| {
|
||||
acc + bitboard::bit_count(board.pieces[p]) * material_score(p) as usize
|
||||
}) < 2000
|
||||
}
|
||||
|
||||
fn evaluate_side_for(board: &Board, color: Color) -> i32 {
|
||||
let mut total_score = 0;
|
||||
let pieces = match color {
|
||||
Color::White => &board.white_pieces,
|
||||
Color::Black => &board.black_pieces,
|
||||
};
|
||||
|
||||
let psqt = if is_end_game(board) {
|
||||
piece_square_score_endgame
|
||||
} else {
|
||||
piece_square_score
|
||||
};
|
||||
|
||||
for piece in pieces {
|
||||
let (piece_type, mut bitboard): (PieceType, Bitboard) = (piece.piece_type, piece.bitboard);
|
||||
let mut score = 0;
|
||||
let mut total_score = 0;
|
||||
|
||||
PieceType::iter().for_each(|piece_type| {
|
||||
let mut bitboard = board.pieces[piece_type] & board.color[color];
|
||||
while bitboard != 0 {
|
||||
let psqt_index = match color {
|
||||
Color::White => lsb(bitboard),
|
||||
Color::Black => mirror_index(lsb(bitboard)),
|
||||
};
|
||||
|
||||
score += material_score(piece_type);
|
||||
score += psqt(piece_type, psqt_index);
|
||||
total_score += material_score(piece_type);
|
||||
total_score += psqt(piece_type, psqt_index);
|
||||
bitboard &= bitboard - 1;
|
||||
}
|
||||
total_score += score;
|
||||
}
|
||||
});
|
||||
|
||||
total_score
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user