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

bin+lib ricochet_robots

围绕游戏反弹机器人的法语库

2 个不稳定版本

0.2.0 2024年1月4日
0.1.0 2023年12月27日

#6#un

MIT 许可证

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