blob: 49d30a5054c153db3d76ab1ec93b01c9bfaf306c (
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
|
# MarkDialog
> 用 Markdown 来书写您的剧情!
## 一些碎碎语
这是一个我个人用于学习的项目,为了快速实现我想要的效果,项目中实验性地使用了 **Vibe Coding**
## 介绍
MarkDialog 是 **书写文字剧情的范式**,它定义了如何用 **Markdown** 来描述文字冒险游戏的对话。
它允许你:
- 使用 **六级标题** 表示角色
- 使用 **标题** 表示段落
- 使用 **超链接** 表示跳转
- 使用 **代码块** 来控制速度、画面,与游戏内容互动
> [!NOTE]
> 如果你想了解 Markdialog 的语法,可以点击此处
>
> [Markdialog 示例文章](#示例文章)
## 工具链
MarkDialog 提供了编译工具 `mdialogc`,它可以将您的 **Markdown** 文件编译成中间语言,以快速地在任何前端播放或执行。
```bash
# 执行,将会输出 YourMarkdown.dialog
mdialogc -i YourMarkdown.md
```
目前支持的前端:
- [Rust](#Rust 示例)
## 其他
#### 示例文章
```markdown
# 对话
###### 爱丽丝
早上好,鲍勃。
你吃早饭了么?
- [当然吃了!](#鲍勃吃过了早饭)
- [并没。](#鲍勃还没吃早饭)
- [我还不饿。](#鲍勃并不饿)
## 鲍勃吃过了早饭
###### 鲍勃
我当然**吃了早饭**!
###### 爱丽丝
*哦。*我还想你跟我一起去吃呢。
###### 旁白
(剧情结束)
## 鲍勃还没吃早饭
###### 鲍勃
并没吃。
###### 爱丽丝
[好啊!一起去吃早饭么?](#爱丽丝询问是否一起吃早饭)
## 鲍勃并不饿
###### 鲍勃
*我其实不饿*?
###### 爱丽丝
那算了,今天太遗憾了。(*小声嘟囔*)
###### 旁白
(剧情结束)
## 爱丽丝询问是否一起吃早饭
###### 鲍勃
让我想想。。。
- 走吧!
- 算了,我[并不饿](#鲍勃并不饿)
###### 爱丽丝
好啊!走吧!
###### 旁白
(于是鲍勃和爱丽丝一起吃了早饭)
(剧情结束)
```
#### Rust 示例
```toml
# Cargo.toml
[package]
name = "your_proj"
version = "0.1.0"
edition = "2024"
[dependencies]
markdialog = "0.1"
```
```rust
// main.rs
use markdialog::{markdialog, step};
markdialog!(my = "alice_and_bob.dialog");
fn main() {
let my_step = my::get_step(step!("鲍勃吃过了早饭")).unwrap();
let sentence = my_step.sentences[0];
println!(
"{} said : \"{}\"",
sentence.character.unwrap_or_default(),
sentence
.content_tokens
.iter()
.map(|token| match token {
my::Token::Text(t) => t,
my::Token::BoldText(t) => t,
my::Token::ItalicText(t) => t,
my::Token::BoldItalicText(t) => t,
_ => "",
}
.to_string())
.collect::<Vec<String>>()
.join("")
)
}
```
|