use macroquad::prelude::*; use ricochet_robots::graphiques::*; use ricochet_robots::CalculateurAvecMemoire; use ricochet_robots::{verifier, Case, Coup, Direction, Interstice, Probleme, Squelette, TypePion}; fn conf_fenetre() -> macroquad::window::Conf { macroquad::window::Conf { window_title: "Ricochet Robots".to_string(), window_height: TAILLE_FOND as i32 + 50, window_width: TAILLE_FOND as i32, ..Default::default() } } #[macroquad::main(conf_fenetre)] async fn main() { // Génère un squelette constitué de deux barrières let squelette = Squelette::from(vec![ Interstice::entre(Case::new(0, 3), Case::new(0, 4)), Interstice::entre(Case::new(3, 3), Case::new(4, 3)), ]); let probleme = Probleme::construire( &squelette, // position du robot Case::new(0, 0), // position des auxiliaires [Case::new(1, 0), Case::new(0, 1), Case::new(2, 2)], // position de la cible Case::new(2, 3), ) .unwrap(); let solution = vec![ Coup::new(TypePion::Auxiliaire(1), Direction::Bas), Coup::new(TypePion::Auxiliaire(1), Direction::Droite), Coup::new(TypePion::Robot, Direction::Bas), Coup::new(TypePion::Robot, Direction::Droite), ]; match verifier(&solution, &probleme) { Some(n) => println!("Solution valide en {n} mouvements"), None => println!("Solution invalide."), } let mut calculateur = CalculateurAvecMemoire::initialiser(&probleme); let mut pion_saisi = TypePion::Robot; loop { if is_key_pressed(KeyCode::A) { pion_saisi = TypePion::Robot; } else if is_key_pressed(KeyCode::Z) { pion_saisi = TypePion::Auxiliaire(0); } else if is_key_pressed(KeyCode::E) { pion_saisi = TypePion::Auxiliaire(1); } else if is_key_pressed(KeyCode::R) { pion_saisi = TypePion::Auxiliaire(2); } else if is_key_pressed(KeyCode::Up) { calculateur.jouer_coup(&Coup::new(pion_saisi, Direction::Haut)); } else if is_key_pressed(KeyCode::Down) { calculateur.jouer_coup(&Coup::new(pion_saisi, Direction::Bas)); } else if is_key_pressed(KeyCode::Right) { calculateur.jouer_coup(&Coup::new(pion_saisi, Direction::Droite)); } else if is_key_pressed(KeyCode::Left) { calculateur.jouer_coup(&Coup::new(pion_saisi, Direction::Gauche)); } else if is_key_pressed(KeyCode::Enter) { calculateur.reinitialiser(); } else if is_key_pressed(KeyCode::Backspace) { calculateur.annuler_coup().unwrap_or_default(); } dessiner_calculateur(&calculateur); next_frame().await } }