← 返回 Cattca 编辑器

Cattca 入门指南

欢迎来到 Cattca!这是一门为零基础用户设计的互动故事脚本语言。你不需要任何编程经验——只要会写 Markdown,就能创作自己的文字冒险游戏。

一句话理解 Cattca

Cattca 脚本 = 你写的故事正文 + <//> 包裹的游戏规则

正文部分就是普通的文字(支持 Markdown 排版),规则部分告诉电脑什么时候给玩家选项、怎么记住玩家的选择。

从一个简单故事开始

假设你想写这样一个故事片段:

你叫莱莉菥。早上六点,你醒了。你要继续睡觉,还是起床?

用 Cattca 写出来就是:

你叫莱莉菥。
早上六点,你醒了。

你要继续睡觉,还是起床?

</input case:
'继续睡觉' -> goto sleep:
'起床' -> goto wakeup;
/>
  • 前三行是普通文字,玩家会直接看到
  • <//> 里面是指令:给玩家两个按钮,选"继续睡觉"就跳到 sleep 段落,选"起床"就跳到 wakeup 段落

关键规则

  1. 指令必须放在 <//> 之间
  2. 指令和指令之间用分号 ; 隔开(不是换行)
  3. <//> 之外的文字就是给玩家看的

记住东西:变量

故事中经常需要"记住"一些东西:血量、分数、玩家的名字……在 Cattca 里,用变量来记。

创建一个变量

</let 分数 = 0;/>

这行指令的意思是:"创建一个叫 分数 的格子,里面放数字 0"。

let = 创建一个新变量(就像拿一张新标签纸,写上名字)

修改变量

</set 分数 = 分数 + 10;/>

这行的意思是:"把 分数 格子的值加 10"。

set = 修改已有变量的值(在标签纸上改写数字)

在文字中显示变量

你可以在故事文字中用 apply 把变量的值"贴"进去:

你当前的分数是:</apply 分数 /> 分。

如果 分数 是 10,玩家看到的就是:

你当前的分数是:10 分。

apply = 把变量的值插入到文字中(就像填空)

让玩家做选择:input case

这是互动故事最重要的指令——给玩家几个按钮,不同选择走向不同分支。

你要怎么做?

</input case:
'打开宝箱' -> goto 宝箱:
'继续前进' -> goto 走廊;/>

写法拆解: - input case: — 告诉电脑"这里需要玩家做选择" - '打开宝箱' -> goto 宝箱: — 一个选项。'打开宝箱' 是按钮上的文字,goto 宝箱 是选了这个按钮后要执行的指令 - 选项之间用 : 隔开

记住玩家的选择

如果你想记住玩家选了什么:

</input case 选择:
'打开宝箱' -> goto 宝箱:
'继续前进' -> goto 走廊;/>

你选择了:</apply 选择 />

input case 后面的 选择 是变量名,选中的按钮文字会自动存进去。

跳来跳去:label 和 goto

label 像书签,goto 像"翻到书签那一页"。

定义书签

</label 宝箱;/>
你打开了宝箱,里面有一把金钥匙!
</exit/>

跳过去

</goto 宝箱;/>

完整例子:

</input case:
'打开宝箱' -> goto 宝箱:
'离开' -> goto 离开;/>
</exit/>

</label 宝箱;/>
你获得了金钥匙!
</exit/>

</label 离开;/>
你转身离开了房间。
</exit/>

exit 是什么?

exit 意思是"故事到这里结束"。如果不写 exit,电脑会继续往下执行,可能会跑到不该去的地方。

条件判断:if

有时候你需要根据条件决定故事走向。比如"如果血量 ≤ 0,就游戏结束"。

</if 血量 <= 0 -> goto 游戏结束;/>

写法拆解: - if — "如果" - 血量 <= 0 — 条件(血量小于等于 0 吗?) - -> — "那么就" - goto 游戏结束 — 要执行的指令

条件里可以用的比较符号:

写法 含义 例子
== 等于 分数 == 100
!= 不等于 名字 != "小明"
> 大于 血量 > 0
< 小于 分数 < 60
>= 大于等于 等级 >= 10
<= 小于等于 金币 <= 0

多个条件可以组合:

</if 血量 <= 0 && 复活次数 == 0 -> goto 永久死亡;/>

&& 表示"并且",|| 表示"或者"。

让玩家打字:input text

除了给按钮选择,你也可以让玩家自由输入文字。

请输入你的名字:
</input text 玩家名;/>
你好,</apply 玩家名 />!

玩家会在输入框里打字,输入的内容存到 玩家名 变量中。

随机数:random

想加入运气成分?用 random 生成随机数。

</let 骰子 = 0;
random 骰子 = 1 6;/>
你掷出了 </apply 骰子 /> 点!

random 骰子 = 1 6 意思是"在 1 到 6 之间随机选一个整数,存到 骰子 里"。

调试:log

写脚本时,有时想知道某个变量当前的值,但又不想让玩家看到。用 log

</log "当前血量:" + 血量;/>

log 的内容会显示在右下角的日志面板中,只有你能看到。玩家看不到。

注释

在脚本里写备注给自己看,用 /* */ 包起来:

/* 这里是第二关的房间 */
</let 钥匙数量 = 0;/* 玩家还没找到钥匙 *//>

注释不会被执行,也不会给玩家看到。纯粹是给自己或其他人看的备注。

Markdown 排版

Cattca 里所有文字都支持 Markdown 排版。你可以用:

写法 效果
**粗体** 粗体
*斜体* 斜体
# 大标题 一级标题
## 中标题 二级标题
- 列表项 无序列表
> 引用 引用块

常见问题

为什么我的变量显示不出来?

检查两件事: 1. 有没有先用 let 创建这个变量? 2. 变量名拼写是否一致(区分大小写)?

</let hp = 100;/>        /* ✅ 正确:先创建 */
当前血量:</apply hp />   /* ✅ 正确:变量名一致 */

当前血量:</apply HP />   /* ❌ 错误:大小写不一致 */

为什么选项没有出现?

检查 input case 的写法: - 选项用英文引号 ' 包起来(不是中文引号 ') - 选项之间用英文冒号 : 分隔(不是中文冒号 ) - 最后一个选项后面不要加冒号

怎么写多行指令?

一个 <//> 块里可以写多条指令,用分号隔开。也可以写成多行(更清晰):

</let hp = 100;
let mp = 50;
let 等级 = 1;/>

上下两种写法效果完全一样,推荐多行的写法,更好读。

完整故事模板

把上面的知识组合起来,就是一个完整的互动故事框架:

# 你的故事标题

/* 开场 */
开场白,介绍背景和设定。

</let 血量 = 100;
let 金币 = 0;
let 名字 = "冒险者";/>

## 第一章

你站在一个分岔路口。

</input case:
'向左走' -> goto 左路:
'向右走' -> goto 右路;
/>

</label 左路;/>
左边是一条幽暗的小径。
你找到了一个宝箱!
</set 金币 = 金币 + 50;/>
获得了 50 金币。当前金币:</apply 金币 />

</exit/>

</label 右路;/>
右边是一条宽阔的大道。
遇到了一群友善的旅人。

请输入你的名字:
</input text 名字;/>
很高兴认识你,</apply 名字 />!

</exit/>

把这个模板复制到编辑器中,点击 ▶️ 运行脚本,就能看到你的第一个互动故事了。试着修改里面的文字和选项,创造属于你自己的故事吧!