Skip to main content

basic_usage/
basic_usage.rs

1//! Basic usage examples demonstrating the dice-parser API.
2
3use dice_parser::{DiceExpr, Keep, RollSpec};
4
5fn main() {
6    println!("=== Basic Parsing and Rolling ===");
7    let expr = DiceExpr::parse("2d6+3").unwrap();
8    let result = expr.roll().unwrap();
9    println!("Expression: 2d6+3");
10    println!("Total: {}", result.total);
11    println!("Rolls: {:?}", result.rolls);
12    println!("Modifier: {}", result.modifier);
13    println!();
14
15    println!("=== Manual Construction ===");
16    let roll_spec = RollSpec::new(4, 6, Some(Keep::Highest(3)));
17    let expr = DiceExpr::Roll(roll_spec);
18    let result = expr.roll().unwrap();
19    println!("Expression: 4d6 keep highest 3");
20    println!("Total: {}", result.total);
21    println!("All rolls: {:?}", result.rolls);
22    println!();
23
24    println!("=== Complex Expression ===");
25    let d2d6 = DiceExpr::Roll(RollSpec::new(2, 6, None));
26    let d1d4 = DiceExpr::Roll(RollSpec::new(1, 4, None));
27    let modifier = DiceExpr::Literal(2);
28    let sum = DiceExpr::Sum(Box::new(d2d6), Box::new(d1d4));
29    let expr = DiceExpr::Difference(Box::new(sum), Box::new(modifier));
30    let result = expr.roll().unwrap();
31    println!("Expression: (2d6 + 1d4) - 2");
32    println!("Total: {}", result.total);
33    println!();
34
35    println!("=== D&D 5e Advantage ===");
36    let advantage = DiceExpr::Roll(RollSpec::new(2, 20, Some(Keep::Highest(1))));
37    let result = advantage.roll().unwrap();
38    println!("Expression: 2d20 keep highest 1 (advantage)");
39    println!("Rolls: {:?}", result.rolls);
40    println!("Result: {}", result.total);
41    println!();
42
43    println!("=== D&D 5e Disadvantage ===");
44    let disadvantage = DiceExpr::Roll(RollSpec::new(2, 20, Some(Keep::Lowest(1))));
45    let result = disadvantage.roll().unwrap();
46    println!("Expression: 2d20 keep lowest 1 (disadvantage)");
47    println!("Rolls: {:?}", result.rolls);
48    println!("Result: {}", result.total);
49    println!();
50
51    println!("=== Character Ability Scores ===");
52    println!("Rolling 4d6 drop lowest for 6 abilities:");
53    let ability_roll = DiceExpr::Roll(RollSpec::new(4, 6, Some(Keep::Highest(3))));
54    for i in 0..6 {
55        let result = ability_roll.roll().unwrap();
56        println!("  Ability {}: {} (rolls: {:?})", i + 1, result.total, result.rolls);
57    }
58}