basic_usage/
basic_usage.rs1use 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}