Reduce bitboards from 12 to 8, add color info in mailbox representation

This commit is contained in:
stefiosif
2025-01-12 20:02:16 +02:00
parent f7604b27a5
commit d9e76a224f
11 changed files with 238 additions and 331 deletions

View File

@@ -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
}