diff --git a/front_end/src/ai.rs b/front_end/src/ai.rs index 65da7a9..1c0d825 100644 --- a/front_end/src/ai.rs +++ b/front_end/src/ai.rs @@ -216,7 +216,7 @@ fn get_block_amount(player: Turn, idx: usize, amount: usize, board: &BoardType) } // check right - count = 0; + // count = 0; // don't reset count, since horizontal may pass through idx temp_idx = idx; while temp_idx % (COLS as usize) < (COLS - 1) as usize { temp_idx += 1; @@ -260,6 +260,21 @@ fn get_block_amount(player: Turn, idx: usize, amount: usize, board: &BoardType) } } + // check diagonal right up + // count = 0; // don't reset count as diagonal may pass through idx + temp_idx = idx; + while temp_idx % (COLS as usize) < (COLS - 1) as usize && temp_idx / (COLS as usize) > 0 { + temp_idx = temp_idx + 1 - COLS as usize; + if board[temp_idx].get() == opposite.into() { + count += 1; + if count >= amount { + return true; + } + } else { + break; + } + } + // check diagonal right down count = 0; temp_idx = idx; @@ -278,7 +293,7 @@ fn get_block_amount(player: Turn, idx: usize, amount: usize, board: &BoardType) } // check diagonal left up - count = 0; + // count = 0; // don't reset count as diagonal may pass through idx temp_idx = idx; while temp_idx % (COLS as usize) > 0 && temp_idx / (COLS as usize) > 0 { temp_idx = temp_idx - 1 - COLS as usize; @@ -292,21 +307,6 @@ fn get_block_amount(player: Turn, idx: usize, amount: usize, board: &BoardType) } } - // check diagonal right up - count = 0; - temp_idx = idx; - while temp_idx % (COLS as usize) < (COLS - 1) as usize && temp_idx / (COLS as usize) > 0 { - temp_idx = temp_idx + 1 - COLS as usize; - if board[temp_idx].get() == opposite.into() { - count += 1; - if count >= amount { - return true; - } - } else { - break; - } - } - // exhausted all possible potential wins, therefore does not block a win false } diff --git a/front_end/src/state.rs b/front_end/src/state.rs index e921471..ea90969 100644 --- a/front_end/src/state.rs +++ b/front_end/src/state.rs @@ -197,6 +197,15 @@ pub fn new_empty_board() -> BoardType { ] } +pub fn board_deep_clone(board: &BoardType) -> BoardType { + let cloned_board = new_empty_board(); + for i in 0..board.len() { + cloned_board[i].replace(board[i].get()); + } + + cloned_board +} + pub type PlacedType = [Rc>; 56]; pub fn new_placed() -> PlacedType {