一款哄自己复习期末的小游戏。 把期末复习题做成一款可以真实提交、真实判题、逐关解锁的 C++ 练习 IDE。
这个项目不是“看答案背模板”,而是强迫自己在空白编辑器里把代码重新敲出来。你提交代码后,只有真的通过测试,下一关才会解锁。不会写时可以看提示,卡住时也能打开只读参考答案,但答案不会自动填进编辑器。
GitHub Pages 版本会把代码提交到隔离的 Judge0 沙箱中编译运行,不会在作者电脑上执行访问者代码。
- 它解决的是很具体的真实问题:编程期末复习枯燥、重复、难坚持。
- 它把刷题过程做成了明确的闯关循环:尝试、报错、修正、解锁下一关。
- 它用的是真实判题流程,不是简单关键词匹配。
- 它同时支持本地编译运行和公开网页演示。
- 它现在已经有一套可重复执行的 smoke test,会端到端验证 18 关参考解。
- 18 个循序渐进的 C++ 期末高频题目
- 空白 IDE 练习模式,更接近考试手写体验
- 本地模式下调用
g++真实编译和运行 - GitHub Pages 模式下调用 Judge0 远程沙箱
- Monaco Editor 编辑体验,支持
Ctrl/Cmd + Enter提交 - 自动保存每一关代码进度
- 支持账号注册、登录和按账号同步闯关进度
- 错误高亮,能定位编译报错行
- 针对常见新手错误给出更可读的反馈
- 识别中文全角符号、括号、引号等隐藏输入错误
- 只读参考答案,不提供一键代写
- n! 阶乘
- 等比求和
- 整数逆序
- 判断降序数
- 判断升序数
- 回文数筛选
- 123...x 求和
- aa...a 求和
- 400 以内素数
- 质因子和
- 哥德巴赫分解
- 400 内亲密对数
- 因子平方和
- 特殊四位数
- 三位对称偶数
- 数组统计
- 冒泡排序
- 递归最大公约数
环境要求:
- Node.js 20+
g++
启动本地判题服务:
npm run start然后打开:
http://localhost:4173
Windows 下也可以直接双击:
启动闯关IDE.bat
运行 smoke test:
npm run test:smoke它会检查:
- 本地服务是否能正常启动
- 账号注册、登录和服务端进度同步是否正常
GET /api/health是否返回预期元数据- 静态页面骨架是否正常提供
- 18 关内置参考解是否都能通过
/api/run
同一套 smoke test 也已经接入 GitHub Actions:./.github/workflows/ci.yml
- 打开应用,从第 1 关开始,编辑器默认是空白的。
- 自己手写 C++ 解法,而不是改 starter code。
- 提交到本地判题器或远程 Judge0 沙箱。
- 在控制台面板直接看编译错误或测试反馈。
- 继续修改,直到当前关通过并自动解锁下一关。
- 如果卡住,可以先看提示或只读参考答案,再自己重新敲一遍。
这套流程能很直观地演示项目的核心价值:不是展示静态页面,而是展示“尝试 -> 报错 -> 修正 -> 通关”的真实学习闭环。
public/
app.js 前端状态与界面逻辑
challenges.js 18 关题目定义与判题规则
remote-judge.js 基于 Judge0 的远程执行逻辑
solutions.js 用于验证的内置参考解
server.js 本地 HTTP 服务与 g++ 判题逻辑
.data/ 本地账号与进度数据,默认不提交到 Git
scripts/
smoke-test.mjs 端到端验证脚本
- HTML
- CSS
- JavaScript
- Node.js
g++- Judge0
- GitHub Actions
- GitHub Pages
- Monaco Editor
- 补充真实截图和简短 GIF 演示
- 增加每关完成耗时和重试次数的本地统计
- 增加“模拟考试模式”,在通关前隐藏提示和答案
- 失败后提供更结构化的测试数据反馈
localhost模式使用本地 Node 服务和本地g++。- GitHub Pages 模式使用 Judge0,因为静态托管环境无法安全运行编译器。
- 账号系统需要后端接口,因此在本地 Node 服务或后端部署模式下可用;GitHub Pages 纯静态模式会自动回到访客模式。
- 当前参考解刻意保持直白可读,因为目标用户是练基础的学生。
更有趣的复习