一个基于 AI 的多人狼人杀游戏框架,采用 monorepo 架构,支持多个具有独特个性的 AI 玩家进行游戏。
- 🤖 AI 驱动: 6 个具有不同个性和策略的 AI 玩家
- 🎮 完整游戏流程: 白天讨论投票、夜晚角色技能
- 🎭 角色系统: 支持村民、狼人、预言家、女巫四种角色
- 📊 可视化界面: React + MobX 实时状态管理
- 🔍 AI 遥测: 集成 Langfuse 进行 AI 行为分析
- 🚀 高性能: 使用 Bun 运行时,无需构建步骤
- 运行时: Bun
- 前端: Vite + React + MobX + TailwindCSS
- 后端: Express + TypeScript
- AI: OpenAI SDK + 自定义个性系统
- 监控: Langfuse 遥测
- 架构: Monorepo (Bun Workspaces)
AI-Werewolf/
├── packages/
│ ├── game-master-vite/ # 游戏主控前端
│ └── player/ # AI 玩家服务器
├── shared/
│ ├── types/ # 共享类型定义
│ ├── lib/ # 共享工具库
│ └── prompts/ # AI 提示模板
├── config/ # 玩家配置文件
└── scripts/ # 启动脚本
- Node.js 18+
- Bun 1.0+
- OpenAI API Key
# 克隆仓库
git clone https://github.com/yourusername/AI-Werewolf.git
cd AI-Werewolf
# 安装依赖
bun install
# 配置环境变量
cp .env.example .env
# 编辑 .env 文件,添加你的 OpenAI API Key
# 启动所有 AI 玩家(端口 3001-3006)
bun run dev:players
# 新开终端,启动游戏主控界面(端口 3000)
bun run dev:game-master
访问 http://localhost:3000 开始游戏!
- 创建游戏: 点击"创建新游戏"按钮
- 添加玩家: 系统自动添加 6 个 AI 玩家
- 分配角色: 随机分配狼人、预言家、女巫和村民
- 游戏循环:
- 🌞 白天: 玩家讨论并投票放逐
- 🌙 夜晚: 特殊角色使用技能
- 胜利条件:
- 村民阵营: 消灭所有狼人
- 狼人阵营: 狼人数量 ≥ 村民数量
每个 AI 玩家都有独特的个性设置:
端口 | 玩家 | 策略类型 | 说话风格 | 特点 |
---|---|---|---|---|
3001 | 玩家1 | balanced | casual | 理性分析型 |
3002 | 玩家2 | aggressive | formal | 激进攻击型 |
3003 | 玩家3 | conservative | formal | 保守稳重型 |
3004 | 玩家4 | balanced | witty | 幽默风趣型 |
3005 | 玩家5 | balanced | formal | 逻辑推理型 |
3006 | 玩家6 | conservative | casual | 新手谨慎型 |
# 启动所有 AI 玩家
bun run dev:players
# 启动游戏主控
bun run dev:game-master
# 启动特定个性的玩家
bun run dev:player:aggressive
bun run dev:player:conservative
bun run dev:player:witty
# 类型检查
bun run typecheck
# 代码规范检查
bun run lint
# 运行测试
bun test
# 测试覆盖率
bun run test:coverage
每个 AI 玩家都提供状态接口:
开发模式日志保存在 logs/
目录:
player1-dev.log
- 玩家1日志player2-dev.log
- 玩家2日志- ... (player3-6)
game-master-dev.log
- 游戏主控日志
- 村民 👤: 白天投票,无特殊技能
- 狼人 🐺: 夜晚击杀,知道队友身份
- 预言家 🔮: 每晚查验一名玩家身份
- 女巫 🧪: 拥有解药和毒药各一瓶
- 准备阶段: 等待玩家加入
- 夜晚阶段: 特殊角色行动
- 白天讨论: AI 玩家自由发言
- 投票阶段: 投票放逐可疑玩家
- 游戏结束: 判定胜利条件
- 个性化提示工程
- 上下文感知决策
- 策略性投票逻辑
- 游戏结束时AI评分
- 遗言
- 狼队夜晚交流功能
- 添加守卫,猎人等角色
- 9人游戏模式
- 提升UI/UX
欢迎提交 Pull Request 或创建 Issue!