1个不稳定版本

0.1.0 2022年11月10日

#1037游戏开发

MIT 许可证

10KB
118

Diceroll

一个用于Rust的RPG目的简单骰子投掷库。

使用方法

通过将其添加到Cargo.toml来安装此软件包

[dependencies]
diceroll = "0.1.0"

使用库的基本方法是使用DiceRoll::new()创建一个骰子投掷,使用构建者模式配置您想要的参数。然后,将配置后的骰子投掷传递给roll()函数,这将返回一个包含i32 total)和一个包含单独rolls)的Vec的RollResult)结构。还可以将配置后的骰子投掷传递给roll_with_advantage)roll_with_disadvantage),这将返回一个包含两个投掷结果的数组,其中索引0始终包含“获胜”的投掷(具有劣势意味着最低结果,具有优势意味着最高),而索引1始终包含被丢弃的投掷。

支持以下参数

  • dice [i32] (必填):要投掷的骰子数量。
  • sides [i32] (必填):每个骰子应有多少面。
  • target [i32]:默认关闭。如果设置了此参数,则总结果将显示多少个单独的骰子产生了高于或等于目标数字的结果。这对于任何使用骰池投掷的RPG都很有用,例如《暗黑世界》和《影子奔跑》。
  • ones_subtract [bool]:默认关闭。如果设置了目标数字,启用此选项将移除每个显示1的骰子的成功。
  • explode_on [i32]:默认关闭。将记录结果,然后重新投掷任何投掷结果高于或等于explode_on数字的骰子。
  • modifier [i32]:默认关闭。将将其本身添加到(或从,如果数字为负)投掷的总和中。对使用目标数字的投掷没有影响。

示例

基本投掷

use diceroll::*;

fn main() {
    let amount_of_dice = 2;
    let sides = 6;
    let modifier = 2;
    let result = roll(DiceRoll::new()
                 .dice(amount_of_dice)
                 .sides(sides)
                 .modifier(modifier))
    println!("We rolled {}d{}+{}, which yielded a total of {}.", amount_of_dice, sides, modifier, result.total);
}

输出将类似于以下内容

We rolled 2d6+2, which yielded a total of 9.

具有优势的投掷

请注意,在这个示例中,我们使用了itertools crate来连接投掷结果。

use itertools::Itertools;
use diceroll::*;

fn main() {
    let amount_of_dice = 1;
    let sides = 20;
    let modifier = 2;
    let result = roll_with_advantage(DiceRoll::new()
        .dice(amount_of_dice)
        .sides(sides)
        .modifier(modifier));
    println!("We rolled {}d{}+{} with advantage", amount_of_dice, sides, modifier);
    println!("--- The winning roll ({}) yielded a total of {}", Itertools::join(&mut result[0].rolls.iter(), ","), result[0].total);
    println!("--- The discarded roll ({}) yielded a total of {}", Itertools::join(&mut result[1].rolls.iter(), ","), result[1].total);
}

《新暗黑世界/暗黑世界编年史》骰池投掷

请注意,在这个示例中,我们使用了itertools crate来连接投掷结果。

use itertools::Itertools;
use diceroll::*;

fn main() {
    let amount_of_dice = 5;
    let sides = 10;
    let target = 8;
    let explode_on = 10;
    let result = roll(DiceRoll::new()
        .dice(amount_of_dice)
        .sides(sides)
        .target(target)
        .explode_on(explode_on));
    println!("We rolled a dice pool of {}d{} with a target number of {} and exploding successes on {}", amount_of_dice, sides, target, explode_on);
    println!("--- The result of the rolls ({}) yielded a total of {}", Itertools::join(&mut result[0].rolls.iter(), ","), result.total);
}

依赖项

~305KB