summaryrefslogtreecommitdiff
path: root/engine/src/lib.rs
diff options
context:
space:
mode:
authorMicha White <botahamec@outlook.com>2023-12-21 17:27:59 -0500
committerMicha White <botahamec@outlook.com>2023-12-21 17:27:59 -0500
commit369870509cf17f8bb7dcb73c497b7fb263685cfb (patch)
treee6c4089fee86162a0919d62a2b2307cabfe5d695 /engine/src/lib.rs
parent207bafde1fa2468d666c7ac894eebee1cf95bed2 (diff)
Added some small extra functionality to the engine
Diffstat (limited to 'engine/src/lib.rs')
-rw-r--r--engine/src/lib.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/engine/src/lib.rs b/engine/src/lib.rs
index 6a12b83..8139530 100644
--- a/engine/src/lib.rs
+++ b/engine/src/lib.rs
@@ -20,6 +20,7 @@ mod transposition_table;
pub const ENGINE_NAME: &str = "Ampere";
pub const ENGINE_AUTHOR: &str = "Mica White";
+pub const ENGINE_ABOUT: &str = "Ampere Checkers Bot v1.0\nCopyright Mica White";
pub struct Engine<'a> {
position: Mutex<CheckersBitBoard>,
@@ -160,6 +161,11 @@ impl<'a> Engine<'a> {
self.debug.store(debug, Ordering::Release);
}
+ pub fn is_legal_move(&self, checker_move: Move) -> bool {
+ let position = self.position.lock();
+ PossibleMoves::moves(*position).contains(checker_move)
+ }
+
pub fn reset_position(&self) {
self.set_position(CheckersBitBoard::starting_position())
}
@@ -169,6 +175,18 @@ impl<'a> Engine<'a> {
*position_ptr = position;
}
+ pub fn apply_move(&self, checker_move: Move) -> Option<()> {
+ unsafe {
+ if self.is_legal_move(checker_move) {
+ let mut position = self.position.lock();
+ *position = checker_move.apply_to(*position);
+ Some(())
+ } else {
+ None
+ }
+ }
+ }
+
pub fn start_evaluation(&'static self, settings: EvaluationSettings) {
// finish the pondering thread
let mut pondering_task = self.pondering_task.lock();