Skip to content

About

哄自己学习小游戏

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

22 Commits

Folders and files

Repository files navigation

C++ Exam Quest

一款哄自己复习期末的小游戏。 把期末复习题做成一款可以真实提交、真实判题、逐关解锁的 C++ 练习 IDE。

这个项目不是“看答案背模板”,而是强迫自己在空白编辑器里把代码重新敲出来。你提交代码后,只有真的通过测试,下一关才会解锁。不会写时可以看提示,卡住时也能打开只读参考答案,但答案不会自动填进编辑器。

在线体验

GitHub Pages 版本会把代码提交到隔离的 Judge0 沙箱中编译运行,不会在作者电脑上执行访问者代码。

为什么它适合作品集项目

  • 它解决的是很具体的真实问题:编程期末复习枯燥、重复、难坚持。
  • 它把刷题过程做成了明确的闯关循环:尝试、报错、修正、解锁下一关。
  • 它用的是真实判题流程,不是简单关键词匹配。
  • 它同时支持本地编译运行和公开网页演示。
  • 它现在已经有一套可重复执行的 smoke test,会端到端验证 18 关参考解。

核心功能

  • 18 个循序渐进的 C++ 期末高频题目
  • 空白 IDE 练习模式,更接近考试手写体验
  • 本地模式下调用 g++ 真实编译和运行
  • GitHub Pages 模式下调用 Judge0 远程沙箱
  • Monaco Editor 编辑体验,支持 Ctrl/Cmd + Enter 提交
  • 自动保存每一关代码进度
  • 支持账号注册、登录和按账号同步闯关进度
  • 错误高亮,能定位编译报错行
  • 针对常见新手错误给出更可读的反馈
  • 识别中文全角符号、括号、引号等隐藏输入错误
  • 只读参考答案,不提供一键代写

关卡列表

  1. n! 阶乘
  2. 等比求和
  3. 整数逆序
  4. 判断降序数
  5. 判断升序数
  6. 回文数筛选
  7. 123...x 求和
  8. aa...a 求和
  9. 400 以内素数
  10. 质因子和
  11. 哥德巴赫分解
  12. 400 内亲密对数
  13. 因子平方和
  14. 特殊四位数
  15. 三位对称偶数
  16. 数组统计
  17. 冒泡排序
  18. 递归最大公约数

本地运行

环境要求:

  • 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. 打开应用,从第 1 关开始,编辑器默认是空白的。
  2. 自己手写 C++ 解法,而不是改 starter code。
  3. 提交到本地判题器或远程 Judge0 沙箱。
  4. 在控制台面板直接看编译错误或测试反馈。
  5. 继续修改,直到当前关通过并自动解锁下一关。
  6. 如果卡住,可以先看提示或只读参考答案,再自己重新敲一遍。

这套流程能很直观地演示项目的核心价值:不是展示静态页面,而是展示“尝试 -> 报错 -> 修正 -> 通关”的真实学习闭环。

项目结构

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 纯静态模式会自动回到访客模式。
  • 当前参考解刻意保持直白可读,因为目标用户是练基础的学生。

为什么做这个

更有趣的复习

About

哄自己学习小游戏

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages