fix: check the whole board to check a win
This commit is contained in:
parent
6131589084
commit
fbc1aafce6
50
src/main.rs
50
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
|
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
|
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
|
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
|
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) -> bool {
|
||||||
fn check_win(&self, player: Player, idx: usize) -> bool {
|
|
||||||
let item = player.item;
|
let item = player.item;
|
||||||
match idx {
|
return self.check_first_col(item)
|
||||||
0 => {
|
|| self.check_second_col(item)
|
||||||
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_col(item)
|
||||||
|| self.check_last_diag(item)
|
|| self.check_first_row(item)
|
||||||
}
|
|| self.check_second_row(item)
|
||||||
3 => self.check_first_col(item) || self.check_second_line(item),
|
|| self.check_last_row(item)
|
||||||
4 => {
|
|
||||||
self.check_second_col(item)
|
|
||||||
|| self.check_second_line(item)
|
|
||||||
|| self.check_last_diag(item)
|
|
||||||
|| self.check_first_diag(item)
|
|| self.check_first_diag(item)
|
||||||
}
|
|| self.check_last_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,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -439,12 +413,10 @@ impl TicTacToe {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let item_icon: String = player.item.into();
|
let item_icon: String = player.item.into();
|
||||||
let mut item_position;
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
match self.select_player_item() {
|
match self.select_player_item() {
|
||||||
Ok(pos) => {
|
Ok(pos) => {
|
||||||
item_position = pos;
|
|
||||||
match self.board.set_item(player.item, pos) {
|
match self.board.set_item(player.item, pos) {
|
||||||
Ok(_) => break,
|
Ok(_) => break,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
@ -459,7 +431,7 @@ impl TicTacToe {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check after the 5th round if there's a winner
|
// 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));
|
info(format!("{} wins!", item_icon));
|
||||||
self.board.show();
|
self.board.show();
|
||||||
break;
|
break;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user