这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
12.2 条件文本与变体
同一条台词记录在不同状态下渲染出不同变体,这是条件文本的全部含义。本节枚举两个条件节点的整个定义域:d_tc_2 两分支两条文本;d_lt_2 声明了 line_when 却没写 line_else,101 个状态枚举下来只得到一条文本——结构分流了,文本没分流。变体退化因此成了一个可数的缺口,修法是在规格里补声明,而不是改台词。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
同一条台词记录在不同状态下渲染出不同变体,这是条件文本的全部含义。本节枚举两个条件节点的整个定义域:d_tc_2 两分支两条文本;d_lt_2 声明了 line_when 却没写 line_else,101 个状态枚举下来只得到一条文本——结构分流了,文本没分流。变体退化因此成了一个可数的缺口,修法是在规格里补声明,而不是改台词。
台词里出现的角色名与地点名,在规格里其实是一次变量查找。本节给出文本模板的唯一文法(占位、转义与未知占位回落),由规格三段拼出 24 个绑定的命名实体表,并渲染全部 48 条 line 与 115 条选项文本统计占位出现次数:行内占位 0 处、字段级占位 48 处、可模板化点 33 处。只做文本的结构,不评价文本质量。
把 48 个对话节点当成一张有向图,环、不可达节点、死路三类缺陷就都成了可判定的性质。本节用 DFS 三色标记找环、BFS 从起点算可达性与层号,实测三类缺陷均为 0:115 条选项去重后只有 56 条唯一跳转,5 个无出口节点全是结局,与 na_00 的 BFS 状态空间穷举口径互证。
同一节点在不同状态下渲染出不同台词,靠的是 line_when 与 line_else 两个字段。本节把渲染规则写成四分支表,用 S 层脚本枚举全部 50 个渲染分支:48 个节点里只有 2 个带 line_when,其中 d_lt_2 声明了条件却没给 line_else,属规格层面的欠声明,回落到 line。
对话节点是字段化的记录:节点层八个字段、选项层五个字段,其中 goto 是选项的独立字段而非效果算子。本节给出两张字段表,用 S 层脚本校验 115 条跳转全部命中已声明节点并输出节点度数表,再用 P 层测试断言未知选项被拒绝、推进是纯函数。
把好感度沿采样路径画成曲线后,「形状」也成了一个可分类的量:单调上升 / 先升后平 / 单调下降 / 波动 / 全程不变,五类互斥。S 层统计 2000 条路径的形状占比并用纯 xml.etree 出图,B 层把初始值整体上下扰动 ±10,观察门限跨越率的相变——−10 档新增 9 条死门,全程只软告警不硬失败。
阈值门就是条件里的 ['aff', 名, '>=', 整数]:它可能长在选项的 when、节点的 line_when 或结局的 when 上。S 层把全规格 15 条门限抽成一张表,在 20000 条采样路径上给出每条门限的跨越率、最高到达与缺口,基线 0 条死门;P 层断言门限未达时选项不可选、恰好达到时可选的边界行为。
好感度只有两个动作:从 characters[].affinity.init 起一个整数,之后每次写入都走 add 再夹回 [0,100]。S 层静态清点出 4 个变量共 66 次写入、8 种增量,并点出声明了却从不推进的 lin 与 hai;P 层用 300 条采样路径断言值域恒定,并以「把某个 add 放大到百万级仍被夹回」的负例证明 clamp 不是冗余算子。
本套的核心主张:台词文本不是规格的输入端,而是规格的一种渲染产物。同一条 dialogue 记录(line 加 line_when 加 line_else)在不同状态下渲染出不同台词。本节给出四分支渲染规则、用 d_tc_2 做最小演示、反向断言文本不进状态,并写死边界——只做文本的结构,不评价文本质量。
一份散文大纲要变成可执行的规格,中间隔着一层「骨架」:meta 头部加九段内容字段。本节给出散文语句到字段的逐句映射表,列出 world、characters、beats、scene_graph、dialogue、conditions、state、endings、metrics 九段各自承载什么,并用一份 S 层脚本按实际键序逐段打印规模摘要。
叙事可以被拆成四个最小构成:世界(派系、地点、设定、规则)、角色(目标、恐惧、秘密、弧光)、事件(幕、节拍、场景、对话节点)、选择(选项与跳转)。本节用《雾港夜航》的 story_spec.json 把四者逐项清点:4 个派系与 14 个地点、6 个角色、16 个节拍与 48 个对话节点、115 个选项,并跑通一份 S 层清点脚本。
《叙事策划与叙事工艺》卷一《叙事结构与可执行规格》目录:16 章 48 节,把一个故事写成可执行规格 story_spec.json,让同一份规格被 S 层穷举、P 层确定性内核与 B 层参数扰动三处消费,产出逐位一致的状态摘要。本页给出七处分工说明、六档可运行性口径、《雾港夜航》规格总览与全书 16 章 48 节完整清单。
把散落在子模块里的版本号收回父 POM:用 dependencyManagement 与 Jackson BOM 统一版本,用 runtime、test 作用域收紧依赖,再用 Enforcer 的 dependencyConvergence 抓出 Javalin 与 Jedis 带来的真实冲突并收敛。
按包梳理 java.base 与常用 JDK 模块:java.lang、java.util、java.io、java.nio.file、java.time、java.net.http、java.util.concurrent、java.util.regex 等各自负责什么、关键类有哪些、什么时候该用,并给出按任务选包的速查表。
点赞与收藏看似只是改一个布尔值,真正难的是本地先行之后如何让服务端裁决:绝对计数与增量事件冲突、列表与详情各存一份状态、连点与取消产生乱序响应。本节给出一个带序号与意图层的 TypeScript 状态存储,用假时钟复现乱序响应,并完整复盘一次计数越点越少的线上问题。
把卷一的单模块 library 拆成 domain、persistence、web、app、integration-tests 五个模块:先按变化频率和依赖方向划边界,再写出可编译的父 POM、子模块 POM 与最小骨架,最后用 Maven reactor 和依赖树验证拆分结果。
把《Java 编程入门》涉及的语法压缩成一页可查的速查表:基本类型、变量、运算符、控制流、方法、类与接口、record/enum/sealed、泛型、集合、Stream、异常、NIO、java.time、正则,以及常用的 javac/java/mvn 命令,每项都配最小示例。
以 arch-lab 订单系统为例,把日订单量、峰值系数与下单事务的请求放大倍数换算成峰值 QPS 和并发数;实现 Little's Law 计算器与 24 小时峰值系数校验,附表驱动测试、本机微基准和一组区分目标值、示例值与实测值的容量结论,并说明 P99 并发为何是安全包络。
实现一个支持顺序、并行和重试预留的延迟预算分配器,用 context.WithDeadline 把剩余预算传给下游,并用真实测试证明超时不会被重试放大、预留不会被并发叠加,最后给出 arch-lab 下单链路的预算表、降级优先级与退出条件,附五次真实运行输出。
用一个单锁计数与 64 分片锁的可比基准,真实运行 go test -bench -benchmem -cpuprofile -mutexprofile 并用 go tool pprof -top 读取输出,说明如何从 profile 区分锁竞争、分配和 I/O 等待,最后给出 arch-lab 订单服务的最小排查顺序。