add switching sides

This commit is contained in:
Dmitry Fedotov
2025-04-07 02:28:36 +03:00
parent d9f43036c3
commit b42659a604
3 changed files with 31 additions and 11 deletions

View File

@@ -5,13 +5,14 @@ pub struct Engine {
players: Vec<Box<dyn Player>>,
turn: usize,
board: Board,
x: usize,
}
impl Engine {
pub fn new() -> Engine {
// TODO: accept players as args
let p1 = PlayerConsole::new("P1", Cell::CellX);
let p2 = PlayerConsole::new("P2", Cell::CellO);
let p1 = PlayerConsole::new("Gopher");
let p2 = PlayerConsole::new("Rustacean");
let board = Board::new();
@@ -19,18 +20,25 @@ impl Engine {
players: vec![Box::new(p1), Box::new(p2)],
turn: 0,
board: board,
x: 0,
}
}
pub fn run(&mut self) -> Result<(), Box<dyn std::error::Error>> {
loop {
self.board.reset();
match self.run_single_game() {
Ok(_) => {}
Err(e) => break Err(e),
}
// setup new game for players
self.players[self.x].start_new_game(Cell::CellX)?;
self.players[(self.x + 1) % 2].start_new_game(Cell::CellO)?;
// TODO: switch sides
// reset board
self.board.reset();
self.turn = self.x;
// run game
self.run_single_game()?;
// switch sides
self.x = (self.x + 1) % 2
}
}