From fbc1aafce64ab18bd5690b870cd4293b28b03cc6 Mon Sep 17 00:00:00 2001 From: landrigun Date: Tue, 15 Nov 2022 14:49:37 +0000 Subject: [PATCH] fix: check the whole board to check a win --- src/main.rs | 54 +++++++++++++---------------------------------------- 1 file changed, 13 insertions(+), 41 deletions(-) diff --git a/src/main.rs b/src/main.rs index 1f729e9..f09051b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -99,15 +99,15 @@ impl Board { } } - fn check_first_line(&self, item: Item) -> bool { + fn check_first_row(&self, item: Item) -> bool { self.items[0] == item && self.items[1] == item && self.items[2] == item } - fn check_second_line(&self, item: Item) -> bool { + fn check_second_row(&self, item: Item) -> bool { self.items[3] == item && self.items[4] == item && self.items[5] == item } - fn check_last_line(&self, item: Item) -> bool { + fn check_last_row(&self, item: Item) -> bool { self.items[6] == item && self.items[7] == item && self.items[8] == item } @@ -131,42 +131,16 @@ impl Board { self.items[2] == item && self.items[4] == item && self.items[6] == item } - /// instead of scanning all the board, checks input "win" combinaison - fn check_win(&self, player: Player, idx: usize) -> bool { + fn check_win(&self, player: Player) -> bool { let item = player.item; - match idx { - 0 => { - self.check_first_col(item) - || self.check_first_line(item) - || self.check_first_diag(item) - } - 1 => self.check_first_line(item) || self.check_second_col(item), - 2 => { - self.check_first_line(item) - || self.check_last_col(item) - || self.check_last_diag(item) - } - 3 => self.check_first_col(item) || self.check_second_line(item), - 4 => { - self.check_second_col(item) - || self.check_second_line(item) - || self.check_last_diag(item) - || self.check_first_diag(item) - } - 5 => self.check_last_col(item) || self.check_second_line(item), - 6 => { - self.check_first_col(item) - || self.check_last_line(item) - || self.check_last_diag(item) - } - 7 => self.check_last_line(item) || self.check_second_col(item), - 8 => { - self.check_last_line(item) - || self.check_last_col(item) - || self.check_first_diag(item) - } - _ => false, - } + return self.check_first_col(item) + || self.check_second_col(item) + || self.check_last_col(item) + || self.check_first_row(item) + || self.check_second_row(item) + || self.check_last_row(item) + || self.check_first_diag(item) + || self.check_last_diag(item); } } @@ -439,12 +413,10 @@ impl TicTacToe { } let item_icon: String = player.item.into(); - let mut item_position; loop { match self.select_player_item() { Ok(pos) => { - item_position = pos; match self.board.set_item(player.item, pos) { Ok(_) => break, Err(e) => { @@ -459,7 +431,7 @@ impl TicTacToe { } // check after the 5th round if there's a winner - if self.turn > 4 && self.board.check_win(player, item_position - 1) { + if self.turn > 4 && self.board.check_win(player) { info(format!("{} wins!", item_icon)); self.board.show(); break;