把计算机专业和它要用的数学,做成一款一次一小课的像素风学习游戏。
先猜、再看、再做;难的机制自己动手“当一回”;做过的题按记忆规律回来复习。
下载安卓 App · 在线玩(网页版) · 背后的技能树 · 玩起来是什么样 · 从源码运行
A pixel-art learning game for a computer-science degree and the math behind it: bite-sized lessons (guess, read, do), hands-on simulators where you play the scheduler or the page-replacement algorithm, spaced repetition (FSRS), and a pointer to the textbook section behind every chapter. Built on cs-math-skill-tree. Android app and offline web page, in Chinese.
- 一次一小课:每课几分钟。先猜一猜(不计分),再看讲解卡,再做练习;答完马上知道对错和为什么,答错不扣任何东西。
- 自己动手“当一回”:你来当调度器,决定两个线程谁先跑,亲手做出竞态和死锁;你来当页面置换算法,每次缺页时点要换出的页;Python 代码一步一步执行给你看。课里遇到过的实验都收进“实验室”,随时再玩。
- 按记忆规律复习:做过的题由 FSRS 排期,快忘的时候回来,跨技能混在一起复习。
- 一整棵技能树:183 个技能、242 条“要先学”。每个技能写明学完能做什么、要先学什么和为什么,每章指向教材的哪一节,附大学课程证据。
- 远征:选一个目标,路线由技能树自动排出。现在能玩的是“我的远征:操作系统”,从“程序是什么”一路走到操作系统,5 站 124 课;和推荐远征“算法”,从第一个证明走到网络流和字符串匹配,4 站 129 课。另外七条推荐远征(网络安全、人工智能、DevOps、网站、企业应用、手机应用、嵌入式)的课正在按标准重写,暂时显示“开发中”。
- 像素风,有声音:像素字体和界面、14 张像素背景、8-bit 音效、25 首背景音乐(4 种风格可选);两位导师鲸鱼娘姐妹会陪你学习。
- 不用注册:在线网页版需要联网打开;安卓 App、Windows 安装版装好后,电脑版 ZIP 解压后,都能离线游玩。进度存在本机,可以导出和导入。
- 安卓 App:在 发布页 下载
cs-math-skill-game-<版本>.apk(标着“计算机大学习”),第一次安装时允许“安装未知应用”。以后 App 每天自己检查一次有没有新版本(“我的”页最下面也能手动检查),覆盖安装进度不丢。 - Windows 安装版:在发布页下载
cs-math-skill-game-<版本>-windows-x64-setup.exe,双击安装(只装给当前用户,不用管理员权限),开始菜单里打开“计算机大学习”,不用联网。新版本要重新下载安装,进度保留。 - 电脑版 ZIP:在发布页下载
cs-math-skill-game-<版本>-web.zip,解压后双击里面的index.html,用浏览器玩,不用联网。 - 网页版:在线打开,需要网络连接。进度存在浏览器里,可以导出和导入。
| 技能 | 183 个,242 条必须前置(没点亮不能学下一个) |
| 能玩的远征 | 我的远征:操作系统:程序设计基础 → C/C++ → 数据结构 → 计算机组成原理 → 操作系统;推荐远征“算法”:证明方法与离散结构 → 程序设计基础 → 数据结构 → 算法分析与设计 |
| 互动课 | 13 个技能,411 课。共 412 道“先猜”、1674 张讲解卡、2017 道即时判题的练习、157 道结业挑战题(第一次答对 ≥ 80% 才点亮) |
| 交互组件 | 课里用到 12 种:位与补码、栈和队列、哈希表、图(BFS / DFS、拓扑排序、Dijkstra、最大流)、CPU 调度、分页、竞态与死锁、页面置换、Python 单步执行、函数图像(极限、割线、泰勒、黎曼和)、2×2 矩阵变换、梯度下降。抽样、k-means、单神经元和小型神经网络的组件已经做好,等人工智能的课重写后再用上 |
| 其余 170 个技能 | “开发中”:章节教材、前后置、综合练习和参考答案都能看,供自学,暂时不能点亮 |
| 推荐远征 | 8 条(网站、企业应用、手机应用、嵌入式、DevOps、AI、网络安全、算法),选法见 docs/recommended-routes.md。“算法”已开放。其余七条在 2.0.0 开放过,2.0.1 撤回重写:那批课每课只够看两三分钟,达不到本项目自己的验收标准(抽查见 reports/quality-audit-2026-11-08.md) |
这个项目最费人的是写课。按本项目的标准(docs/content-authoring.md),一个技能要先对照教材列出逐节覆盖表,再写二三十课,每个数值、输出和报错都要用 Python 或 gcc 实际跑一遍核对,最后从零基础的角度通读一遍。比如 C.2.2 系统编程与并发同步:28 课,148 处实测核对。还有 34 个技能等着重写,另外 136 个技能连互动课都还没有。
如果你学过其中某门课,愿意帮忙写课、审课(找错、找没讲清楚的地方),或者只是试玩后告诉我们哪里看不懂,都非常欢迎:在 GitHub 上开一个 issue,说说你想做哪个技能。正在重写的分支是公开的,可以先看看写到哪了。
课里的数值、输出和报错由 Python、gcc 或相应的教学模型核对。每道交互题的标准答案由判题代码自动验证。逐项明细和核对方法见 docs/development.md。
需要 Node.js 和 Python。构建脚本从同级目录的 cs-math-skill-tree 读取技能数据,所以两个仓库要放在一起:
git clone https://github.com/zeroa234/cs-math-skill-tree.git
git clone https://github.com/zeroa234/cs-math-skill-game.git
cd cs-math-skill-game
npm install
npm run build # 生成 output/web/,双击 index.html 就能玩
npm test # 单元测试;端到端、无障碍、手机宽度等见 docs/development.md打包安卓 App:node scripts/android/build-apk.mjs,产物在 output/apk/。工具、签名密钥、发新版本见 docs/android.md;版本号只在 package.json 里改一处。
| 文档 | 内容 |
|---|---|
| docs/design.md | 为什么这样设计,每条依据来自哪里 |
| docs/architecture.md | 数据模型、组件接口、核心 API、界面地址;怎么加路线、组件、内容包 |
| docs/content-authoring.md | 互动课怎么写:写给零基础的标准、知识覆盖面标准 |
| docs/development.md | 内容明细、界面一览、目录、测试、内容是怎么来的、和原技能树相比改了什么、自写的部分 |
| docs/android.md | 安卓 App:打包、签名、发新版本、自动检查更新、和网页版的差别 |
| docs/recommended-routes.md | 八条推荐远征怎么选的 |
| docs/promo-video-v2.md | 宣传片方案(制作中):纯音乐 PV 和广告向两个版本 |
| reports/ | 启发式评估和手机版复查、逐节覆盖表、KTH 课程先修交叉核对、调研 |
- 其余 170 个技能可自学,进度不计入点亮。
- 改版只经过一名评估者的启发式评估和自动审计,还没有真人试玩。还没改的问题见 reports/hci/phone-review.md(比如地图初始缩放下文字太小)。
- 进度只存在本机(浏览器或 App)里;换设备要导出、导入。
- 交互组件为教学做了简化:调度器按整数时间单位,分页只有一级页表,线程模型只有赋值、锁和信号量,页面置换只有 FIFO、LRU 和最优三种(时钟算法只在课里讲)。
| 组件 | 许可 | 用途 |
|---|---|---|
| Preact 10.29.8 | MIT | 界面 |
| ts-fsrs 6.0.0 | MIT | 间隔复习排程(FSRS-7) |
| @panzoom/panzoom 4.6.2 | MIT | 地图平移缩放 |
| KaTeX 0.18.11 | MIT | 公式 |
| marked 18.1.3 + marked-katex-extension 5.1.13 | MIT | Markdown |
| canvas-confetti 1.9.4 | ISC | 三星彩带 |
| ZzFX 1.4.0 | MIT | 8-bit 音效,播放时合成,没有音频文件 |
| OpenGameArt 上的音乐:Juhani Junkala(SubspaceAudio)、RandomMind、HoliznaCC0 | CC0 | 背景音乐 25 首(assets/music/README.md);用浏览器自带的 <audio> 播放 |
| Fusion Pixel Font 12px 简中(比例版 + 等宽版,2026.10.25) | OFL-1.1 | 全部文字的像素字体,代码用等宽版(assets/fonts/,许可证同目录) |
| pixelarticons 2.4.2 | MIT | 像素图标(src/game/ui/icons.jsx) |
| Capacitor 8.5.3(core、cli、android)+ app 8.1.2、filesystem 8.1.5、share 8.0.3 | MIT | 安卓 App 外壳、返回键、App 里导出存档;图标用 @capacitor/assets 4.0.0 切图 |
| esbuild、js-yaml、ajv、playwright-core | MIT / MIT / MIT / Apache-2.0 | 构建、内容格式校验、测试(开发依赖) |
哪些是自己写的、为什么没用现成库:docs/development.md“自写的部分”。
本项目(代码、课程内容、文档、像素背景、图标和两位导师的素材)采用 CC BY-NC 4.0(知识共享 署名-非商业性使用 4.0):可以分享和改编,但要署名,并且不能用于商业目的。使用导师素材时还要署名角色设计者(见下面的署名)。第三方部分保留各自的许可证:npm 依赖见上面的组件表,像素字体是 OFL-1.1,背景音乐是 CC0。
- 鲸鱼娘(鲸鱼姐姐、鲸鱼妹妹):角色设计作者 ZipZipPipe,许可 CC BY-NC 4.0。本游戏做了这些改动:蓝发姐姐的立绘去掉了背景;黑发妹妹是在原设计上衍生的黑色女仆版(同一画风的立绘和三视图);两人的像素小人是照设定(发色、鲸鳍耳、尾巴、女仆装)自己建的方块 3D 小人,眼睛放大了一些,长裙改成了短裙。素材在
assets/cast/(来源和处理见其 README)。游戏里“我的 → 角色来源”也写着这条署名。









