Cattca 入门指南
欢迎来到 Cattca!这是一门为零基础用户设计的互动故事脚本语言。你不需要任何编程经验——只要会写 Markdown,就能创作自己的文字冒险游戏。
一句话理解 Cattca
Cattca 脚本 = 你写的故事正文 + 用 <//> 包裹的游戏规则。
正文部分就是普通的文字(支持 Markdown 排版),规则部分告诉电脑什么时候给玩家选项、怎么记住玩家的选择。
从一个简单故事开始
假设你想写这样一个故事片段:
你叫莱莉菥。早上六点,你醒了。你要继续睡觉,还是起床?
用 Cattca 写出来就是:
你叫莱莉菥。
早上六点,你醒了。
你要继续睡觉,还是起床?
</input case:
'继续睡觉' -> goto sleep:
'起床' -> goto wakeup;
/>
- 前三行是普通文字,玩家会直接看到
<//>里面是指令:给玩家两个按钮,选"继续睡觉"就跳到sleep段落,选"起床"就跳到wakeup段落
关键规则
- 指令必须放在
</和/>之间 - 指令和指令之间用分号
;隔开(不是换行) </和/>之外的文字就是给玩家看的
记住东西:变量
故事中经常需要"记住"一些东西:血量、分数、玩家的名字……在 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/>
把这个模板复制到编辑器中,点击 ▶️ 运行脚本,就能看到你的第一个互动故事了。试着修改里面的文字和选项,创造属于你自己的故事吧!