implemented move generation method for pawn quiet moves

This commit is contained in:
Varga Dávid Lajos
2025-11-19 20:47:44 +01:00
parent 3f7cc2df4d
commit a2f261778b
3 changed files with 46 additions and 0 deletions

View File

@@ -93,6 +93,13 @@ impl Board {
}
}
#[inline]
pub(in super) fn get_pin_masked_moves(&self, moves: u64, sq: u32) -> u64 {
let sq: usize = sq as usize;
if self.pinned_squares[sq] == 4 { return moves; }
let dir: u8 = self.pinned_squares[sq];
return moves & (RAY_TABLE[sq][dir as usize] | RAY_TABLE[sq][4 + dir as usize]);
}
}
// <----- TESTS ----->

View File

@@ -2,6 +2,7 @@ mod pawns;
use super::board::Board;
use super::movebuffer::MoveBuffer;
use super::bitmove::BitMove;
impl Board {

View File

@@ -0,0 +1,38 @@
use super::*;
impl Board {
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 {
let next_sq = pawns.trailing_zeros();
pawns &= !(1 << next_sq);
let mut quiets: u64 = self.get_pseudo_pawn_moves(next_sq) & move_mask;
quiets = self.get_pin_masked_moves(quiets, next_sq);
while quiets != 0 {
let to_sq = quiets.trailing_zeros();
if (self.side_to_move == 0 && quiets.trailing_zeros() / 8 == 7)
|| (self.side_to_move == 1 && quiets.trailing_zeros() / 8 == 0) {
for piece_type in [3, 2, 1, 0] {
buffer.add(BitMove::quiet(
next_sq as u8,
to_sq as u8,
Some(piece_type)
));
}
}
else {
buffer.add(BitMove::quiet(
next_sq as u8,
to_sq as u8,
None
));
}
quiets &= !(1 << to_sq);
}
}
}
}