From 887b9abed899f141c3ec891e21de67130700101b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Tue, 18 Nov 2025 17:02:07 +0100 Subject: [PATCH 1/9] adde file and module structure for bitboard::bitmove.rs --- engine/src/bitboard.rs | 1 + engine/src/bitboard/bitmove.rs | 0 2 files changed, 1 insertion(+) create mode 100644 engine/src/bitboard/bitmove.rs diff --git a/engine/src/bitboard.rs b/engine/src/bitboard.rs index 504ae04..405141f 100644 --- a/engine/src/bitboard.rs +++ b/engine/src/bitboard.rs @@ -3,5 +3,6 @@ mod utils; mod legality; mod checkinfo; mod attacks; +mod bitmove; pub mod board; \ No newline at end of file diff --git a/engine/src/bitboard/bitmove.rs b/engine/src/bitboard/bitmove.rs new file mode 100644 index 0000000..e69de29 From 57af3aaae346bd0893b0866247e3fa09297a7803 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Tue, 18 Nov 2025 17:09:39 +0100 Subject: [PATCH 2/9] defined shape of struct bitboard::bitmove::BitMove --- engine/src/bitboard/bitmove.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/engine/src/bitboard/bitmove.rs b/engine/src/bitboard/bitmove.rs index e69de29..4b0bb17 100644 --- a/engine/src/bitboard/bitmove.rs +++ b/engine/src/bitboard/bitmove.rs @@ -0,0 +1,8 @@ + +pub struct BitMove { + + pub move_type: u8, + pub from_square: u8, + pub to_square: u8, + pub promotion_piece: Option +} \ No newline at end of file From c420d8b3dd54bf98b64076abc9d201da40d7cef4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Tue, 18 Nov 2025 17:17:11 +0100 Subject: [PATCH 3/9] added constructor for quiet moves in bitboard::bitmove.rs --- engine/src/bitboard/bitmove.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/engine/src/bitboard/bitmove.rs b/engine/src/bitboard/bitmove.rs index 4b0bb17..11510f9 100644 --- a/engine/src/bitboard/bitmove.rs +++ b/engine/src/bitboard/bitmove.rs @@ -5,4 +5,17 @@ pub struct BitMove { pub from_square: u8, pub to_square: u8, pub promotion_piece: Option +} + +impl BitMove { + + #[inline] + pub fn quiet(from: u8, to: u8, promotion_piece: Option) -> Self { + return Self { + move_type: 0, + from_square: from, + to_square: to, + promotion_piece: promotion_piece + }; + } } \ No newline at end of file From d8da8085804b175cdfbe7bdfe3b6f454ef193bb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Tue, 18 Nov 2025 17:19:31 +0100 Subject: [PATCH 4/9] added enum BitMoveType to bitboard::bitmove.rs for readability --- engine/src/bitboard/bitmove.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/engine/src/bitboard/bitmove.rs b/engine/src/bitboard/bitmove.rs index 11510f9..59f9dce 100644 --- a/engine/src/bitboard/bitmove.rs +++ b/engine/src/bitboard/bitmove.rs @@ -1,7 +1,7 @@ pub struct BitMove { - pub move_type: u8, + pub move_type: BitMoveType, pub from_square: u8, pub to_square: u8, pub promotion_piece: Option @@ -12,10 +12,17 @@ impl BitMove { #[inline] pub fn quiet(from: u8, to: u8, promotion_piece: Option) -> Self { return Self { - move_type: 0, + move_type: BitMoveType::Quiet, from_square: from, to_square: to, promotion_piece: promotion_piece }; } +} + +pub enum BitMoveType { + Quiet, + Capture, + Castle, + En_Passant } \ No newline at end of file From 05294a77364ad3dc9b7853a11d8953e7e5b17976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Tue, 18 Nov 2025 17:20:40 +0100 Subject: [PATCH 5/9] changed name of value of enum BitMoveType to align with Rust naming conventions --- engine/src/bitboard/bitmove.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/src/bitboard/bitmove.rs b/engine/src/bitboard/bitmove.rs index 59f9dce..4ba2555 100644 --- a/engine/src/bitboard/bitmove.rs +++ b/engine/src/bitboard/bitmove.rs @@ -24,5 +24,5 @@ pub enum BitMoveType { Quiet, Capture, Castle, - En_Passant + EnPassant } \ No newline at end of file From 7b9c1edbabc499e817c11b8c7a9fd3023f643e85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Tue, 18 Nov 2025 17:23:07 +0100 Subject: [PATCH 6/9] added constructor for capture moves in bitboard::bitmove.rs --- engine/src/bitboard/bitmove.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/engine/src/bitboard/bitmove.rs b/engine/src/bitboard/bitmove.rs index 4ba2555..7afee71 100644 --- a/engine/src/bitboard/bitmove.rs +++ b/engine/src/bitboard/bitmove.rs @@ -18,6 +18,15 @@ impl BitMove { promotion_piece: promotion_piece }; } + #[inline] + pub fn capture(from: u8, to: u8, promotion_piece: Option) -> Self { + return Self { + move_type: BitMoveType::Capture, + from_square: from, + to_square: to, + promotion_piece: promotion_piece + }; + } } pub enum BitMoveType { From e1f4ae717e841c45a451c34c204397ad3c629727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Tue, 18 Nov 2025 17:24:11 +0100 Subject: [PATCH 7/9] added constructor for castling moves in bitboard::bitmove.rs --- engine/src/bitboard/bitmove.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/engine/src/bitboard/bitmove.rs b/engine/src/bitboard/bitmove.rs index 7afee71..4eff425 100644 --- a/engine/src/bitboard/bitmove.rs +++ b/engine/src/bitboard/bitmove.rs @@ -27,6 +27,15 @@ impl BitMove { promotion_piece: promotion_piece }; } + #[inline] + pub fn castle(from: u8, to: u8) -> Self { + return Self { + move_type: BitMoveType::Castle, + from_square: from, + to_square: to, + promotion_piece: None + }; + } } pub enum BitMoveType { From fd0d26486b5830e8609650e2e6fbe94e84e20874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Tue, 18 Nov 2025 17:30:04 +0100 Subject: [PATCH 8/9] switched from public fields to getters for struct BitMove --- engine/src/bitboard/bitmove.rs | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/engine/src/bitboard/bitmove.rs b/engine/src/bitboard/bitmove.rs index 4eff425..0ec351b 100644 --- a/engine/src/bitboard/bitmove.rs +++ b/engine/src/bitboard/bitmove.rs @@ -1,10 +1,11 @@ +#[derive(Copy, Clone, PartialEq, Eq)] pub struct BitMove { - pub move_type: BitMoveType, - pub from_square: u8, - pub to_square: u8, - pub promotion_piece: Option + move_type: BitMoveType, + from_square: u8, + to_square: u8, + promotion_piece: Option } impl BitMove { @@ -36,8 +37,26 @@ impl BitMove { promotion_piece: None }; } + + #[inline(always)] + pub fn move_type(&self) -> BitMoveType { + return self.move_type; + } + #[inline(always)] + pub fn from_square(&self) -> u8 { + return self.from_square; + } + #[inline(always)] + pub fn to_square(&self) -> u8 { + return self.to_square; + } + #[inline(always)] + pub fn promotion_piece(&self) -> Option { + return self.promotion_piece; + } } +#[derive(Copy, Clone, PartialEq, Eq)] pub enum BitMoveType { Quiet, Capture, From db333a693f2905dd41b614f0a65fc91379b4a6c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Tue, 18 Nov 2025 17:38:48 +0100 Subject: [PATCH 9/9] added method uci_notation to struct BitMove --- engine/src/bitboard/bitmove.rs | 12 ++++++++++++ engine/src/bitboard/utils.rs | 5 +++++ 2 files changed, 17 insertions(+) diff --git a/engine/src/bitboard/bitmove.rs b/engine/src/bitboard/bitmove.rs index 0ec351b..86c5b44 100644 --- a/engine/src/bitboard/bitmove.rs +++ b/engine/src/bitboard/bitmove.rs @@ -1,3 +1,4 @@ +use super::utils::*; #[derive(Copy, Clone, PartialEq, Eq)] pub struct BitMove { @@ -54,6 +55,17 @@ impl BitMove { pub fn promotion_piece(&self) -> Option { return self.promotion_piece; } + + pub fn uci_notation(&self) -> String { + let mut notation = notation_from_square_number(self.from_square()); + notation.push_str(¬ation_from_square_number(self.to_square())); + + if let Some(promotion_piece) = self.promotion_piece { + notation.push(get_character_by_piece_id(promotion_piece).to_ascii_lowercase()); + } + + return notation; + } } #[derive(Copy, Clone, PartialEq, Eq)] diff --git a/engine/src/bitboard/utils.rs b/engine/src/bitboard/utils.rs index 25d7ba8..f7f83fe 100644 --- a/engine/src/bitboard/utils.rs +++ b/engine/src/bitboard/utils.rs @@ -48,6 +48,11 @@ pub fn try_get_square_number_from_notation(notation: &str) -> Result { } } +const PIECE_CHARACTERS: [char; 12] = ['P', 'N', 'B', 'R', 'Q', 'K', 'p', 'n', 'b', 'r', 'q', 'k']; +pub fn get_character_by_piece_id(id: u8) -> char { + return PIECE_CHARACTERS[id as usize]; +} + // <----- TESTS ----->