ricochet_robots 0.2.0

Une librairie en français autour du jeu Ricochet Robots
Documentation
  • Coverage
  • 22.08%
    17 out of 77 items documented2 out of 54 items with examples
  • Size
  • Source code size: 42.94 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 2.29 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Links
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • soupirs

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