mirror of
https://github.com/Noratrieb/minmax.git
synced 2026-01-16 08:15:04 +01:00
improvements
This commit is contained in:
parent
afa61289a5
commit
a643d11021
6 changed files with 47 additions and 43 deletions
|
|
@ -8,7 +8,7 @@ pub use {board::TicTacToe, player::*};
|
|||
mod tests {
|
||||
use crate::{minmax::PerfectPlayer, tic_tac_toe::board::TicTacToe, GamePlayer, Player};
|
||||
|
||||
use super::player::{GreedyPlayer, RandomPlayer};
|
||||
use crate::player::{GreedyPlayer, RandomPlayer};
|
||||
|
||||
fn assert_win_ratio<X: GamePlayer<TicTacToe>, O: GamePlayer<TicTacToe>>(
|
||||
runs: u64,
|
||||
|
|
@ -33,7 +33,7 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
fn perfect_always_beats_greedy() {
|
||||
assert_win_ratio(20, 1.0, || PerfectPlayer::new(false), || GreedyPlayer);
|
||||
assert_win_ratio(1, 1.0, || PerfectPlayer::new(false), || GreedyPlayer);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
|||
|
|
@ -1,21 +1,9 @@
|
|||
use std::io::Write;
|
||||
|
||||
use rand::Rng;
|
||||
|
||||
use crate::{GamePlayer, Player};
|
||||
|
||||
use super::TicTacToe;
|
||||
|
||||
#[derive(Clone, Default)]
|
||||
pub struct GreedyPlayer;
|
||||
|
||||
impl GamePlayer<TicTacToe> for GreedyPlayer {
|
||||
fn next_move(&mut self, board: &mut TicTacToe, this_player: Player) {
|
||||
let first_free = board.iter().position(|p| p.is_none()).unwrap();
|
||||
board.set(first_free, Some(this_player));
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Default)]
|
||||
pub struct HumanPlayer;
|
||||
|
||||
|
|
@ -45,21 +33,3 @@ impl GamePlayer<TicTacToe> for HumanPlayer {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Default)]
|
||||
pub struct RandomPlayer;
|
||||
|
||||
impl GamePlayer<TicTacToe> for RandomPlayer {
|
||||
fn next_move(&mut self, board: &mut TicTacToe, this_player: Player) {
|
||||
loop {
|
||||
let next = rand::thread_rng().gen_range(0..9);
|
||||
match board.get(next) {
|
||||
Some(_) => {}
|
||||
None => {
|
||||
board.set(next, Some(this_player));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue