我正在使用 Rust 为 Sega Megadrive 进行嵌入式游戏开发,并且想要一个随机数生成器来提高可重玩性。它可以是伪随机的:不需要任何安全措施。
我一直在查看属于“无标准库”部门的 rand 箱,但我不确定如何在我的 Crate Cargo.toml 中使用它:
[dependencies]
rand = {version = "0.8.3", default-features = false}
当我禁用
default-features
时,前奏中就不再有 random
功能了。有 Rng
特性,但我太缺乏经验,不知道如何使用它。
要在没有
rand
的情况下使用 std
板条箱,您需要手动使用无需它即可工作的生成器之一。这些生成器是 OsRng
和 SmallRng
结构。顾名思义,第一个使用操作系统的生成器,这需要 getrandom
板条箱,而 SEGA Megadrive 可能不支持该板条箱。
不过,SmallRng
应该可以正常工作。我们不能使用 random()
函数,我们需要手动创建生成器,然后调用它的方法。
为此,我们首先必须创建一个生成器,如下所示:
let mut small_rng = SmallRng::seed_from_u64([insert your seed here]);
您还可以使用
seed_from_u32
,您可以在此处找到其文档。
然后我们就可以这样使用它:
let rand_num = small_rng.next_u64();
重要的是,我们必须导入
RngCore
特征才能使用这些函数,这样:
use rand::{Rng, SeedableRng};
use rand::rngs::SmallRng;
use rand::RngCore;
SmallRng
依赖于 small_rng
crate 功能,因此您应该以这种方式导入它(在 Cargo.toml
文件中):
rand = { version = "0.8.3", features = ["small_rng"], default-features = false }
我还应该留下免责声明:
SmallRng
的生成器在加密上不安全。