From b666c4a0cbfb5b474da95d2d3ddb229066b32564 Mon Sep 17 00:00:00 2001 From: nils <48135649+Nilstrieb@users.noreply.github.com> Date: Mon, 31 Oct 2022 14:43:18 +0100 Subject: [PATCH] nice --- src/board.rs | 4 ++-- src/lib.rs | 31 +++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/board.rs b/src/board.rs index 4b3dbd0..198fc7d 100644 --- a/src/board.rs +++ b/src/board.rs @@ -127,10 +127,10 @@ impl Display for Board { let index = i * 3 + j; match self.get(index) { Some(player) => { - write!(f, "\x1B[1m{player}\x1B[0m ")?; + write!(f, "\x1B[33m{player}\x1B[0m ")?; } None => { - write!(f, "\x1B[37m{index}\x1B[0m ")?; + write!(f, "\x1B[35m{index}\x1B[0m ")?; } } } diff --git a/src/lib.rs b/src/lib.rs index 5500473..995da17 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,8 @@ mod board; mod game; +use std::io::Write; + use board::Player; pub use board::Board; @@ -17,3 +19,32 @@ impl GamePlayer for GreedyPlayer { board.set(first_free, Some(this_player)); } } + +pub struct HumanPlayer; + +impl GamePlayer for HumanPlayer { + fn next_move(&mut self, board: &mut Board, this_player: Player) { + loop { + print!("{board}where to put the next {this_player}? (0-8): "); + + std::io::stdout().flush().unwrap(); + let mut buf = String::new(); + std::io::stdin().read_line(&mut buf).unwrap(); + + match buf.trim().parse() { + Ok(number) if number < 9 => match board.get(number) { + None => { + board.set(number, Some(this_player)); + return; + } + Some(_) => { + println!("Field is occupied already.") + } + }, + Ok(_) | Err(_) => { + println!("Invalid input.") + } + } + } + } +}