From 3237386e00dd1af146d725a13f469d4b045fe878 Mon Sep 17 00:00:00 2001 From: Feast Date: Tue, 13 Oct 2026 20:40:09 +0800 Subject: [PATCH] init --- index.html | 1973 +++++++++++++++++++++++++++++++++++++++++++++ 分关规划.md | 112 +++ 分关难度规划.md | 145 ++++ 开发文档-第1关.md | 363 +++++++++ 开发文档-第2关.md | 89 ++ 开发文档-第3关.md | 85 ++ 版本说明.md | 5 + 7 files changed, 2772 insertions(+) create mode 100644 index.html create mode 100644 分关规划.md create mode 100644 分关难度规划.md create mode 100644 开发文档-第1关.md create mode 100644 开发文档-第2关.md create mode 100644 开发文档-第3关.md create mode 100644 版本说明.md diff --git a/index.html b/index.html new file mode 100644 index 0000000..b89f742 --- /dev/null +++ b/index.html @@ -0,0 +1,1973 @@ + + + + + + 打字练习 + + + +
+
+

打字练习

+ 基准键到上排键 + + +
+

从单个字母练起,再慢慢连起来;上排键每练一个,就和 ASDF JKL; 乱序合打一遍。

+
+
+ + + + + + + + + + + + + diff --git a/分关规划.md b/分关规划.md new file mode 100644 index 0000000..5e19659 --- /dev/null +++ b/分关规划.md @@ -0,0 +1,112 @@ +# 打字练习 · 分关规划 + +循序渐进。卡通界面、打对/打错音效、打错不前进、Backspace 无效、键盘指法高亮。 + +通关仍按 **正确率 ≥ 门槛**(有的关另加速度)。未达标可重打,达标解锁下一关。 + +--- + +## 第 1 章 · 单个字母 + +把左手、右手每个基准键都练一遍。**每关只打 1 个字母,按 10 遍。** 屏幕上大字显示当前指法。 + +| 关卡 | 内容 | 指法 | 通关 | +|------|------|------|------| +| 1-1 | `A` × 10 | 左手小指 | ≥ 90% | +| 1-2 | `S` × 10 | 左手无名指 | ≥ 90% | +| 1-3 | `D` × 10 | 左手中指 | ≥ 90% | +| 1-4 | `F` × 10 | 左手食指 | ≥ 90% | +| 1-5 | `J` × 10 | 右手食指 | ≥ 90% | +| 1-6 | `K` × 10 | 右手中指 | ≥ 90% | +| 1-7 | `L` × 10 | 右手无名指 | ≥ 90% | +| 1-8 | `;` × 10 | 右手小指 | ≥ 90% | + +--- + +## 第 2 章 · 慢慢连起来 + +先右手(j k l 和分号),再左手同理。全部乱序,不按固定顺序。 + +| 关卡 | 内容 | 题长 | 通关 | +|------|------|------|------| +| 2-1 | `j k` 乱序 | 20 | ≥ 92% | +| 2-2 | `j k l` 乱序 | 30 | ≥ 92% | +| 2-3 | `j k l ;` 乱序 | 40 | ≥ 92% | +| 2-4 | `a s` 乱序 | 20 | ≥ 92% | +| 2-5 | `a s d` 乱序 | 30 | ≥ 92% | +| 2-6 | `a s d f` 乱序 | 40 | ≥ 92% | + +--- + +## 第 3 章 · 连右手 + +| 关卡 | 内容 | 题长 | 通关 | +|------|------|------|------| +| 3-1 | `j k` 随机 | 30 | ≥ 93% | +| 3-2 | `j k l` 随机 | 40 | ≥ 94% | +| 3-3 | `j k l ;` 随机 | 50 | ≥ 94% | +| 3-4 | `j k l ;` 随机加长 | 60 | ≥ 95% | + +--- + +## 第 4 章 · 连左手 + +| 关卡 | 内容 | 题长 | 通关 | +|------|------|------|------| +| 4-1 | `a s` 随机 | 30 | ≥ 93% | +| 4-2 | `a s d` 随机 | 40 | ≥ 94% | +| 4-3 | `a s d f` 随机 | 50 | ≥ 94% | +| 4-4 | `a s d f` 随机加长 | 60 | ≥ 95% | + +--- + +## 第 5 章 · 右手加左手 + +从已经练熟的右手出发,一次只加一个左手键:先 F,再 FD,再 FDS,最后 A。 + +| 关卡 | 内容 | 题长 | 通关 | +|------|------|------|------| +| 5-1 | 右手 `j k l ;` + `f` | 50 | ≥ 95% | +| 5-2 | 右手 + `f d` | 60 | ≥ 95% | +| 5-3 | 右手 + `f d s` | 70 | ≥ 96% | +| 5-4 | 右手 + `f d s a`(八键) | 80 | ≥ 96%,≥ 40 键/分 | + +--- + +## 第 6 章 · 上排键 + +每练一个上排键,先单独打 10 遍,再立刻和已经学过的 `A S D F J K L ;` **乱序**合打一遍。不要固定顺序。 + +| 关卡 | 内容 | 通关 | +|------|------|------| +| 6-1 | `Q` × 10 | ≥ 90% | +| 6-2 | `Q` + ASDF JKL; 乱序 | ≥ 92% | +| 6-3 | `W` × 10 | ≥ 90% | +| 6-4 | `W` + ASDF JKL; 乱序 | ≥ 92% | +| 6-5 | `E` × 10 | ≥ 90% | +| 6-6 | `E` + ASDF JKL; 乱序 | ≥ 92% | +| 6-7 | `R` × 10 | ≥ 90% | +| 6-8 | `R` + ASDF JKL; 乱序 | ≥ 92% | +| 6-9 | `T` × 10 | ≥ 90% | +| 6-10 | `T` + ASDF JKL; 乱序 | ≥ 92% | +| 6-11 | `Y` × 10 | ≥ 90% | +| 6-12 | `Y` + ASDF JKL; 乱序 | ≥ 92% | +| 6-13 | `U` × 10 | ≥ 90% | +| 6-14 | `U` + ASDF JKL; 乱序 | ≥ 92% | +| 6-15 | `I` × 10 | ≥ 90% | +| 6-16 | `I` + ASDF JKL; 乱序 | ≥ 92% | +| 6-17 | `O` × 10 | ≥ 90% | +| 6-18 | `O` + ASDF JKL; 乱序 | ≥ 92% | +| 6-19 | `P` × 10 | ≥ 90% | +| 6-20 | `P` + ASDF JKL; 乱序 | ≥ 92% | +| 6-21 | 上排十键 + 基准键乱序 | ≥ 95% | +| 6-22 | 再加空格,全部乱序 | ≥ 96%,≥ 40 键/分 | + +--- + +## 原则 + +1. 一次只加一点新东西。 +2. 正确率门槛逐步提高。 +3. 当前该打的键,始终显示对应手指。 +4. 空格用大拇指,按词插入,不连续空格。 diff --git a/分关难度规划.md b/分关难度规划.md new file mode 100644 index 0000000..f0cd313 --- /dev/null +++ b/分关难度规划.md @@ -0,0 +1,145 @@ +# 打字训练 · 分关难度规划 + +对标金山打字通的核心训练路径,采用「6 大模式 + 主线闯关」结构。 +通关条件统一为:**正确率 ≥ 门槛** 且 **速度 ≥ 门槛**。未达标可重打,达标后解锁下一关。 + +--- + +## 一、整体结构 + +| 模式 | 作用 | 闯关方式 | +|------|------|----------| +| 指法练习 | 建立正确指位 | 按键位分区逐关解锁 | +| 按键练习 | 单键、组合键熟练度 | 按键区逐关 | +| 单词练习 | 英文单词连打 | 按词长 / 词频逐关 | +| 文章练习 | 连续文本、真实场景 | 按篇幅与复杂度逐关 | +| 拼音练习 | 中文拼音输入 | 按字 → 词 → 句 → 篇逐关 | +| 速度测试 | 综合测速(不闯关) | 1 / 3 / 5 分钟自由测 | + +另设 **综合闯关(主线)**:把上述模式串成一条从入门到精通的关卡线。 + +自由练习:不走闯关,可自选模式。 + +--- + +## 二、主线闯关(8 章) + +### 第 1 章 · 基准键入门(完全新手) + +只打 `A S D F` 和 `J K L ;`,强制显示键盘指法图。 + +| 关卡 | 内容 | 时长 / 字数 | 通关条件 | +|------|------|-------------|----------| +| 1-1 | 左手基准键 ASDF | 约 40 键 | 正确率 ≥ 90% | +| 1-2 | 右手基准键 JKL; | 约 40 键 | 正确率 ≥ 90% | +| 1-3 | 左右交替(不含空格) | 约 60 键 | 正确率 ≥ 92% | +| 1-4 | 加入空格,形成「词」感 | 约 80 键 | 正确率 ≥ 92%,≥ 40 键/分 | + +### 第 2 章 · 食指扩展 + +加入 `G H R U V N`(食指上下左右)。 + +| 关卡 | 内容 | 通关条件 | +|------|------|----------| +| 2-1 | G / H(基准键左右) | 正确率 ≥ 92% | +| 2-2 | R / U(上排食指) | 正确率 ≥ 92% | +| 2-3 | V / N(下排食指) | 正确率 ≥ 92% | +| 2-4 | 基准键 + 食指综合 | 正确率 ≥ 93%,≥ 60 键/分 | + +### 第 3 章 · 中指、无名指、小指 + +按手指逐步加键,避免一次铺开整键盘。 + +| 关卡 | 内容 | 通关条件 | +|------|------|----------| +| 3-1 | 中指:E I C , | 正确率 ≥ 92% | +| 3-2 | 无名指:W O X . | 正确率 ≥ 92% | +| 3-3 | 小指:Q P Z / | 正确率 ≥ 90%(小指最难,门槛略低) | +| 3-4 | 全字母小写综合 | 正确率 ≥ 93%,≥ 80 键/分 | + +### 第 4 章 · 数字与大写 + +| 关卡 | 内容 | 通关条件 | +|------|------|----------| +| 4-1 | 数字键 1–0 | 正确率 ≥ 92% | +| 4-2 | Shift + 字母(大写) | 正确率 ≥ 92% | +| 4-3 | 常用符号:`, . ; ' -` | 正确率 ≥ 90% | +| 4-4 | 字母 + 数字 + 基础符号 | 正确率 ≥ 93%,≥ 100 键/分 | + +### 第 5 章 · 英文单词 + +从高频短词到较长单词,开始按 **WPM** 计速。 + +| 关卡 | 内容 | 通关条件 | +|------|------|----------| +| 5-1 | 3–4 字母高频词(the, and, for…) | 正确率 ≥ 95%,≥ 25 WPM | +| 5-2 | 5–6 字母常用词 | 正确率 ≥ 95%,≥ 30 WPM | +| 5-3 | 7+ 字母词 | 正确率 ≥ 94%,≥ 32 WPM | +| 5-4 | 混合词长,含大小写 | 正确率 ≥ 95%,≥ 35 WPM | + +### 第 6 章 · 英文句子 / 短文 + +| 关卡 | 内容 | 通关条件 | +|------|------|----------| +| 6-1 | 短句(标点少) | 正确率 ≥ 96%,≥ 35 WPM | +| 6-2 | 段落(逗号、句号、问号) | 正确率 ≥ 96%,≥ 40 WPM | +| 6-3 | 较长文章(200–300 词) | 正确率 ≥ 97%,≥ 45 WPM | +| 6-4 | 编程常见片段(变量名、符号) | 正确率 ≥ 95%,≥ 40 WPM | + +### 第 7 章 · 中文拼音 + +按「字 → 词 → 句 → 篇」递进。 + +| 关卡 | 内容 | 通关条件 | +|------|------|----------| +| 7-1 | 单字(高频 100 字) | 正确率 ≥ 95%,≥ 40 字/分 | +| 7-2 | 双字词 | 正确率 ≥ 95%,≥ 50 字/分 | +| 7-3 | 短句 | 正确率 ≥ 96%,≥ 55 字/分 | +| 7-4 | 短文(新闻 / 散文节选) | 正确率 ≥ 97%,≥ 60 字/分 | + +### 第 8 章 · 综合挑战(Boss) + +| 关卡 | 内容 | 通关条件 | +|------|------|----------| +| 8-1 | 中英混排 | 正确率 ≥ 97% | +| 8-2 | 限时 3 分钟冲刺 | 英文 ≥ 50 WPM 或 中文 ≥ 70 字/分 | +| 8-3 | 全键盘极限(符号 + 数字 + 大小写) | 正确率 ≥ 96%,≥ 45 WPM | +| 8-4 | 毕业考:随机抽一篇长文 | 正确率 ≥ 98%,速度达本章门槛 | + +--- + +## 三、难度曲线原则 + +1. **一次只加一类新键**,避免突然全键盘。 +2. **正确率优先于速度**:前 3 章几乎不卡速度,先养成指法。 +3. **小指、数字、Shift 单独成关**,这是大多数人的瓶颈。 +4. **中英文分轨**:第 1–6 章走英文指法,第 7 章走拼音,第 8 章合流。 +5. **失败可重打,不扣进度**;每关记录历史最好成绩。 + +--- + +## 四、每关通用功能(对标金山打字通) + +- 键盘热力图 / 指法示意图(当前应击键高亮) +- 实时速度、正确率、进度条 +- 错键标红、正确标绿 +- 关卡选择地图(未解锁置灰) +- 练习结束结算:速度、正确率、击键数、错键分布 +- 自由练习:不走闯关,自选模式 + +--- + +## 五、关卡总览 + +| 章节 | 主题 | 关卡数 | 训练重点 | +|------|------|--------|----------| +| 第 1 章 | 基准键入门 | 4 | ASDF / JKL; + 空格 | +| 第 2 章 | 食指扩展 | 4 | G H R U V N | +| 第 3 章 | 其余手指 | 4 | 中指 / 无名指 / 小指 → 全字母 | +| 第 4 章 | 数字与大写 | 4 | 数字、Shift、常用符号 | +| 第 5 章 | 英文单词 | 4 | 词长递进,开始计 WPM | +| 第 6 章 | 英文句子 / 短文 | 4 | 标点、长文、代码片段 | +| 第 7 章 | 中文拼音 | 4 | 字 → 词 → 句 → 篇 | +| 第 8 章 | 综合挑战 | 4 | 混排、限时、极限、毕业考 | + +**合计:8 章 × 4 关 = 32 关。** diff --git a/开发文档-第1关.md b/开发文档-第1关.md new file mode 100644 index 0000000..4bd2c10 --- /dev/null +++ b/开发文档-第1关.md @@ -0,0 +1,363 @@ +# 第 1 关开发文档:1-1 左手基准键 ASDF + +对应规划:`分关难度规划.md` → 第 1 章 · 基准键入门 → **1-1**。 +本文只覆盖第 1 关的实现范围,作为后续关卡的模板。第 1 关同时要搭好练习页的通用骨架,后关复用,不重做。 + +--- + +## 1. 目标 + +让完全新手在不看键盘的情况下,用正确指法打出左手四个基准键: + +| 键 | 手指 | +|----|------| +| `A` | 左手小指 | +| `S` | 左手无名指 | +| `D` | 左手中指 | +| `F` | 左手食指 | + +本关**不考速度**,只考正确率和指法习惯。 +通关条件:**正确率 ≥ 90%**(无速度门槛)。 + +--- + +## 2. 范围 + +### 2.1 本关要做 + +- 关卡选择页中,1-1 默认解锁,可进入 +- 练习页:待打文本、实时对错着色、键盘指法图、实时数据条 +- 约 40 个目标键,字符集仅 `a s d f`(小写) +- 击键判定、正确率、键/分、进度 +- 结束结算:通过 / 未通过,可重打 +- 通过后解锁 **1-2** +- 记录本关历史最好正确率(本地存储) + +### 2.2 本关不做 + +- 右手键 `j k l ;`、空格、大写、数字、符号 +- 速度门槛、限时模式 +- 中文拼音、单词、文章 +- 热力图统计(可先预留数据结构,本关不展示) +- 账号 / 云同步 + +--- + +## 3. 页面与信息架构 + +建议单页 HTML,用视图切换,不必多文件路由。 + +``` +启动 + └─ 关卡选择(第 1 章四关列表) + └─ 练习中(1-1) + └─ 结算弹层 + ├─ 再打一次 → 回到练习中(重新抽题) + └─ 返回选关 → 关卡选择 +``` + +### 3.1 关卡选择页(本关相关) + +| 元素 | 说明 | +|------|------| +| 章标题 | 第 1 章 · 基准键入门 | +| 关卡卡片 1-1 | 标题「左手基准键 ASDF」;状态:已解锁 / 已通关 | +| 关卡卡片 1-2~1-4 | 未通关 1-1 前置灰,不可点 | +| 最佳成绩 | 若打过 1-1,显示历史最高正确率 | + +### 3.2 练习页布局(自上而下) + +1. **顶栏**:关卡名「1-1 左手基准键」、返回选关 +2. **数据条**:进度 `已打/总数`、正确率、速度(键/分)、用时 +3. **文本区**:一行待打字符,当前目标键放大/下划线,已打正确为绿、错误为红 +4. **键盘区**:QWERTY 示意图,强制显示;当前目标键高亮;四指提示 +5. **提示文案**:「食指放在 F,小指放在 A,不要看键盘」 + +结算用遮罩弹层盖在练习页上,不跳新页。 + +--- + +## 4. 关卡配置 + +实现时用一份配置驱动,后关只改配置、少改逻辑。 + +```js +{ + id: "1-1", + chapter: 1, + title: "左手基准键 ASDF", + charset: ["a", "s", "d", "f"], + length: 40, + allowSpace: false, + caseSensitive: false, // 本关只产生小写;Shift+A 视为错误 + passAccuracy: 0.90, + passKpm: null, // 本关不卡速度 + unlockNext: "1-2", + showKeyboard: true, // 强制显示,不可关 + generate: "random-from-charset" +} +``` + +### 4.1 题目生成规则 + +- 从 `charset` 均匀随机抽取 `length` 个字符,连成一串,例如:`asdfafsdasfd...` +- **不要**出现空格、换行 +- 建议约束:同一字符连续不超过 3 次(避免 `aaaa` 失去指法切换训练) +- 每次进入或「再打一次」都重新生成,不固定题库 + +### 4.2 允许输入 + +| 按键 | 行为 | +|------|------| +| `a` `s` `d` `f` | 有效击键,进入对错判定 | +| 其他字母 / 数字 / 符号 | 记为一次错误击键,不前进光标(卡住当前目标,直到打对) | +| `Shift` / `CapsLock` 产生的 `A` 等 | 视为错误(本关只认小写) | +| `Backspace` | **忽略**,本关不允许改错(对标金山打字通初级指法:打错就记错,必须打对当前键才继续) | +| `Enter` `Tab` `Esc` | 忽略,不计入对错 | +| `Alt` `Meta` `Ctrl` 组合 | 忽略 | + +采用「必须打对才前进」:错了标红提示,光标停在当前目标,直到按下正确键。 +正确率分母按「总击键次数(含错键)」计算,而不是按「已完成字符数」。见第 6 节。 + +--- + +## 5. 指法与键盘 UI + +### 5.1 手指映射(本关只用左手) + +| 键 | 手指 | 建议高亮色 | +|----|------|------------| +| A | 小指 | 橙 | +| S | 无名指 | 黄 | +| D | 中指 | 绿 | +| F | 食指 | 蓝 | + +其余键绘制出来但呈禁用态(降低透明度),避免误导用户去打。 + +### 5.2 键盘交互 + +- 当前目标键:描边 + 放大/脉冲 +- 按下正确键:该键闪绿后熄灭,切到下一目标 +- 按下错误键:目标键闪红,可加轻微震动(CSS) +- 键盘图下方固定文案: + 「左手:小指 A · 无名指 S · 中指 D · 食指 F」 + +### 5.3 文本区表现 + +假设目标串为 `asdf`,用户先打对 `a` `s`,第三个该打 `d` 却打了 `f`: + +``` +[a] [s] [d] [f] + 绿 绿 当前(红闪) 灰 +``` + +- 已正确:绿色 +- 当前目标:深色底 + 下划线;若刚打错则红框 +- 未打到:灰色 +- 不把错误字符插入文本(文本始终是标准答案,只改颜色/状态) + +--- + +## 6. 判定与统计 + +从**第一次有效击键**开始计时(`a/s/d/f` 或其他会记错的可见字符)。纯功能键不开始计时。 + +### 6.1 字段 + +| 字段 | 定义 | +|------|------| +| `targetLength` | 40 | +| `cursor` | 当前待打下标,0~40;到 40 结束 | +| `correctHits` | 打对次数(每前进一格 +1,最大 40) | +| `wrongHits` | 打错次数(每次错误按键 +1,可大于 40) | +| `totalHits` | `correctHits + wrongHits` | +| `elapsedMs` | 从首次有效击键到结束(或当前)的毫秒 | + +### 6.2 公式 + +``` +正确率 accuracy = correctHits / totalHits +进度 percent = cursor / targetLength +速度 kpm = correctHits / (elapsedMs / 60000) +用时 time = elapsedMs +``` + +展示: + +- 正确率:百分数,保留 1 位小数,如 `92.5%` +- 速度:整数「键/分」,未开始时显示 `--` +- 进度:`12 / 40` + 进度条 +- 用时:`mm:ss` + +### 6.3 通关判定(结束时一次性算) + +``` +passed = accuracy >= 0.90 +``` + +本关 `passKpm` 为空,不判断速度。 +`totalHits` 为 0 时(理论上不会结束)正确率按 0。 + +### 6.4 结束时机 + +`cursor === targetLength` 立即结束,弹出结算。不再接收击键。 + +--- + +## 7. 结算 + +### 7.1 展示 + +| 项 | 说明 | +|----|------| +| 结果标题 | 「通关」或「未通关」 | +| 正确率 | 实际值,并标明门槛「≥ 90%」 | +| 速度 | 键/分(仅展示,不影响通关) | +| 用时 | mm:ss | +| 击键 | 正确 / 错误 / 总计 | +| 操作 | 「再打一次」「返回选关」 | + +通关时额外一行:「已解锁 1-2 右手基准键」。 + +### 7.2 进度写入 + +使用 `localStorage`,键名建议:`typing-progress-v1`。 + +```js +{ + unlocked: ["1-1", "1-2"], // 通关 1-1 后写入 1-2 + records: { + "1-1": { + bestAccuracy: 0.95, + bestKpm: 62, + passed: true, + lastPlayedAt: "2026-08-13T15:30:00+08:00" + } + } +} +``` + +规则: + +- 初始 `unlocked` 含 `1-1` +- 通关才把 `unlockNext` 加入 `unlocked` +- `bestAccuracy` / `bestKpm` 只升不降 +- 未通关也写入 `lastPlayedAt` 和当前成绩,但不把 `passed` 从 true 改回 false +- 重打失败不锁回 1-2 + +--- + +## 8. 状态机 + +``` +idle 进入练习页,题目已生成,等待第一击 +playing 已开始计时,接收击键 +finished 40 键打完,弹出结算,忽略击键 +``` + +转移: + +- `idle` → `playing`:第一次有效/错误可见击键 +- `playing` → `finished`:`cursor` 达到 40 +- `finished` → `idle`:点「再打一次」(新题、清零统计) +- 任意 → 选关:点返回(练习中途返回不保存通关,可选择是否写入 lastPlayedAt;本关规定:**中途退出不记成绩**) + +--- + +## 9. 技术约定 + +| 项 | 约定 | +|----|------| +| 形态 | 单文件或「HTML + CSS + JS」,先保证双击即可打开 | +| 输入 | `window` 上 `keydown`;用 `event.key` 判定字符 | +| 防干扰 | 练习中 `preventDefault` 掉会滚动/选中的键;不要用隐藏 `` 抢焦点(避免 IME) | +| 本关 IME | 不需要中文输入;若系统处于中文输入法,提示「请切换到英文」 | +| 样式 | 深色背景、大字号文本区,适合全屏练习 | +| 兼容 | 现代桌面 Chrome / Edge / Safari;本关按物理键盘设计,不做触屏键盘 | + +### 9.1 建议模块划分(同一文件内亦可) + +1. `config`:关卡配置 +2. `progress`:读写 localStorage +3. `generator`:按 charset 生成题目 +4. `engine`:状态机、击键、统计 +5. `keyboardView`:键盘高亮 +6. `textView`:文本着色 +7. `hud`:数据条 +8. `resultModal`:结算 +9. `stageSelect`:选关 + +第 1 关实现时就把 1~8 做成可复用,选关先只列第 1 章四关。 + +--- + +## 10. 文案 + +| 位置 | 文案 | +|------|------| +| 选关卡片标题 | 1-1 左手基准键 | +| 选关卡片副标 | 只打 A S D F,正确率 90% 即可通关 | +| 练习顶栏 | 第 1 关 · 左手基准键 ASDF | +| 指法提示 | 食指放 F,小指放 A。请看着屏幕,不要看键盘。 | +| 通关 | 通关!基准键已经记住了。 | +| 未通关 | 再练一次。先求正确,再求速度。 | +| 输入法提示 | 请切换到英文输入法后再开始。 | + +--- + +## 11. 验收标准 + +- [ ] 打开页面即可进入 1-1,无需登录 +- [ ] 题目长度为 40,仅含 `a s d f`,无空格 +- [ ] 同一字符连续不超过 3 次 +- [ ] 打对前进一格,打错不前进并记一次错误 +- [ ] Backspace 不影响进度与统计 +- [ ] 正确率按 `正确 / (正确+错误)` 计算,≥ 90% 判定通关 +- [ ] 无速度门槛;结算仍显示键/分 +- [ ] 键盘图始终显示,当前键高亮,非 ASDF 键呈禁用态 +- [ ] 通关后 1-2 可点;未通关 1-2 仍锁 +- [ ] 刷新页面后解锁状态仍在 +- [ ] 中途返回选关不记本局成绩 +- [ ] 「再打一次」重新抽题并清零 + +--- + +## 12. 测试用例 + +| 编号 | 操作 | 期望 | +|------|------|------| +| T1 | 40 次全对 | 正确率 100%,通关,解锁 1-2 | +| T2 | 打对 36、打错 4(错键后补对) | 总击键 44,正确率 ≈ 81.8%,未通关 | +| T3 | 打对 36、打错 4 之外再算:正确 36 / 总击键 40 | 注意:因打错不前进,40 个正确键必须打满;未通关局 `correctHits` 仍为 40,`wrongHits` > 0。例如错 5 次则正确率 = 40/45 ≈ 88.9%,未通关 | +| T4 | 正确率刚好 90%(40 对 + 约 4.44 错不可整除) | 用 40 对 + 5 错 = 88.9% 未过;40 对 + 4 错 = 90.9% 通过。门槛按 `>= 0.90` | +| T5 | 练习中按 Backspace、方向键 | 无效果 | +| T6 | 打 `g` 或其他非 charset 键 | 错误 +1,光标不动 | +| T7 | 通关后刷新 | 1-2 仍解锁 | +| T8 | 通关后再打失败 | 1-2 保持解锁 | +| T9 | 第一键前等待 | 速度显示 `--`,用时 00:00 | +| T10 | 中途点返回 | 无结算、不改 best、不解锁 | + +**正确率要点(务必实现一致):** +本关结束时 `correctHits` 恒为 40。通关只取决于错了多少次: + +``` +accuracy = 40 / (40 + wrongHits) +90% 通关 ⇒ 40 / (40 + wrongHits) >= 0.90 ⇒ wrongHits <= 4 +``` + +即:全程最多允许打错 4 次。 + +--- + +## 13. 后续关卡复用说明 + +第 1 关落地后,1-2 只需改配置: + +| 项 | 1-1 | 1-2(预告,不在本文实现) | +|----|-----|---------------------------| +| charset | a s d f | j k l ; | +| 手指 | 左手四指 | 右手四指 | +| 通关 | 正确率 ≥ 90% | 同 1-1 | +| 键盘禁用态 | 非 ASDF | 非 JKL; | + +不要为 1-2 另写一套引擎。 diff --git a/开发文档-第2关.md b/开发文档-第2关.md new file mode 100644 index 0000000..7509b49 --- /dev/null +++ b/开发文档-第2关.md @@ -0,0 +1,89 @@ +# 第 2 关开发文档:1-2 右手基准键 JKL; + +对应规划:`分关难度规划.md` → 第 1 章 · 基准键入门 → **1-2**。 +完全复用第 1 关引擎、页面、判定、音效与进度存储。**只改键位与文案。** + +细则见 `开发文档-第1关.md`,本文只写差异。 + +--- + +## 1. 与 1-1 的差异 + +| 项 | 1-1 | 1-2 | +|----|-----|-----| +| 字符集 | `a s d f` | `j k l ;` | +| 手 | 左手 | 右手 | +| 键盘启用键 | ASDF | JKL; | +| 通关后解锁 | 1-2 | 1-3 | + +其余全部相同:40 键、连续同一字符不超过 3 次、打错不前进、Backspace 无效、正确率 ≥ 90%(最多错 4 次)、不卡速度、强制显示键盘、卡通配色、打对/打错音效、`localStorage` 键名 `typing-progress-v1`。 + +--- + +## 2. 指法映射 + +与左手镜像,同色表示同一根手指类型: + +| 键 | 手指 | 颜色(与 1-1 对应) | +|----|------|---------------------| +| `J` | 右手食指 | 蓝(同 F) | +| `K` | 右手中指 | 绿(同 D) | +| `L` | 右手无名指 | 黄(同 S) | +| `;` | 右手小指 | 橙(同 A) | + +--- + +## 3. 关卡配置 + +```js +{ + id: "1-2", + chapter: 1, + title: "右手基准键 JKL;", + charset: ["j", "k", "l", ";"], + length: 40, + allowSpace: false, + caseSensitive: true, + passAccuracy: 0.90, + passKpm: null, + unlockNext: "1-3", + showKeyboard: true, + generate: "random-from-charset", + playable: true +} +``` + +`;` 使用 `event.key === ";"`。Shift 产生的 `:` 视为错误。 + +--- + +## 4. 文案 + +| 位置 | 文案 | +|------|------| +| 选关卡片标题 | 1-2 右手基准键 | +| 选关卡片副标 | 只打 J K L ;,正确率 90% 即可通关 | +| 练习顶栏 | 第 2 关 · 右手基准键 JKL; | +| 指法提示 | 食指放 J,小指放分号。请看着屏幕,不要看键盘。 | +| 键盘下方 | 右手:食指 J · 中指 K · 无名指 L · 小指 ; | +| 通关 | 通关!右手基准键已经记住了。 | +| 未通关 | 再练一次。先求正确,再求速度。 | +| 解锁提示 | 已解锁 1-3 左右交替 | + +--- + +## 5. 解锁 + +- 通关 1-1 后 1-2 可进入(已有逻辑) +- 通关 1-2 后写入 `unlocked: 1-3`;1-3 本关仍不实现玩法,仅解锁外观 +- 重打失败不锁回 + +--- + +## 6. 验收(相对 1-1 增量) + +- [ ] 题目仅含 `j k l ;`,长度 40 +- [ ] 键盘仅 JKL; 高亮可用,其余禁用 +- [ ] 通关 1-1 后可点进 1-2 +- [ ] 正确率 ≥ 90% 通关并解锁 1-3 +- [ ] 判定、音效、结算与 1-1 一致 diff --git a/开发文档-第3关.md b/开发文档-第3关.md new file mode 100644 index 0000000..00dbead --- /dev/null +++ b/开发文档-第3关.md @@ -0,0 +1,85 @@ +# 第 3 关开发文档:1-3 左右交替 + +对应规划:`分关难度规划.md` → 第 1 章 · 基准键入门 → **1-3**。 +完全复用第 1、2 关引擎、页面、判定、音效与进度存储。本文只写差异。 + +--- + +## 1. 与前两关的差异 + +| 项 | 1-1 / 1-2 | 1-3 | +|----|-----------|-----| +| 字符集 | 单手 4 键 | `a s d f j k l ;` | +| 出题 | 字符集内随机 | **左右手严格交替**,不含空格 | +| 题长 | 40 | 60 | +| 通关正确率 | ≥ 90% | ≥ 92%(最多错 5 次) | +| 速度门槛 | 无 | 无 | +| 通关后解锁 | 下一关 | 1-4 | + +判定、打错不前进、Backspace 无效、键盘图、卡通配色、音效均不变。 + +--- + +## 2. 出题规则 + +- 左手池:`a s d f`;右手池:`j k l ;` +- 序列为「左、右、左、右…」或「右、左、右、左…」(开局随机选一侧) +- 不要空格 +- 避免隔一个键重复同一字符(减少 `ajaj`) + +--- + +## 3. 关卡配置 + +```js +{ + id: "1-3", + chapter: 1, + title: "左右交替", + charset: ["a", "s", "d", "f", "j", "k", "l", ";"], + length: 60, + allowSpace: false, + caseSensitive: true, + passAccuracy: 0.92, + passKpm: null, + unlockNext: "1-4", + showKeyboard: true, + generate: "alternate-hands", + playable: true +} +``` + +正确率公式仍为 `60 / (60 + wrongHits) >= 0.92` ⇒ `wrongHits <= 5`。 + +--- + +## 4. 文案 + +| 位置 | 文案 | +|------|------| +| 选关卡片标题 | 1-3 左右交替 | +| 选关卡片副标 | 基准键左右手交替,正确率 92% 即可通关 | +| 练习顶栏 | 第 3 关 · 左右交替 | +| 指法提示 | 双手放在 ASDF 和 JKL; 上,左右交替打,不要看键盘。 | +| 键盘下方 | 左手 ASDF · 右手 JKL; | +| 通关 | 通关!双手基准键可以配合了。 | +| 未通关 | 再练一次。先求正确,再求速度。 | +| 解锁提示 | 已解锁 1-4 加入空格 | + +--- + +## 5. 解锁 + +- 通关 1-2 后可进入 1-3 +- 通关 1-3 后解锁 1-4(1-4 本关仍不实现玩法) +- 重打失败不锁回 + +--- + +## 6. 验收 + +- [ ] 题目长度 60,仅含 `a s d f j k l ;`,无空格 +- [ ] 相邻两键分属左右手 +- [ ] 键盘八个基准键全部启用 +- [ ] 正确率 ≥ 92% 通关并解锁 1-4 +- [ ] 结算门槛文案显示 ≥ 92% diff --git a/版本说明.md b/版本说明.md new file mode 100644 index 0000000..52345d9 --- /dev/null +++ b/版本说明.md @@ -0,0 +1,5 @@ +# 打字练习 + +根目录 `index.html` 就是练习页,不再分版本。 + +当前内容:第 1–5 章练基准键(ASDF / JKL;),第 6 章练上排键 QWERTYUIOP,先单独打,再加空格,再连上基准键。