use crate::bitboards::Bitboard;
pub fn search(pos: &mut Bitboard, mut alpha: i8, mut beta: i8) -> (i8, u8) {
if pos.x_won() {
return (100 - (pos.num_moves() as i8), 9);
}
if pos.o_won() {
return (-100 + (pos.num_moves() as i8), 9);
}
if pos.is_draw() {
return (0, 9);
}
return if pos.current_player() {
let mut max_eval = i8::MIN + 10;
let mut max_move: u8 = 9;
for square in 0..9 {
if !pos.is_legal(square) {
continue;
}
pos.play(square);
let eval = search(pos, alpha, beta).0;
pos.clear_square(square);
if eval > max_eval {
max_eval = eval;
max_move = square;
if eval > beta {
break;
}
if eval > alpha {
alpha = eval;
}
}
}
(max_eval, max_move)
} else {
let mut min_eval = i8::MAX - 10;
let mut min_move: u8 = 9;
for square in 0..9 {
if !pos.is_legal(square) {
continue;
}
pos.play(square);
let eval = search(pos, alpha, beta).0;
pos.clear_square(square);
if eval < min_eval {
min_eval = eval;
min_move = square;
if eval < alpha {
break;
}
if eval < beta {
beta = eval;
}
}
}
(min_eval, min_move)
};
}