From 15bdaa5d550115d97be3f89126c924b49c10a70f Mon Sep 17 00:00:00 2001 From: Dylan Date: Mon, 19 Oct 2026 00:37:17 +1300 Subject: feat: Initial commit What works: - Minimax search - With a simple player claude designed - Manual player - Move generation - Board display What needs improvement: - Manual player - Game coordinator - Draw checking - Nix setup --- src/game.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/game.rs (limited to 'src/game.rs') diff --git a/src/game.rs b/src/game.rs new file mode 100644 index 0000000..96f71b3 --- /dev/null +++ b/src/game.rs @@ -0,0 +1,44 @@ +use crate::{board::{GameBoard, Turn}, player::Player}; + +pub struct GameHandler +{ + board: GameBoard, +} + +impl Default for GameHandler +{ + fn default() -> Self + { + Self + { + board: GameBoard::default() + } + } +} + +impl GameHandler +{ + // fn play_move(&mut self, player: &mut T) + // { + // let m = player.pick_move(self.board); + // self.board.make_move(m).unwrap(); + // } + + /// Play until someone wins, with `p1` as the sheep and `p2` as the tigers. Returns the winner. + pub fn play_game(&mut self, p1: &mut T1, p2: &mut T2) -> Turn + { + let mut turn = Turn::Sheep; + while !self.board.check_win(turn) + { + let m = match turn + { + Turn::Sheep => p1.pick_move(self.board, turn), + Turn::Tiger => p2.pick_move(self.board, turn), + }; + self.board.make_move(m).unwrap(); + turn = turn.next_turn(); + } + // check_win runs before `turn`'s move, so whoever moved last has won. + turn.next_turn() + } +} -- cgit v1.3.1