From ad551391b27d0d44cac6b69f37cc266dd8407280 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Sun, 26 Jan 2025 00:44:19 -0500 Subject: [PATCH] stuff --- src/agent.rs | 42 ++++++++++++++++++++++++++++++++++-------- src/game.rs | 6 ++++++ src/main.rs | 1 + src/repr.rs | 11 +++++++++++ 4 files changed, 52 insertions(+), 8 deletions(-) create mode 100644 src/game.rs diff --git a/src/agent.rs b/src/agent.rs index acd9df7..50c3ab9 100644 --- a/src/agent.rs +++ b/src/agent.rs @@ -1,15 +1,41 @@ -use crate::repr::Piece; +use std::collections::VecDeque; -pub struct Agent { +use crate::repr::{Board, Piece}; + +pub trait Agent { + fn next_move(&mut self, board: &Board) -> Option<(usize, usize)>; +} + +pub struct ManualAgent {} + +impl Agent for ManualAgent { + fn next_move(&mut self, board: &Board) -> Option<(usize, usize)> { + todo!("user input not implemented") + } +} + +pub struct QueueAgent { + moves: VecDeque<(usize, usize)>, +} + +impl Agent for QueueAgent { + fn next_move(&mut self, board: &Board) -> Option<(usize, usize)> { + self.moves.pop_front() + } +} + +pub struct AutoAgent { color: Piece, } -impl Agent { - pub const fn new(color: Piece) -> Self { - Self { color } - } - - pub fn next_move() -> (usize, usize) { +impl Agent for AutoAgent { + fn next_move(&mut self, board: &Board) -> Option<(usize, usize)> { todo!("next_move not implemented") } } + +impl AutoAgent { + pub const fn new(color: Piece) -> Self { + Self { color } + } +} diff --git a/src/game.rs b/src/game.rs new file mode 100644 index 0000000..3adb2d3 --- /dev/null +++ b/src/game.rs @@ -0,0 +1,6 @@ +use crate::{agent::Agent, repr::Board}; + +pub struct Game { + players: [Box; 2], + board: Board, +} diff --git a/src/main.rs b/src/main.rs index a106cd9..5f81149 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,5 @@ mod agent; +mod game; mod repr; fn main() { diff --git a/src/repr.rs b/src/repr.rs index 98d1037..3bc1abe 100644 --- a/src/repr.rs +++ b/src/repr.rs @@ -4,6 +4,15 @@ pub enum Piece { White, } +impl Piece { + pub const fn flip(&self) -> Self { + match self { + Piece::Black => Piece::White, + Piece::White => Piece::Black, + } + } +} + const BOARD_SIZE: usize = 8; #[derive(Copy, Clone)] @@ -116,6 +125,8 @@ impl Board { mod test { use super::*; + // TODO! add tests for double prop + #[test] fn place_and_get() { let mut board = Board::new();