use crate::game; use crate::player; pub struct Engine { players: Vec, turn: usize, board: game::Board, } impl Engine { pub fn new() -> Engine { let p1 = player::PlayerConsole::new("P1", game::CELL_X); let p2 = player::PlayerConsole::new("P2", game::CELL_O); let board = game::Board::new(); Engine { players: vec![p1, p2], turn: 0, board: board, } } pub fn run(&mut self) -> Result<(), Box> { loop { let m = self.players[self.turn].request_move(&self.board)?; let ok = self.board.put(m); if !ok { continue; } let winner = self.board.has_winner(); if winner != game::CELL_EMPTY { println!("the winner is {}", self.players[self.turn].name()); break; } self.turn = (self.turn + 1) % 2 } Ok(()) } }