reworked moveflag system
This commit is contained in:
parent
951a8bbec6
commit
1f61dc35f8
32 changed files with 3784 additions and 40 deletions
40
src/move.rs
40
src/move.rs
|
|
@ -10,33 +10,33 @@ pub const MOVE_FROM_MASK: u16 = 0b0000_0000_0011_1111;
|
|||
pub const MOVE_TO_MASK: u16 = 0b0000_1111_1100_0000;
|
||||
|
||||
// BIT 12 - 15: FLAGS (4 bits)
|
||||
// 1. 0 no capture, 1 capture
|
||||
pub const MOVE_FLAG_MASK: u16 = 0b1111_0000_0000_0000;
|
||||
|
||||
pub const MOVE_FLAG_QUIET: u16 = 0b0000_0000_0000_0000;
|
||||
pub const MOVE_FLAG_CAPTURE: u16 = 0b0001_0000_0000_0000;
|
||||
pub const MOVE_FLAG_EN_PASSANT: u16 = 0b0010_0000_0000_0000;
|
||||
pub const MOVE_FLAG_EN_PASSANT: u16 = 0b0011_0000_0000_0000;
|
||||
|
||||
pub const MOVE_FLAG_WK_CASTLE: u16 = 0b0011_0000_0000_0000;
|
||||
pub const MOVE_FLAG_WQ_CASTLE: u16 = 0b0100_0000_0000_0000;
|
||||
pub const MOVE_FLAG_BK_CASTLE: u16 = 0b0101_0000_0000_0000;
|
||||
pub const MOVE_FLAG_BQ_CASTLE: u16 = 0b0110_0000_0000_0000;
|
||||
// 0111 is free
|
||||
// Castle flags
|
||||
pub const MOVE_MASK_CASTLE: u16 = 0b1100_0000_0000_0000;
|
||||
pub const MOVE_FLAG_CASTLE_TRUE: u16 = 0b0100_0000_0000_0000;
|
||||
|
||||
pub const MOVE_FLAG_WK_CASTLE: u16 = 0b0100_0000_0000_0000;
|
||||
pub const MOVE_FLAG_WQ_CASTLE: u16 = 0b0101_0000_0000_0000;
|
||||
pub const MOVE_FLAG_BK_CASTLE: u16 = 0b0110_0000_0000_0000;
|
||||
pub const MOVE_FLAG_BQ_CASTLE: u16 = 0b0111_0000_0000_0000;
|
||||
|
||||
// Promotion flags (use the 1xxx bits)
|
||||
// We combine capture flag with promotion type
|
||||
pub const MOVE_FLAG_PROMO: u16 = 0b1000_0000_0000_0000;
|
||||
pub const MOVE_FLAG_NO_PROMO: u16 = 0b0000_0000_0000_0000;
|
||||
|
||||
pub const MOVE_FLAG_PROMO_N: u16 = 0b1000_0000_0000_0000;
|
||||
pub const MOVE_FLAG_PROMO_B: u16 = 0b1001_0000_0000_0000;
|
||||
pub const MOVE_FLAG_PROMO_R: u16 = 0b1010_0000_0000_0000;
|
||||
pub const MOVE_FLAG_PROMO_Q: u16 = 0b1011_0000_0000_0000;
|
||||
pub const MOVE_FLAG_PROMO_CAP_N: u16 = 0b1100_0000_0000_0000;
|
||||
pub const MOVE_FLAG_PROMO_CAP_B: u16 = 0b1101_0000_0000_0000;
|
||||
pub const MOVE_FLAG_PROMO_CAP_R: u16 = 0b1110_0000_0000_0000;
|
||||
pub const MOVE_FLAG_PROMO_CAP_Q: u16 = 0b1111_0000_0000_0000;
|
||||
|
||||
pub const MOVE_FLAG_PROMO_B: u16 = 0b1010_0000_0000_0000;
|
||||
pub const MOVE_FLAG_PROMO_R: u16 = 0b1100_0000_0000_0000;
|
||||
pub const MOVE_FLAG_PROMO_Q: u16 = 0b1110_0000_0000_0000;
|
||||
pub const MOVE_FLAG_PROMO_N_CAP: u16 = 0b1001_0000_0000_0000;
|
||||
pub const MOVE_FLAG_PROMO_B_CAP: u16 = 0b1011_0000_0000_0000;
|
||||
pub const MOVE_FLAG_PROMO_R_CAP: u16 = 0b1101_0000_0000_0000;
|
||||
pub const MOVE_FLAG_PROMO_Q_CAP: u16 = 0b1111_0000_0000_0000;
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
|
||||
pub struct Move(u16);
|
||||
|
|
@ -88,10 +88,10 @@ impl Move {
|
|||
// Check if it's any promotion type (1xxx)
|
||||
if (flags & 0b1000_0000_0000_0000) != 0 {
|
||||
let promo_char = match flags {
|
||||
MOVE_FLAG_PROMO_N | MOVE_FLAG_PROMO_CAP_N => 'n',
|
||||
MOVE_FLAG_PROMO_B | MOVE_FLAG_PROMO_CAP_B => 'b',
|
||||
MOVE_FLAG_PROMO_R | MOVE_FLAG_PROMO_CAP_R => 'r',
|
||||
MOVE_FLAG_PROMO_Q | MOVE_FLAG_PROMO_CAP_Q => 'q',
|
||||
MOVE_FLAG_PROMO_N | MOVE_FLAG_PROMO_N_CAP => 'n',
|
||||
MOVE_FLAG_PROMO_B | MOVE_FLAG_PROMO_B_CAP => 'b',
|
||||
MOVE_FLAG_PROMO_R | MOVE_FLAG_PROMO_R_CAP => 'r',
|
||||
MOVE_FLAG_PROMO_Q | MOVE_FLAG_PROMO_Q_CAP => 'q',
|
||||
_ => '?', // Should not happen
|
||||
};
|
||||
format!("{}{}{}", from_str, to_str, promo_char)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue