fix: check the whole board to check a win
This commit is contained in:
parent
6131589084
commit
fbc1aafce6
54
src/main.rs
54
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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user