implemented method collect_all_moves in bitboard::movegen used in move generation

This commit is contained in:
Varga Dávid Lajos
2025-11-20 20:39:47 +01:00
parent dba7aca2cf
commit 9b43c9ce9a
7 changed files with 32 additions and 15 deletions

View File

@@ -12,17 +12,34 @@ use super::utils::*;
impl Board {
const NO_FILTER: u64 = 0xFFFF_FFFF_FFFF_FFFF;
pub fn collect_moves(&mut self, buffer: &mut MoveBuffer, temp_buffer: &mut MoveBuffer) -> bool {
buffer.clear();
self.calc_pinned_squares();
let check_info = self.check_test();
match check_info.check_count {
// 0 => self.collect_all_moves(),
0 => self.collect_all_moves(buffer, temp_buffer),
// 1 => self.collect_moves_single_check(),
// 2 => self.collect_king_evasion(),
_ => panic!("More than 2 checking pieces found as the same time!")
}
return check_info.check_count > 0;
}
pub(in super) fn collect_all_moves(&self, buffer: &mut MoveBuffer, temp_buffer: &mut MoveBuffer) {
let safe_squares = self.get_safe_king_squares();
self.add_pawn_moves(buffer, temp_buffer, Self::NO_FILTER);
self.add_knight_moves(buffer, temp_buffer, Self::NO_FILTER);
self.add_bishop_moves(buffer, temp_buffer, Self::NO_FILTER);
self.add_rook_moves(buffer, temp_buffer, Self::NO_FILTER);
self.add_queen_moves(buffer, temp_buffer, Self::NO_FILTER);
self.add_king_moves(buffer, temp_buffer, safe_squares);
self.add_king_castles(buffer, safe_squares);
buffer.append(temp_buffer);
temp_buffer.clear();
}
}

View File

@@ -2,7 +2,7 @@ use super::*;
impl Board {
fn add_bishop_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
pub fn add_bishop_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
let piece_index = 2 + self.side_to_move * 6;
let mut bishops = self.bitboards[piece_index as usize];
let empty = !self.occupancy[2];
@@ -33,7 +33,7 @@ impl Board {
}
}
}
fn add_bishop_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
pub fn add_bishop_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
let offset = 6 * self.side_to_move as usize;
let mut bishops: u64 = self.bitboards[2 + offset];
let opponents = self.occupancy[1 - self.side_to_move as usize];

View File

@@ -2,7 +2,7 @@ use super::*;
impl Board {
fn add_king_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
pub fn add_king_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
let piece_index = 5 + self.side_to_move * 6;
let mut kings = self.bitboards[piece_index as usize];
let empty = !self.occupancy[2];
@@ -32,7 +32,7 @@ impl Board {
}
}
}
fn add_king_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
pub fn add_king_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
let offset = 6 * self.side_to_move as usize;
let mut kings: u64 = self.bitboards[5 + offset];
let opponents = self.occupancy[1 - self.side_to_move as usize];
@@ -51,7 +51,7 @@ impl Board {
}
}
}
fn add_king_castles(&self, buffer: &mut MoveBuffer, move_mask: u64) {
pub fn add_king_castles(&self, buffer: &mut MoveBuffer, move_mask: u64) {
if self.castling_rights & (0b11 << (2 - 2 * self.side_to_move)) == 0 {
return;
}

View File

@@ -2,7 +2,7 @@ use super::*;
impl Board {
fn add_knight_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
pub fn add_knight_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
let piece_index = 1 + self.side_to_move * 6;
let mut knights = self.bitboards[piece_index as usize];
let empty = !self.occupancy[2];
@@ -33,7 +33,7 @@ impl Board {
}
}
}
fn add_knight_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
pub fn add_knight_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
let offset = 6 * self.side_to_move as usize;
let mut knights: u64 = self.bitboards[1 + offset];
let opponents = self.occupancy[1 - self.side_to_move as usize];

View File

@@ -2,7 +2,7 @@ use super::*;
impl Board {
fn add_pawn_quiets(&self, buffer: &mut MoveBuffer, move_mask: u64) {
pub fn add_pawn_quiets(&self, buffer: &mut MoveBuffer, move_mask: u64) {
let offset: u8 = self.side_to_move * 6;
let mut pawns: u64 = self.bitboards[offset as usize];
while pawns != 0 {
@@ -34,7 +34,7 @@ impl Board {
}
}
}
fn add_pawn_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
pub fn add_pawn_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
let offset = 6 * self.side_to_move as usize;
let mut pawns: u64 = self.bitboards[offset];
let opponents = self.occupancy[1 - self.side_to_move as usize];
@@ -69,7 +69,7 @@ impl Board {
}
}
}
fn add_pawn_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
pub fn add_pawn_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
self.add_pawn_captures(capture_buffer, move_mask);
self.add_pawn_quiets(quiet_buffer, move_mask);
}

View File

@@ -2,7 +2,7 @@ use super::*;
impl Board {
fn add_queen_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
pub fn add_queen_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
let piece_index = 4 + self.side_to_move * 6;
let mut queens = self.bitboards[piece_index as usize];
let empty = !self.occupancy[2];
@@ -33,7 +33,7 @@ impl Board {
}
}
}
fn add_queen_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
pub fn add_queen_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
let offset = 6 * self.side_to_move as usize;
let mut queens: u64 = self.bitboards[4 + offset];
let opponents = self.occupancy[1 - self.side_to_move as usize];

View File

@@ -2,7 +2,7 @@ use super::*;
impl Board {
fn add_rook_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
pub fn add_rook_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
let piece_index = 3 + self.side_to_move * 6;
let mut rooks = self.bitboards[piece_index as usize];
let empty = !self.occupancy[2];
@@ -33,7 +33,7 @@ impl Board {
}
}
}
fn add_rook_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
pub fn add_rook_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
let offset = 6 * self.side_to_move as usize;
let mut rooks: u64 = self.bitboards[3 + offset];
let opponents = self.occupancy[1 - self.side_to_move as usize];