2 个不稳定版本
0.2.0 | 2024年1月4日 |
---|---|
0.1.0 | 2023年12月27日 |
#6 在 #un
33KB
694 行
此库提供了围绕游戏反弹机器人的不同模块。有关反弹机器人的更多信息: https://fr.wikipedia.org/wiki/Ricochet_Robots.
此库基于问题的概念。一个 Problème
是一个大小固定的棋盘,由常数 TAILLE_PLATEAU = 16
确定,其中设置了
- 一个骨架,即障碍物的所有位置;
- 机器人必须达到目标的位置,通常简称为 robot;
- 其他机器人的位置,通常简称为 辅助者,数量为
NB_AUXILIAIRES = 3
; - 目标的位置。
以下是一个问题定义的示例。
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();
一个问题是一个固定的棋盘,就像一本书中显示的棋盘问题。一个 Calculateur
代表一个可移动的棋盘,允许机器人根据步数移动,并随时检查目标是否被达到。
函数 verifier
允许验证一个解决方案,即一系列步数。
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."),
}
依赖关系
~19MB
~242K SLoC