2 unstable releases
0.2.0 | Jan 4, 2024 |
---|---|
0.1.0 | Dec 27, 2023 |
#6 in #un
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