融合 Three.js 3D WebGL 粒子星云、SuperMemo-2 (SM-2) 艾宾浩斯遗忘曲线算法与 GitHub 风格打卡热力图的现代化背单词平台。
Note
🌐 在线体验入口 (Live Demo): https://shuoyun114.github.io/LexiVerse/
(注:GitHub Pages 静态托管线为 3D Demo 体验版,出于安全保护不开放新账号注册;在本地/局域网部署运行将解锁完整账号注册、登录及多设备局域网自动同步功能)
- 赛博绿阶梯色彩:从深色背景透明度过渡到高亮赛博绿(支持赛博极光绿与霓光魅紫蓝双重 Mode 切换)。
- 打卡连胜 (Streak):实时统计并突出显示当前连续打卡天数 (Current Streak) 和历史最高连胜天数,伴有发光火花脉冲动画。
- 动态 Tooltip:鼠标悬停任意日期格,精确显示当天打卡数、复习数和新掌握词汇数。
- WebGL 粒子球体:成百上千个英文单词散落在 3D 宇宙星云中,以颜色区分掌握状态(已掌握-赛博绿 / 复习中-霓虹紫 / 新词-冰蓝)。
- 全方位交互:支持 360 度鼠标拖拽旋转、滚轮视距缩放、点击节点聚焦单词卡片及语音发音。
- 3D 翻转记忆卡片:快捷键空格翻牌,结合例句挖空填空测试。
- 5 阶熟练度打分(1分完全遗忘 ~ 5分脱口而出),依据 SuperMemo-2 算法实时推算下一次最佳复习日期 (Next Review Date)。
- 彩带喷洒动效:当完美掌握单词时触发 Confetti 彩带喷洒效果!
- 单词从星云中徐徐降落,玩家盲打敲击键盘拼写,触发击碎特效、音效与 Combo 连击加成。
- 提供 轻松休闲、标准挑战、极限竞速 三档速度模式。
- 内置【初入词域】、【七日连胜】、【星云探索者】、【极速盲打】等多款发光质感勋章。
- 支持本地局域网无感多端同步,手机、平板与桌面端进度时刻统一。
- 全量初高中主流教材:北师大版 (BNU) 初中全套、人教版 (PEP) 初中全套、高中必修系列。
- 升学权威词库:中考、高考冲刺、考研英语一/二、四六级、雅思、程序员专业词汇与西班牙语入门库。
LexiVerse 采用模块化分层设计,确保 3D 渲染主循环与 SM-2 业务计算解耦运行:
graph TD
A[用户输入层 (UI / 交互)] --> B[应用路由与状态管理 (React 18 / Hooks)]
B --> C[3D 渲染引擎 (Three.js WebGL Particle Nebula)]
B --> D[核心计算引擎 (SM-2 Spaced Repetition Engine)]
B --> E[打卡看板与游戏模块 (365-Day Heatmap / CyberShooter)]
C --> F[Canvas WebGL Viewport]
D --> G[Local Storage / IndexedDB 本地持久化]
D --> H[局域网 Peer Sync 同步服务]
- Node.js >= 18.0.0
- npm / pnpm / yarn
# 克隆仓库
git clone https://github.com/shuoYun114/LexiVerse.git
cd LexiVerse
# 安装依赖
npm install# 启动 Vite 开发服务
npm run dev在终端输出的本地地址打开浏览器(通常为 http://localhost:3000 或 http://localhost:5173),即可直接体验 3D 赛博星云与艾宾浩斯智能背单词系统。
# 构建优化后的生产静态产物
npm run build
# 预览生产构建
npm run preview项目采用自动化测试套件对核心算法(如 SM-2 间隔重复推算、连续打卡 Streak 计算)进行验证:
# 执行单元测试
npm run test项目已配置 GitHub Pages 部署流,产物通过 dist/ 目录静态托管:
# 构建并一键部署
npm run deploy内置轻量数据接口规范,支持外部 JSON 词库批量导入:
interface WordItem {
id: string;
word: string;
phonetic?: string;
translation: string;
exampleSentence?: string;
difficulty?: number; // 1-5
repetitions: number;
interval: number; // days
easeFactor: number;
nextReviewDate: string; // ISO 8601
}本项目遵循 MIT License 开源许可。欢迎提交 Issue 与 Pull Request!