}
// 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;
}
}
- // 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 {
}
}
- // 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 {
}
}
- // 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 {
]
}
+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<Cell<bool>>; 56];
pub fn new_placed() -> PlacedType {