#robots #case #du #un #en #de #ricochet

bin+lib ricochet_robots

Une librairie en français autour du jeu Ricochet Robots

2 unstable releases

0.2.0 Jan 4, 2024
0.1.0 Dec 27, 2023

#6 in #un

MIT license

33KB
694 lines

Cette bibliothèque fournit différents modules autour du jeu Ricochet Robots. Pour plus d'informations sur Ricochet Robots : https://fr.wikipedia.org/wiki/Ricochet_Robots.

Cette librairie est basée sur la notion de problème. Un Problème est un plateau, de taille fixée par la constante TAILLE_PLATEAU = 16, où sont fixés :

  • un squelette, autrement dit l'ensemble des positions des barrières ;
  • la position du robot qui devra atteindre la cible, généralement dénommé simplement robot ;
  • la position des autres robots, généralement dénommés auxiliaires, au nombre de NB_AUXILIAIRES = 3 ;
  • la position de la cible.

Voici un exemple de définition d'un problème.

use ricochet_robots::{verifier, Case, Coup, Direction, Interstice, Probleme, Squelette, TypePion};

// 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();

Un problème est un plateau figé, tel un problème d'échecs affiché dans un livre. Un Calculateur représente un plateau mobile et permet de faire se déplacer les robots selon des coups, ainqi que de vérifier à tout moment si la cible est atteinte.

La fonction verifier permet de valider une solution, c'est-à-dire une suite de coups.

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."),
}

Dependencies

~12MB
~270K SLoC