#掷骰 #骰子符号 #RPG #掷骰结果 #生成 #标准 #总分

dice-bag

这个库使用标准的RPG符号生成掷骰结果,产生总分,同时也提供所有掷骰结果的详细分解,如果需要的话。

3 个不稳定版本

0.2.0 2024年5月22日
0.1.2 2023年10月12日
0.1.0 2023年10月12日

#1 in #总分

LGPL-3.0-only

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