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