[board] Add MoveCounter struct to track current color, half move counter, and full move counter
This commit is contained in:
parent
7b0469d689
commit
c733342fca
2 changed files with 36 additions and 0 deletions
|
@ -6,6 +6,7 @@ pub mod en_passant;
|
|||
pub mod fen;
|
||||
pub mod flags;
|
||||
pub mod macros;
|
||||
pub mod move_counter;
|
||||
|
||||
mod board;
|
||||
mod builder;
|
||||
|
@ -17,4 +18,5 @@ pub use builder::Builder;
|
|||
use castle::Castle;
|
||||
use en_passant::EnPassant;
|
||||
use flags::Flags;
|
||||
use move_counter::MoveCounter;
|
||||
use piece_sets::PieceSet;
|
||||
|
|
34
board/src/move_counter.rs
Normal file
34
board/src/move_counter.rs
Normal file
|
@ -0,0 +1,34 @@
|
|||
use chessfriend_core::Color;
|
||||
|
||||
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
||||
pub struct MoveCounter {
|
||||
/// The player who's turn it is to move.
|
||||
pub active_color: Color,
|
||||
/// The number of completed turns. A turn finishes when every player has moved.
|
||||
pub fullmove_number: u16,
|
||||
/// The number of moves by all players since the last pawn advance or capture.
|
||||
pub halfmove_number: u16,
|
||||
}
|
||||
|
||||
impl MoveCounter {
|
||||
pub fn advance(&mut self, should_reset_halfmove_number: bool) {
|
||||
self.active_color = self.active_color.next();
|
||||
|
||||
self.fullmove_number += 1;
|
||||
self.halfmove_number = if should_reset_halfmove_number {
|
||||
0
|
||||
} else {
|
||||
self.halfmove_number + 1
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for MoveCounter {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
active_color: Color::default(),
|
||||
fullmove_number: 0,
|
||||
halfmove_number: 0,
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue