3 个不稳定版本
0.2.0 | 2024年5月22日 |
---|---|
0.1.2 | 2023年10月12日 |
0.1.0 | 2023年10月12日 |
#1 in #总分
13KB
350 行
骰子包(Rust Lib)
这个库使用标准的RPG符号生成掷骰结果,产生总分,同时也提供所有掷骰结果的详细分解。
要导入它使用
// Cargo.toml
[dependencies]
dice-bag = "0.2"
它有一个主入口点为
use dice::dice;
dice::roll("3d10+1")
产生一个结构
AllRollResults {
pub total: isize,
pub rolled: Vec<RollResult>,
}
RollResult {
pub total: isize,
pub rolled: DiceRolls,
pub selected_rolls: DiceRolls,
pub sides: usize,
pub num_dice: usize,
pub modifier: isize,
}
例如,对于3d10+1掷骰6,5,2
{
total: 14,
rolled: [
{
total: 14
rolled: [ 6, 5, 2]
selected_rolls: [ 6, 5, 2]
sides: 6
num_dice: 3
modifier: 1
}
]
}
骰子也可以连在一起
dice::roll("2d8 4d4+8")
结果可能看起来像这样
{
total: 25,
rolled: [
{
total: 9
rolled: [ 8, 1]
selected_rolls: [ 8, 1]
sides: 8
num_dice: 2
modifier: 0
},
{
total: 16
rolled: [ 3, 2, 2, 1]
selected_rolls: [ 3, 2, 2, 1]
sides: 4
num_dice: 4
modifier: 8
}
]
}
您可以直接使用roll方法
dice::Dice::roll(3, 6, -2);
它产生一个单例 Result<RollResult, String>
,例如
Ok( RollResult {
total: 6
rolled: [ 5, 2, 1 ]
selected_rolls: [ 5, 2, 1 ]
sides: 6
num_dice: 3
modifier: -2
} )
掷骰结果都按从高到低的顺序排序。
最后,重写结果的 Display
以生成可解析的slug
dice::roll("3d6-2 2d4+1")).to_string();
可能产生
3d6-2,2d4+1:[4,2,1],[4,3]:13
dice::roll("2d10+3")).to_string();
可能产生
2d10+3:[10,1]:14
依赖
~2.3–3.5MB
~58K SLoC