feat: add exploding dice

This commit is contained in:
2025-11-16 10:40:28 +01:00
parent f5e5ee2c91
commit 5f10a57d35
3 changed files with 24 additions and 2 deletions

View File

@@ -11,11 +11,25 @@ fn roll_range(range: RangeInclusive<i32>) -> Vec<i32> {
vec![rng.random_range(range)]
}
fn roll_exploding(sides: u16, threshold: i32) -> Vec<i32> {
let mut rng = rand::rng();
let mut results = Vec::<i32>::new();
loop {
let result: i32 = rng.random_range(1..=sides as i32);
results.push(result);
if result < threshold {
break;
}
}
results
}
impl Die {
pub fn roll(&self) -> Vec<i32> {
match self {
Die::Sides(sides) => roll_sides(*sides),
Die::Exploding(sides, threshold) => roll_exploding(*sides, *threshold),
Die::Range(range) => roll_range(range.clone()),
Die::Sides(sides) => roll_sides(*sides),
}
}
}

View File

@@ -16,4 +16,11 @@ impl Handful {
}
Self { dice }
}
pub fn grab_exploding(dice_num: u16, sides: u16, threshold: i32) -> Self {
let mut dice = Vec::<Die>::new();
for _ in 1..=dice_num {
dice.push(Die::Exploding(sides, threshold));
}
Self { dice }
}
}