implemeneted general move generation method for knight moves
This commit is contained in:
@@ -4,6 +4,7 @@ mod knights;
|
||||
use super::board::Board;
|
||||
use super::movebuffer::MoveBuffer;
|
||||
use super::bitmove::BitMove;
|
||||
use super::utils::*;
|
||||
|
||||
impl Board {
|
||||
|
||||
|
||||
@@ -1 +1,36 @@
|
||||
use super::*;
|
||||
use super::*;
|
||||
|
||||
impl Board {
|
||||
|
||||
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];
|
||||
let opponents = self.occupancy[1 - self.side_to_move as usize];
|
||||
while knights != 0 {
|
||||
let from_sq = pop_lsb(&mut knights);
|
||||
let raw_move_map = self.get_pseudo_knight_moves(from_sq) & move_mask;
|
||||
let move_map = self.get_pin_masked_moves(raw_move_map, from_sq);
|
||||
|
||||
let mut quiet_map = move_map & empty;
|
||||
let mut capture_map = move_map & opponents;
|
||||
|
||||
while quiet_map != 0 {
|
||||
let to_sq = pop_lsb(&mut quiet_map);
|
||||
quiet_buffer.add(BitMove::quiet(
|
||||
from_sq as u8,
|
||||
to_sq as u8,
|
||||
None
|
||||
));
|
||||
}
|
||||
while capture_map != 0 {
|
||||
let to_sq = pop_lsb(&mut capture_map);
|
||||
capture_buffer.add(BitMove::capture(
|
||||
from_sq as u8,
|
||||
to_sq as u8,
|
||||
None
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,3 @@
|
||||
use crate::bitboard::utils::pop_lsb;
|
||||
|
||||
use super::*;
|
||||
|
||||
impl Board {
|
||||
|
||||
Reference in New Issue
Block a user