Przeglądaj źródła

adding rest of magic bitboards

Nicolas Winkler 2 lat temu
rodzic
commit
5bc2748faa
1 zmienionych plików z 29 dodań i 0 usunięć
  1. 29 0
      src/magic/mod.rs

+ 29 - 0
src/magic/mod.rs

@@ -0,0 +1,29 @@
+use crate::{bitboard::*, movegen::ROOK};
+
+mod tables;
+
+use self::tables::*;
+
+pub fn magic_bishop(s: Square, occ: Bitboard) -> Bitboard {
+    let bits = &BISHOP_BITS[s as usize];
+    let (mask, magic) = &BISHOP_MASKS_AND_MAGICS[s as usize];
+    //println!("piece:\n{}", print_board(1_u64 << s));
+    //println!("mask:\n{}", print_board(mask));
+    let idx = magic.wrapping_mul(occ & mask).wrapping_shr((64 - bits) as u32);
+
+    // workaround to make program not crash in debug mode
+    *(&BISHOP_TABLES[s as usize][idx as usize])
+}
+
+pub fn magic_rook(s: Square, occ: Bitboard) -> Bitboard {
+    let bits = &ROOK_BITS[s as usize];
+    let (mask, magic) = &ROOK_MASKS_AND_MAGICS[s as usize];
+    let idx = magic.wrapping_mul(occ & mask).wrapping_shr((64 - bits) as u32);
+
+    //println!("piece:\n{}", print_board(1_u64 << s));
+    //println!("mask:\n{}", print_board(*mask));
+
+    // workaround to make program not crash in debug mode
+    *(&ROOK_TABLES[s as usize][idx as usize])
+}
+