More AI tweaks
This commit is contained in:
parent
d8377d280a
commit
38e7772d4f
1 changed files with 14 additions and 1 deletions
|
@ -1,8 +1,9 @@
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
use crate::constants::{AI_EASY_MAX_CHOICES, AI_NORMAL_MAX_CHOICES, COLS, ROWS};
|
use crate::constants::{AI_EASY_MAX_CHOICES, AI_NORMAL_MAX_CHOICES, COLS, ROWS};
|
||||||
|
use crate::game_logic::check_win_draw;
|
||||||
use crate::random_helper::get_seeded_random;
|
use crate::random_helper::get_seeded_random;
|
||||||
use crate::state::{BoardState, BoardType, Turn};
|
use crate::state::{board_deep_clone, BoardState, BoardType, Turn};
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||||
pub enum AIDifficulty {
|
pub enum AIDifficulty {
|
||||||
|
@ -190,6 +191,18 @@ fn get_utility_for_slot(player: Turn, slot: SlotChoice, board: &BoardType) -> Op
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check if placing a token here allows the opposing player to win
|
||||||
|
if idx >= COLS as usize {
|
||||||
|
let cloned_board = board_deep_clone(board);
|
||||||
|
cloned_board[idx].replace(player.into());
|
||||||
|
cloned_board[idx - (COLS as usize)].replace(player.get_opposite().into());
|
||||||
|
if let Some((state, _)) = check_win_draw(&cloned_board) {
|
||||||
|
if state == player.get_opposite().into() {
|
||||||
|
utility *= 0.1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Some(utility)
|
Some(utility)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue