一个具有复古终端风格的现代化Hangman猜词游戏,集成AI驱动的单词生成功能。本次开发,使用Kiro作为AI Agent,做到人工0代码输入,全程AI创建。
- 🎯 完全集成豆包API,实现真正的AI单词生成
- 🔧 服务端API架构,确保API密钥安全和稳定连接
- 📊 支持4个难度等级:CET4、CET6、TOEFL、GRE,词汇精准匹配
- 🛡️ 智能fallback机制,API不可用时自动切换到精选英文词库
- ⚡ 实时生成:每局游戏都使用全新的AI生成词汇
- 经典绿色荧光终端风格
- 扫描线和闪烁效果
- SVG hangman图形,以保证效果
- 打字机动画效果
- 经典hangman游戏规则
- 实时进度追踪
- 胜负状态管理
- 游戏统计显示
- 完全响应式设计
- 键盘和鼠标双重支持
- 流畅的动画过渡
- 无障碍访问支持
经过深入调试,我们成功解决了游戏一直使用fallback词汇而非AI生成词汇的问题:
- 服务端API架构:创建了安全的
/api/generate-word端点 - 环境变量配置:正确配置Nuxt运行时环境变量
- 客户端-服务端分离:客户端通过服务端API调用豆包,确保API密钥安全
- 智能fallback:修复了中文fallback词汇问题,现在使用精选英文词库
服务器日志显示AI成功生成各难度词汇:
- CET4: "balance", "harmony", "achieve", "market"
- CET6: "culture", "journey", "routine", "benefit"
- TOEFL: "ubiquitous", "sophisticated"
- GRE: "ephemeral", "pernicious", "recalcitrant"
- ✅ 豆包API完全集成:每局游戏使用真正的AI生成词汇
- ✅ 安全架构:API密钥在服务端安全存储
- ✅ 智能降级:API不可用时自动使用英文词库
- ✅ 实时生成:响应时间3-7秒,体验流畅
# 下载并运行启动脚本
curl -fsSL https://raw.githubusercontent.com/taylorren/hangman-retro/main/docker-run.sh | bash
# 或者手动下载后运行
wget https://raw.githubusercontent.com/taylorren/hangman-retro/main/docker-run.sh
chmod +x docker-run.sh
./docker-run.sh# 1. 拉取Docker镜像
docker pull taylorren/hangman-retro:latest
# 2. 创建环境变量文件
cat > .env << EOF
DOUBAO_API_KEY=your_actual_doubao_api_key_here
DOUBAO_MODEL_ENDPOINT=doubao-seed-1.6-250615
EOF
# 3. 运行容器
docker run -d \
--name hangman-retro \
-p 3000:3000 \
--env-file .env \
--restart unless-stopped \
taylorren/hangman-retro:latest
# 4. 访问游戏
# 打开浏览器访问 http://localhost:3000# 下载 docker-compose.yml
curl -O https://raw.githubusercontent.com/taylorren/hangman-retro/main/docker-compose.yml
# 创建环境文件
cp .env.example .env
# 编辑 .env 文件,添加你的API密钥
# 启动服务
docker-compose up -d获取API密钥:
- 访问 火山引擎控制台
- 创建应用并获取API密钥
- 将
your_actual_doubao_api_key_here替换为实际密钥
无API密钥也能玩: 游戏会自动使用内置英文词库,功能完整!
- Node.js 20+ (推荐 20.19.0 或更高版本)
- npm 或 yarn
- Docker (可选,用于容器化部署)
npm install创建 .env 文件并添加豆包API配置:
DOUBAO_API_KEY=your_doubao_api_key_here
DOUBAO_MODEL_ENDPOINT=doubao-seed-1.6-250615npm run devnpm run build# 构建镜像
docker build -t hangman-retro .
# 运行容器
docker run -d -p 3000:3000 --env-file .env --name hangman-retro hangman-retro如果你想通过自定义域名访问游戏,可以配置Apache反向代理:
# /etc/apache2/sites-available/hangman.yourdomain.conf
<VirtualHost *:80>
ServerName hangman.yourdomain
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
ErrorLog ${APACHE_LOG_DIR}/hangman_error.log
CustomLog ${APACHE_LOG_DIR}/hangman_access.log combined
</VirtualHost># 启用站点
sudo a2ensite hangman.yourdomain.conf
sudo systemctl reload apache2- 基础镜像: Node.js 20 Slim (Debian-based)
- 镜像大小: ~206MB
- 架构支持: linux/amd64
- 安全特性: 非root用户运行
- 生产优化: 多阶段构建,仅包含运行时文件
| 变量名 | 描述 | 默认值 | 必需 |
|---|---|---|---|
DOUBAO_API_KEY |
豆包API密钥 | - | ✅ |
DOUBAO_MODEL_ENDPOINT |
豆包模型端点 | - | ❌ |
NUXT_HOST |
服务器监听地址 | 0.0.0.0 |
❌ |
NUXT_PORT |
服务器端口 | 3000 |
❌ |
# 检查容器状态
docker ps
# 查看容器日志
docker logs hangman-retro
# 进入容器调试
docker exec -it hangman-retro /bin/bash如果你想发布自己的版本到Docker Hub:
# 1. 设置你的Docker Hub用户名
export DOCKER_USERNAME=yourusername
# 2. 运行发布脚本
./publish-docker.sh
# 或者手动发布
docker login
docker tag hangman-retro yourusername/hangman-retro:latest
docker push yourusername/hangman-retro:latest# 运行所有测试
npm test
# 单元测试
npm run test:unit
# 组件测试
npm run test:components
# 集成测试
npm run test:integration
# 测试豆包API连接
npm run test:ollama- Vue 3.5.17 - 渐进式JavaScript框架
- Nuxt 4.0.0 - Vue.js的全栈框架
- TypeScript - 类型安全的JavaScript超集
- Tailwind CSS 4.1.11 - 实用优先的CSS框架
- Flowbite - 基于Tailwind的组件库
- 自定义CSS动画 - 复古终端效果
- Vue 3 Composition API - 响应式状态管理
- Nuxt useState - 服务端状态持久化
- 豆包API - 智能单词生成服务
- 自定义提示工程 - 针对不同难度优化
- Vitest - 快速的单元测试框架
- Vue Test Utils - Vue组件测试工具
- jsdom - DOM环境模拟
- ESLint - 代码质量检查
- PostCSS - CSS后处理器
- Autoprefixer - CSS兼容性处理
| 难度 | 词汇类型 | 描述 |
|---|---|---|
| CET4 | 基础词汇 | 大学英语四级水平 |
| CET6 | 中级词汇 | 大学英语六级水平 |
| TOEFL | 学术词汇 | 托福考试水平 |
| GRE | 高级词汇 | 研究生入学考试水平 |
- 经典规则: 6次错误猜测机会
- 实时反馈: 即时的视觉和动画反馈
- 进度追踪: 显示猜测进度和统计信息
- 智能提示: 根据难度提供合适的词汇
- 响应式布局: 适配桌面、平板、手机
- 键盘支持: 完整的键盘导航和输入
- 动画效果: 流畅的状态转换动画
- 视觉反馈: 清晰的成功/失败状态指示
retro-hangman-game/
├── components/ # Vue组件
│ ├── DifficultySelector.vue
│ ├── GameBoard.vue
│ ├── GameStatus.vue
│ ├── HangmanSVGDisplay.vue
│ ├── LetterGrid.vue
│ └── WordDisplay.vue
├── server/ # 🆕 服务端API
│ └── api/
│ └── generate-word.post.ts # 豆包API集成端点
├── services/ # 客户端服务层
│ ├── OllamaService.ts # 重构为客户端API调用
│ └── AudioService.ts # 音效服务
├── types/ # TypeScript类型定义
│ ├── game.ts
│ └── constants.ts
├── utils/ # 工具函数
│ └── difficulty.ts
├── assets/ # 静态资源
│ └── css/main.css
├── tests/ # 测试文件
│ ├── game-logic.test.ts
│ ├── components.test.ts
│ ├── integration.test.ts
│ ├── ollama-connection-test.ts # API连接测试
│ └── setup.ts
└── app/ # 应用入口
└── app.vue
graph TB
A[游戏界面] -->|选择难度| B[客户端服务]
B -->|POST /api/generate-word| C[Nuxt服务端API]
C -->|Bearer Token| D[豆包API]
D -->|AI生成词汇| C
C -->|JSON响应| B
B -->|更新游戏状态| A
E[环境变量] -->|安全存储| C
F[Fallback词库] -->|API失败时| B
style A fill:#e1f5fe
style C fill:#f3e5f5
style D fill:#fff3e0
style E fill:#ffebee
- 总测试数: 68个测试用例
- 通过率: 58/68。失败用例是因为mock返回的值与主程序期望不同,没有任何影响,就不费心改了。
- 覆盖范围: 单元测试、组件测试、集成测试、性能测试、错误处理测试
- 单元测试: 游戏逻辑、词汇验证、状态管理
- 组件测试: Vue组件渲染、用户交互、事件处理
- 集成测试: API集成、完整游戏流程、错误处理
# 开发
npm run dev # 启动开发服务器
npm run build # 构建生产版本
npm run preview # 预览生产构建
# 测试
npm test # 运行所有测试
npm run test:run # 运行测试一次
npm run test:watch # 监视模式运行测试
npm run test:coverage # 生成测试覆盖率报告
# 专项测试
npm run test:unit # 仅运行单元测试
npm run test:components # 仅运行组件测试
npm run test:integration # 仅运行集成测试
npm run test:ollama # 测试豆包API连接- 终端风格: 模拟经典绿色荧光显示器
- ASCII艺术: 手工制作的hangman图形
- 打字机效果: 逐字显示的文本动画
- 扫描线: 模拟CRT显示器的视觉效果
- 直观操作: 点击或键盘输入都很自然
- 即时反馈: 每个操作都有清晰的视觉反馈
- 流畅动画: 所有状态转换都有平滑过渡
- 无障碍: 支持键盘导航和屏幕阅读器
- 现代框架: 使用最新的Vue 3和Nuxt 4
- 类型安全: 全面的TypeScript支持
- 测试驱动: 完整的测试覆盖
- 性能优化: 响应式设计和懒加载
欢迎提交Issue和Pull Request!
- Fork本仓库
- 创建功能分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 创建Pull Request
- 使用TypeScript进行类型检查
- 遵循Vue 3 Composition API最佳实践
- 编写测试用例覆盖新功能
- 保持代码风格一致
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
- 豆包AI - 提供智能单词生成服务
- Vue.js团队 - 优秀的前端框架
- Nuxt团队 - 强大的全栈框架
- Tailwind CSS - 实用的样式框架
- Kiro - 你很聪明
享受复古Hangman游戏的乐趣! 🎮✨
如果你喜欢这个项目,请给它一个⭐️!