From: Stephen Seo Date: Thu, 10 Mar 2022 07:39:26 +0000 (+0900) Subject: Tweaks to AI for correctness X-Git-Tag: sprint_02_day_4~4 X-Git-Url: https://git.seodisparate.com/stephenseo/LD53?a=commitdiff_plain;h=d8377d280aafe6a04a0c7cda12363e214944ecdf;p=EN605.607.81.SP22_ASDM_Project Tweaks to AI for correctness --- 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,13 +260,11 @@ fn get_block_amount(player: Turn, idx: usize, amount: usize, board: &BoardType) } } - // check diagonal right down - count = 0; + // 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) < (ROWS - 1) as usize - { - temp_idx = temp_idx + 1 + COLS as usize; + 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 { @@ -277,11 +275,13 @@ fn get_block_amount(player: Turn, idx: usize, amount: usize, board: &BoardType) } } - // check diagonal left up + // check diagonal right down count = 0; temp_idx = idx; - while temp_idx % (COLS as usize) > 0 && temp_idx / (COLS as usize) > 0 { - temp_idx = temp_idx - 1 - COLS as usize; + while temp_idx % (COLS as usize) < (COLS - 1) as usize + && temp_idx / (COLS as usize) < (ROWS - 1) as usize + { + temp_idx = temp_idx + 1 + COLS as usize; if board[temp_idx].get() == opposite.into() { count += 1; if count >= amount { @@ -292,11 +292,11 @@ fn get_block_amount(player: Turn, idx: usize, amount: usize, board: &BoardType) } } - // check diagonal right up - count = 0; + // check diagonal left 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; + while temp_idx % (COLS as usize) > 0 && 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 { 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 {