From dc9432b07b3eb98fc18f4564792b359eec23ca64 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Thu, 20 Feb 2025 16:19:42 -0500 Subject: [PATCH] initial BoardValueMap --- src/logic/board_value.rs | 20 ++++++++++++++++++++ src/logic/mod.rs | 1 + src/repr/board.rs | 2 +- src/repr/mod.rs | 2 +- 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 src/logic/board_value.rs diff --git a/src/logic/board_value.rs b/src/logic/board_value.rs new file mode 100644 index 0000000..62d9ae5 --- /dev/null +++ b/src/logic/board_value.rs @@ -0,0 +1,20 @@ +use crate::repr::{Board, Piece, PosMap}; + +pub struct BoardValueMap(PosMap); + +impl BoardValueMap { + pub fn board_value(&self, board: &Board, color: Piece) -> f32 { + let mut board_value: f32 = 0.0; + for (i, j) in Board::all_positions() { + if let Some(pos_p) = board.get(i, j) { + let mut value = *self.0.get(i, j); + if pos_p != color { + // enemy has position + value = -value; + } + board_value += value; + } + } + board_value + } +} diff --git a/src/logic/mod.rs b/src/logic/mod.rs index 7075cba..aef055a 100644 --- a/src/logic/mod.rs +++ b/src/logic/mod.rs @@ -1,3 +1,4 @@ +mod board_value; mod future_moves; mod r#move; pub use future_moves::FutureMoves; diff --git a/src/repr/board.rs b/src/repr/board.rs index 32978db..85d95a2 100644 --- a/src/repr/board.rs +++ b/src/repr/board.rs @@ -26,7 +26,7 @@ type ChainCollection = ArrayVec; /// Map of all points on the board against some type T /// Used to index like so: example[i][j] /// with each coordinate -struct PosMap(ArrayVec); +pub struct PosMap(ArrayVec); impl PosMap { pub fn get(&self, row: usize, col: usize) -> &T { diff --git a/src/repr/mod.rs b/src/repr/mod.rs index 81299d5..110720a 100644 --- a/src/repr/mod.rs +++ b/src/repr/mod.rs @@ -3,5 +3,5 @@ mod board; mod misc; mod piece; -pub use board::{Board, Winner}; +pub use board::{Board, PosMap, Winner}; pub use piece::Piece;