diff --git a/Session2/TP1/taqui_jeu/src/models/taquin.rs b/Session2/TP1/taqui_jeu/src/models/taquin.rs index a4a4621..d91f1de 100644 --- a/Session2/TP1/taqui_jeu/src/models/taquin.rs +++ b/Session2/TP1/taqui_jeu/src/models/taquin.rs @@ -79,4 +79,77 @@ impl TaquinGame { return valid_direction; } + + pub fn is_grid_done(&mut self) -> bool { + let mut error_found = false; + let mut value = 1; + + for i in 0..ROWS { + if !error_found { + for j in 0..COLUMNS { + if !error_found { + if self.grid[i][j] != value { + error_found = true; + } + value += 1; + } else { + break; + } + } + } else { + break; + } + } + + if !error_found { + if self.score > 0 && (self.high_score == 0 || self.score > self.high_score) { + self.high_score = self.score; + } + } + + return error_found; + } + + pub fn init_grid(&mut self) { + let move_nmbr = self.rng.random_range(400..500); + let mut rnd_nmbr = [0u8, 0, 0, 0]; + + self.resolve(); + + for _ in 0..move_nmbr { + loop { + rnd_nmbr[3] = self.rng.random_range(0..4); + if rnd_nmbr[0] != rnd_nmbr[3] { + break; + } + } + + rnd_nmbr = [rnd_nmbr[1], rnd_nmbr[2], rnd_nmbr[3], rnd_nmbr[3]]; + + self.move_to(match rnd_nmbr[3] { + 0 => Directions::Up, + 1 => Directions::Down, + 2 => Directions::Left, + 3 => Directions::Right, + _ => Directions::Up, + }); + } + + self.score = 0; + } + + fn exchange(&mut self, ax: usize, ay: usize, bx: usize, by: usize) {} + + pub fn resolve(&mut self) { + let mut value = 1; + self.score = 0; + self.empty_coord = [ROWS - 1, COLUMNS - 1]; + + for i in 0..ROWS { + for j in 0..COLUMNS { + self.grid[i][j] = value; + value += 1; + } + } + } }