#random #dice #rogue-like #dice-rolling #gamedev #xorshift

bracket-random

基于 xorshift 的随机数生成器,专注于骰子滚动。可选包括解析 RPG 风格的骰子字符串(例如 "3d6+12")。属于 bracket-lib 系列之一。

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

Download history 1081/week @ 2024-04-08 1546/week @ 2024-04-15 1349/week @ 2024-04-22 1181/week @ 2024-04-29 1043/week @ 2024-05-06 1204/week @ 2024-05-13 1292/week @ 2024-05-20 1471/week @ 2024-05-27 1399/week @ 2024-06-03 891/week @ 2024-06-10 1078/week @ 2024-06-17 1213/week @ 2024-06-24 362/week @ 2024-07-01 762/week @ 2024-07-08 1305/week @ 2024-07-15 1198/week @ 2024-07-22

每月下载量 3,791
用于 11 个包(5 个直接使用)

MIT 许可证

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) 如果没有选项,则返回一个带有 NoneOption,或者返回随机选择条目索引。这对于宝藏表很有用。
  • rng.slice(&slice) 对于空条目返回一个带有 NoneOption,或者返回随机选择条目内容的 内容

解析RPG风格的骰子字符串

bracket-random 库包含一个骰子字符串解析器。你可以尝试按以下方式解析字符串

use bracket_random::prelude::*;
let dice_type = parse_dice_string("3d6-4");

这返回一个 Result,它将是 Ok 或解析错误。如果展开,它提供了一个 DiceType 结构,解析出请求掷骰子的详细信息。

它支持 1d63d6+15d6-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