othello_agent/agent/
traits.rs1use rand::{ thread_rng, Rng };
2
3use crate::gameplay::types::{ IBoard, IPosition };
4
5pub trait Agent {
6 fn suggest_moves(&self, board: IBoard) -> Vec<IPosition>;
7 fn select_move(&self, suggested_moves: Vec<IPosition>) -> Option<IPosition> {
8 if suggested_moves.len() == 0 {
9 return None;
10 }
11 let mut rng = thread_rng();
12 let random_index = rng.gen_range(0..suggested_moves.len());
13 Some(suggested_moves[random_index].duplicate())
14 }
15
16 fn get_move(&self, board: IBoard) -> Option<IPosition> {
17 let suggested_moves = self.suggest_moves(board);
18 self.select_move(suggested_moves)
19 }
20}