5 个不稳定版本
0.8.7 | 2022 年 10 月 4 日 |
---|---|
0.8.2 | 2021 年 2 月 10 日 |
0.8.0 | 2020 年 4 月 8 日 |
0.7.0 | 2020 年 2 月 22 日 |
0.1.0 | 2020 年 2 月 21 日 |
在 游戏开发 中排名第 1543
每月下载量 3,791 次
用于 11 个包(5 个直接使用)
30KB
525 代码行
bracket-random
作为 bracket-lib 系列的一部分,bracket-random 专注于提供以骰子为导向的随机数。它还(可选)包括解析 RPG 风格的骰子字符串(例如 3d6+12
)。它针对游戏,尤其是角色扮演游戏。它使用高性能的 XorShift
算法进行随机数生成。
使用 bracket-random
要获取 bracket-random
,请将以下内容包含在您的 Cargo.toml
文件中
[dependencies]
bracket-random = "0.8.2"
它很快将以包的形式提供。
您可以通过包含 prelude
并实例化 RandomNumberGenerator
来使用 bracket-random
use bracket_random::prelude::*;
let mut rng = RandomNumberGenerator::new();
您还可以使用 RandomNumberGenerator::seeded(1234)
为 RNG 设置种子。
获取随机数
有几种随机选项可供使用
rng.roll_dice(1, 6)
抛一次六面骰子。rng.roll_dice(3, 6)
抛三个六面骰子并将它们相加。rng.roll_str("3d6+12")
抛三个六面骰子并将它们相加,然后加上 12。rng.next_u64
提供一个随机u64
,在u64
范围内。rng.rand::<TYPE>()
尝试提供一个类型为TYPE
的随机数。rng.range(min, max)
尝试提供一个指定范围内的随机数。rng.slice_index(&slice)
如果没有选项,则返回一个带有None
的Option
,或者返回随机选择条目索引。这对于宝藏表很有用。rng.slice(&slice)
对于空条目返回一个带有None
的Option
,或者返回随机选择条目内容的 内容。
解析RPG风格的骰子字符串
bracket-random
库包含一个骰子字符串解析器。你可以尝试按以下方式解析字符串
use bracket_random::prelude::*;
let dice_type = parse_dice_string("3d6-4");
这返回一个 Result
,它将是 Ok
或解析错误。如果展开,它提供了一个 DiceType
结构,解析出请求掷骰子的详细信息。
它支持 1d6
、3d6+1
和 5d6-1
格式。如果您关闭 parsing
功能标志,则此功能将被排除 - 但您的项目不会被正则表达式库和 lazy_static
扩大。
功能标志
parsing
启用将骰子类型解析为字符串。serde
使DiceType
结构可序列化。- 如果您正在为
wasm32-unknown-unknown
编译,它将自动包含wasm-bindgen
。
示例
使用 cargo run --example <name>
执行示例。
diceroll
将 3d6(指定为roll_dice(1,6)
)掷 10 次,并打印结果。dicestring
将 3d6(指定为roll_str("3d6")
)掷 10 次,并打印结果。distribution
将 3d6掷 200,000 次,并绘制每个累积结果的分布。next
获取下一个 10 个u64
随机数并打印它们。rand
获取下一个 10 个f64
随机数并打印它们。这展示了rand
函数如何接受底层random
库认为足够数值的任何类型。range
从范围100.200
中获取下一个 10 个随机数并打印它们。slice_index
随机选择一个切片索引,打印它 - 以及切片后的数组内容。slice
随机选择一个切片元素并打印它。die_iterator
使用(新且需要改进的)DiceIterator
函数以紧凑的方式投掷 10d6。
依赖关系
~0.3–1.3MB
~21K SLoC