1. 概述

1.1 什么是 WTCD

WTCD 全名 Wearable Technology's Conditional Document,是琳为《可穿戴科技》项目设计的分支引擎所使用的语言,允许作者非常容易地编写可互动的(带有分支选项的)小说。设计之初是为了满足帕蒂卡的小说的分支需要,之后就发展成了一门完整的语言。

WTCD 是一门“四分之一”编译的语言 —— WTCD 的编译器会将源文件(.wtcd) 解析(parse)成 JSON 格式的 AST,然后由解释器执行(interpret)。

WTCD 是一门不是很弱类型的语言 —— 每一个变量都有指定的类型并且不能存储类型不符合的值。然而 WTCD 的编译器并不会进行类型推断,因此类型错误只会在运行时被丢出。

在 WTCD 中,通常来说代码逻辑和具体小说内容是分开的,以避免在代码之间混入大量影响理解逻辑的小说正文内容。

与大多数语言不同的是。WTCD 是一个没有分隔符的语言 —— 这意味着在 WTCD 中每一个表达式或是申明之后不需要添加分号,甚至在列表的元素之间也不需要添加逗号。需要注意的是,没有分割符并不代表用换行作为分割,恰恰相反,对于 WTCD 来说,换行的作用和空格或是 TAB 是完全一致的(除了单行注释,带有换行的字符串以及用 Markdown 编写的正文) —— 多个表达式之间使用空格分割或者换行分割都是可行的,因此 WTCD 的语句之间(虽然建议,但是)不需要添加换行

1.2 Hello World!

下面是 WTCD 的 Hello World!:

WTCD 1.3
section helloWorld then exit

---<<< helloWorld >>>---
# Hello World!

执行效果

1.3 一个更色情复杂的例子

Hello World! 完全无法演示 WTCD 的任何功能,因此这里给出一个稍微复杂一些的例子:

WTCD 1.3
declare [
  boolean vibrator = false
]
section start then selection [
  choice "按下开关" goto press
  choice "不按" goto doNotPress
]
section press {
  vibrator = true
} then goto walkHome
section doNotPress then goto walkHome
section walkHome then vibrator
  ? goto czpClimax
  : goto czpGoToGrandmasHouse
section czpClimax then exit
section czpGoToGrandmasHouse then exit

---<<< start >>>---
# 稍微复杂点的涉及粉红色遥控器的例子
面对少女的背影,手握粉红色遥控器的你,是否要按下开关呢?

---<<< press >>>---
想到手中遥控器能给少女带来的快乐,心善的你毫不犹豫地按下了开关。

然而,出乎意料的是少女似乎丝毫没有被影响。

“可能是没电了吧...”

---<<< doNotPress >>>---
“还是不了吧...”

---<<< walkHome >>>---
这样想着,你把遥控器放进了裤子口袋里,朝家中走去。

---<<< czpClimax >>>---
突然,你远远地看到路边有一只陈志鹏正扶着墙,一脸红晕地走着。你突然明白了什么,然后愤怒地把遥控器调到了最大。

---<<< czpGoToGrandmasHouse >>>---
路上经过了一只陈志鹏。你还没来得及向他打招呼,他就说道:

“好,我要去奶奶家了。”

一脸懵逼的你只得继续向前走着。

执行效果

1.5 开始编写 WTCD

尽管 WTCD 被设计为一个独立的语言,在目前阶段,WTCD 和《可穿戴科技》是捆绑在一起的。若要下载安装使用 WTCD 的编译器和解析器,你需要先安装 Node.jsgit。然后,你需要使用 git 将《可穿戴科技》的 repo 克隆下来:

git clone https://gitgud.io/RinTepis/wearable-technology.git

克隆完成后,你需要在克隆下来的 repo 文件夹内使用 npm 进行安装并运行脚本 watch

npm install
npm run watch

如果一切顺利,该脚本会自动打开一个浏览器窗口并显示你本地版本的《可穿戴科技》。

此时,你可以开始编写 WTCD 文档了。本教程用到的所有例子的源代码都在 chapters/5 - Meta/1 - WTCD/1 - 例子 中。你可以阅读并修改它们。若要创建新的文档,在 chapters 文件夹内创建一个文件名符合《可穿戴科技》标准,后缀为 .wtcd 的文件就可以了(格式为 <显示序号> - <显示名>.wtcd,例如 233 - 哈哈.wtcd)。当你修改任何 chapters 文件夹中的文件时,之前运行的 watch 脚本会自动重新编译你的修改,因此此时无需运行任何命令,只需要刷新浏览器(你可能需要使用 ctrl+F5 来强制刷新)就可以看到修改后的版本了。

另外,若要编写 WTCD 文档,我强烈建议你使用 Visual Studio Code 并安装 WTCD 的语法高亮插件。如果你不知道的话,Visual Studio Code 是微软写的基本开源轻量编辑器,非常好用。同时,WTCD 目前只提供 Visual Studio Code 的语法高亮插件,而有语法高亮可以显著提升你的编辑体验。

1.6 版本声明

每一个 WTCD 文档的开头都是该 WTCD 文档编写时使用 WTCD 版本。其格式如下:

WTCD 1.3

目前版本是 1.3 所以请务必使用 1.3 作为版本。

WTCD 的版本使用 2/3 Semantic Versioning:

为了保证代码简介,之后的例子中将不会包含版本声明。

1.7 注释

WTCD 允许作者在单行注释和多行注释。

// 单行注释例子
/*
多行
注释
例子
*/

单行注释以 // 开始持续到当前行末,多行注释则以 /* 开始持续到 */。注释内的任何内容都不会被读取。

WTCD 不支持多行注释嵌套。