< 返回版块

7sDream 发表于 2021-07-12 18:05

Tags:TRPG,Dice,Random

写了一个用于电子 TRPG 里,模拟骰子投掷的小 crate。

crates.io 里也有不少类似的库了,还自己写是因为以前我写了个 QQ 机器人,就支持这个功能,大家在 QQ 里都习惯以前的语法了,其他库要重新记语法大家都不愿记,所以最终还是自己重新写了个。

例子:

let attack = "3d6+2d4+1";

println!("roll your attack({}), result: {}", attack, gurgle::roll(attack).unwrap());

// output: roll your attack(3d6+2d4+1), result: 16
use gurgle::Gurgle;

let attack = "3d6+2d4+1>15";
let dice = Gurgle::compile(attack).unwrap();
let result = dice.roll();

println!("roll your attack({}), result: {}", attack, result);

// output: roll your attack(3d6+2d4+1>15), result: (4+3+1) + (1+3) + 1 = 15, target is >15, failed

其实还支持乘法,括号,以及一组骰子不加和而是取最大/最小值等语法,详细请看文档。

对了,解析器用的 pest 库,挺好用的。 因为是自用而已,支持的语法比较少,项目结构也挺简单,如果有想用 pest 的话,可以作为一个小例子项目。

在群里,通过微信机器人使用这个库的例子:


项目地址:https://github.com/7sDream/gurgle

文档:https://docs.rs/gurgle

评论区

写评论

还没有评论

1 共 0 条评论, 1 页