第 10 课 · Découverte

文字冒险

玩家敲两个词,游戏作答。split、case/when,再加一点状态——AI 之前的 AI。

~11 min7 个关卡
▶ 视频🧩 练习📄 备忘单

42 秒 · 含中文字幕 · 8.4 Mo

你会学会的 7 件事

第 10 课:文字冒险

Regarde la leçon (42 s) : avant ChatGPT, une IA s'appelait `split`. Un joueur tape des mots, un jeu répond — et tout tient dans trois idées.

玩家的句子

Écris `mots(commande)` : découpe la phrase du joueur en mots — `"prendre epee"` → `["prendre", "epee"]`. Un espace, deux mots : l'IA d'avant, c'était `split`.

动词说了算

Écris `verbe(commande)` : le PREMIER mot — c'est lui qui décide. `"prendre epee"` → `"prendre"` · `" ouvrir porte"` → `"ouvrir"` (les espaces en trop ne comptent pas).

名词,或者没有

Écris `nom(commande)` : le DEUXIÈME mot, ou `nil` s'il n'y en a pas. `"prendre epee"` → `"epee"` · `"ouvrir grande porte"` → `"grande"` · `"marcher"` → `nil`. Une commande sans objet n'a pas de nom.

识别:两个精确的词

Écris `reconnait?(commande, verbe, nom_attendu)` : true seulement si la commande fait EXACTEMENT ces deux mots, dans l'ordre. `"epee prendre"` n'est pas `"prendre epee"` — le parser d'avant ChatGPT : deux mots, point final.

守卫的词表

Écris `reponds(sujet)` : le garde parle par répliques prêtes — `"cle"` → `"Il désigne la serrure, sans un mot."` · `"bonjour"` → `"— Tu parles ? Ici, on répond par des gestes."` · tout autre sujet → `"— …"` (le silence : je ne comprends pas).

第 10 课:OK

Sans aide : `reponse(etat, commande)` — l'ÉTAT + la commande exacte choisissent la réplique. `"prendre epee"` en `:debut` → `"L'épée est à toi."` · la même commande en `:fin` → `"Déjà prise."` · toute autre commande → `"— …"`.

分享这一课

← 全部课程

📄 备忘单

打印出来贴显示器上,就当是你自己的主意

📄 备忘单 — 文字冒险(ChatGPT 之前的解析器)

ChatGPT 之前,有个 AI 叫 split。玩家在黑暗里敲两个词,游戏回答——而它什么也没懂。

历史,三行

年份 发生了什么 带来了什么
1976 Colossal Cave Adventure 用词句写成的世界
1977 Zork,四个 MIT 学生 动词 + 名词 解析器
2020 年代 大模型们 ……于是所有人忘了解析器存在过

玩家敲两个词,游戏作答。它从来什么也没懂——而这正是它管用的原因。

配方:三个想法

"prendre epee".split          # => ["prendre", "epee"]   句子,切开
.split.first                  # => "prendre"             动词
.split[1]                     # => "epee"                名词(或 nil)

识别:两个精确的词,按顺序

def reconnait?(commande, verbe, nom)
  commande.split == [verbe, nom]
end
reconnait?("prendre epee", "prendre", "epee")   # => true
reconnait?("epee prendre", "prendre", "epee")   # => false —— 顺序算数

不猜意图,不做模糊匹配:比较字符串——并且敢说不。 连续说二十次「不」,才是这个解析器。

对话:带必备 else 的 case/when

case sujet
when "cle"     then "Il désigne la serrure, sans un mot."
when "bonjour" then "— Tu parles ? Ici, on répond par des gestes."
else "— …"                 # 沉默 = 「我没听懂」
end

每个认识的话题都有它的台词;else 是必备的——没有它,未知话题得到 nil, 你的角色会说到一半「死机」。

状态:同一条命令,两句回答

case [etat, commande]                    # 比较【这一对】
when [:debut, "prendre epee"] then "L'épée est à toi."
when [:fin,   "prendre epee"] then "Déjà prise."
else "— …"
end

游戏的记忆不过就是一个变量(:debut、:fin),它决定哪句台词为真。 大模型在这里即兴;你的 case/when 记得住。

以后别再说

  • 「让玩家开口得用大模型」 → 一个 case/when 和一个 else
  • 「解析器得什么都懂」 → 两个精确的词;剩下的是写作功底
  • 「AI 就是模型」 → 1977 年,它是 split。

SlopCourse Microduck — 从 slop 到干净的代码。