aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/examples/comment_example.py
blob: e7242cb25815367b1ee8b4c5a054d5871c9998f7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#!/usr/bin/env python3
"""
OneRoll 注释功能示例

展示如何使用 OneRoll 的注释功能来标记和记录骰子投掷。
"""

import oneroll
from rich.console import Console
from rich.table import Table
from rich.panel import Panel

console = Console()

def basic_comment_example():
    """基本注释功能示例"""
    console.print(Panel.fit("基本注释功能示例", style="bold blue"))
    
    # 基本注释
    result = oneroll.roll("3d6 + 2 # 攻击投掷")
    console.print(f"表达式: {result['expression']}")
    console.print(f"总点数: {result['total']}")
    console.print(f"注释: {result['comment']}")
    console.print()

def dnd_comment_example():
    """D&D 游戏注释示例"""
    console.print(Panel.fit("D&D 游戏注释示例", style="bold green"))
    
    # 模拟一场 D&D 战斗
    expressions = [
        "1d20 + 5 # 攻击检定",
        "2d6 + 3 # 伤害投掷",
        "1d20 + 3 # 法术豁免检定",
        "4d6kh3 # 力量属性投掷",
        "2d20kh1 # 优势攻击检定",
        "1d4 + 1 # 治疗药水"
    ]
    
    table = Table(title="D&D 战斗记录")
    table.add_column("表达式", style="cyan")
    table.add_column("总点数", style="green")
    table.add_column("注释", style="yellow")
    table.add_column("结果", style="white")
    
    for expr in expressions:
        result = oneroll.roll(expr)
        total = result['total']
        
        # 根据注释类型判断结果
        if "攻击检定" in result['comment']:
            if total >= 15:
                outcome = "命中!"
            else:
                outcome = "未命中"
        elif "伤害投掷" in result['comment']:
            outcome = f"造成 {total} 点伤害"
        elif "豁免检定" in result['comment']:
            if total >= 12:
                outcome = "豁免成功"
            else:
                outcome = "豁免失败"
        elif "属性投掷" in result['comment']:
            outcome = f"属性值: {total}"
        elif "优势" in result['comment']:
            outcome = "优势投掷"
        else:
            outcome = "投掷完成"
        
        table.add_row(
            expr,
            str(total),
            result['comment'],
            outcome
        )
    
    console.print(table)

def rpg_session_example():
    """RPG 会话记录示例"""
    console.print(Panel.fit("RPG 会话记录示例", style="bold magenta"))
    
    # 模拟一个 RPG 会话
    session_log = [
        ("1d20 + 4 # 开锁检定", "尝试打开宝箱"),
        ("3d6 # 宝箱陷阱伤害", "触发陷阱"),
        ("1d20 + 2 # 敏捷豁免", "躲避陷阱"),
        ("2d8 + 2 # 宝箱中的金币", "发现宝藏"),
        ("1d100 # 随机遭遇", "探索洞穴"),
        ("4d6kh3 # 新角色属性", "创建角色")
    ]
    
    for expr, description in session_log:
        result = oneroll.roll(expr)
        console.print(f"[bold]{description}[/bold]")
        console.print(f"  投掷: {expr}")
        console.print(f"  结果: {result['total']}")
        console.print(f"  注释: {result['comment']}")
        console.print()

def complex_expression_comment_example():
    """复杂表达式注释示例"""
    console.print(Panel.fit("复杂表达式注释示例", style="bold red"))
    
    complex_expressions = [
        "2d6 + 3d8 - 5 # 复合伤害计算",
        "(2d6 + 3) * 2 # 暴击伤害",
        "4d6!kh3 # 爆炸骰子属性投掷",
        "6d6dl2kh3 # 复杂修饰符测试",
        "3d6r1 + 2d8ro2 # 重投组合攻击"
    ]
    
    for expr in complex_expressions:
        try:
            result = oneroll.roll(expr)
            console.print(f"[bold cyan]{expr}[/bold cyan]")
            console.print(f"  总点数: [bold green]{result['total']}[/bold green]")
            console.print(f"  注释: [bold yellow]{result['comment']}[/bold yellow]")
            console.print(f"  详情: {result['details']}")
            console.print()
        except Exception as e:
            console.print(f"[red]错误: {expr} - {e}[/red]")
            console.print()

def comment_statistics_example():
    """注释统计示例"""
    console.print(Panel.fit("注释统计示例", style="bold yellow"))
    
    # 统计不同类型的投掷
    attack_rolls = oneroll.roll_multiple("1d20 + 5 # 攻击检定", 10)
    damage_rolls = oneroll.roll_multiple("2d6 + 3 # 伤害投掷", 10)
    
    # 计算攻击命中率
    attack_totals = [r['total'] for r in attack_rolls]
    hit_count = sum(1 for total in attack_totals if total >= 15)
    hit_rate = hit_count / len(attack_totals) * 100
    
    # 计算平均伤害
    damage_totals = [r['total'] for r in damage_rolls]
    avg_damage = sum(damage_totals) / len(damage_totals)
    
    console.print(f"攻击检定统计:")
    console.print(f"  命中率: {hit_rate:.1f}% ({hit_count}/{len(attack_totals)})")
    console.print(f"  平均攻击值: {sum(attack_totals) / len(attack_totals):.1f}")
    console.print()
    
    console.print(f"伤害投掷统计:")
    console.print(f"  平均伤害: {avg_damage:.1f}")
    console.print(f"  最小伤害: {min(damage_totals)}")
    console.print(f"  最大伤害: {max(damage_totals)}")
    console.print()

def error_handling_example():
    """错误处理示例"""
    console.print(Panel.fit("错误处理示例", style="bold red"))
    
    # 测试各种边界情况
    test_cases = [
        "3d6 # 正常注释",
        "3d6 #",  # 空注释
        "3d6",    # 无注释
        "3d6 # 这是一个很长的注释,用来测试长注释的显示效果",
        "3d6 # 中文注释测试",
        "3d6 # 特殊字符: !@#$%^&*()",
    ]
    
    for expr in test_cases:
        try:
            result = oneroll.roll(expr)
            comment = result.get('comment', '')
            if comment:
                console.print(f"✅ {expr}")
                console.print(f"   注释: '{comment}'")
            else:
                console.print(f"✅ {expr} (无注释)")
        except Exception as e:
            console.print(f"❌ {expr} - 错误: {e}")
        console.print()

def main():
    """主函数"""
    console.print(Panel.fit("OneRoll 注释功能示例", style="bold blue"))
    console.print("展示如何使用 # 在骰子表达式中添加注释\n")
    
    basic_comment_example()
    dnd_comment_example()
    rpg_session_example()
    complex_expression_comment_example()
    comment_statistics_example()
    error_handling_example()
    
    console.print(Panel.fit("示例完成!注释功能让骰子投掷更有意义!", style="bold green"))

if __name__ == "__main__":
    main()