othello_agent/agent/
traits.rs

1use 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}