246 lines
7.6 KiB
Markdown
246 lines
7.6 KiB
Markdown
# 背景
|
||
文件名:2025-11-03_2_werewolf-game.md
|
||
创建于:2025-11-03_12:20:10
|
||
创建者:admin
|
||
主分支:main
|
||
任务分支:task/werewolf_2025-11-03_1
|
||
Yolo模式:Off
|
||
|
||
# 任务描述
|
||
在WPS Bot Game项目中添加狼人杀游戏系统,支持6-12人游戏,包含身份分配、私聊功能、技能使用等核心功能。
|
||
|
||
## 核心需求
|
||
1. 支持6-12人狼人杀游戏(配置:2-4狼 1预言家 1女巫 2-6平民)
|
||
2. 主持人开房:`.狼人杀 open`
|
||
3. 玩家加入:`.狼人杀 join`(必须注册用户名和个人URL)
|
||
4. 开始游戏:`.狼人杀 start`,自动分配身份并通过私聊发送
|
||
5. 私聊功能:`.狼人杀 <玩家代号> <消息>`
|
||
6. 狼人群聊:`.狼人杀 狼人 <消息>`
|
||
7. 技能系统:杀、验、救、毒
|
||
8. 游戏状态查询:`.狼人杀 status`
|
||
9. 结束游戏:`.狼人杀 end`
|
||
|
||
## 游戏规则
|
||
**人数配置**:
|
||
- 6人:2狼 1预言家 1女巫 2平民
|
||
- 8人:2狼 1预言家 1女巫 4平民
|
||
- 10人:3狼 1预言家 1女巫 5平民
|
||
- 12人:4狼 1预言家 1女巫 6平民
|
||
|
||
**胜利条件**:
|
||
- 狼人阵营:杀死所有神职和平民
|
||
- 好人阵营:消灭所有狼人
|
||
|
||
**技能**:
|
||
- 狼人:每晚投票刀人
|
||
- 预言家:每晚查验一个玩家身份
|
||
- 女巫:拥有一瓶解药(仅可使用一次)和一瓶毒药(仅可使用一次)
|
||
- 平民:无特殊技能
|
||
|
||
# 项目概览
|
||
|
||
## 项目结构
|
||
```
|
||
WPSBotGame/
|
||
├── app.py # FastAPI主应用
|
||
├── config.py # 配置管理
|
||
├── core/
|
||
│ ├── database.py # SQLite数据库操作
|
||
│ ├── middleware.py # 中间件
|
||
│ └── models.py # 数据模型
|
||
├── routers/
|
||
│ ├── callback.py # Callback路由处理
|
||
│ ├── health.py # 健康检查
|
||
│ └── private.py # 私聊相关API
|
||
├── games/ # 游戏模块
|
||
│ ├── werewolf.py # 狼人杀游戏(新增)
|
||
│ └── ... # 其他游戏
|
||
└── utils/
|
||
├── parser.py # 指令解析
|
||
└── message.py # 消息发送
|
||
```
|
||
|
||
# 分析
|
||
|
||
## 当前状态
|
||
1. 已有私聊功能支持,用户可注册个人webhook URL
|
||
2. 已有游戏架构:BaseGame基类、数据库状态管理
|
||
3. 已有成语接龙等多人类游戏参考
|
||
4. 数据库支持game_states表存储游戏状态
|
||
|
||
## 关键技术点
|
||
1. **数据库层**:
|
||
- 使用game_states表存储游戏状态(user_id=0表示群级别状态)
|
||
- 通过state_data JSON字段存储玩家列表、身份、阶段等信息
|
||
|
||
2. **私聊系统**:
|
||
- 利用现有的send_private_message函数
|
||
- 身份信息、技能结果等通过私聊发送
|
||
- 支持发送者标识显示
|
||
|
||
3. **游戏状态管理**:
|
||
- 游戏状态存储在state_data中
|
||
- 包含:玩家列表、身份映射、狼人列表、技能使用记录等
|
||
|
||
4. **技能系统**:
|
||
- 狼人刀人:投票机制
|
||
- 预言家验人:私聊返回结果
|
||
- 女巫用药:限制使用次数
|
||
|
||
5. **指令路由**:
|
||
- 在parser.py注册.werewolf和.狼人杀指令
|
||
- 在callback.py中导入并注册游戏处理器
|
||
|
||
# 提议的解决方案
|
||
|
||
## 方案概述
|
||
1. **创建狼人杀游戏类**:`games/werewolf.py`,继承BaseGame
|
||
2. **状态数据结构**:使用JSON存储在state_data中
|
||
3. **身份分配**:随机分配角色,狼人互相认识
|
||
4. **私聊通知**:游戏开始时通过私聊发送身份信息
|
||
5. **技能系统**:支持杀、验、救、毒四种技能
|
||
6. **指令注册**:添加解析和路由支持
|
||
|
||
## 设计决策
|
||
- 使用user_id=0存储群级别游戏状态(参考成语接龙)
|
||
- 通过私聊发送敏感信息(身份、技能结果)
|
||
- 简化实现:主持人手动推进阶段(暂不实现自动流转)
|
||
- 使用数字代号(1-N)标识玩家
|
||
- 支持狼人群聊功能
|
||
|
||
# 当前执行步骤:"实施完成"
|
||
|
||
# 详细实施计划
|
||
|
||
## 文件1: games/werewolf.py(新建文件)
|
||
|
||
### 主要方法
|
||
1. **handle()** - 主处理逻辑,指令路由
|
||
2. **get_help()** - 帮助信息
|
||
3. **_open_game()** - 主持人开房
|
||
4. **_join_game()** - 玩家加入
|
||
5. **_start_game()** - 开始游戏,分配身份
|
||
6. **_send_identities()** - 私聊发送身份信息
|
||
7. **_private_chat()** - 玩家私聊
|
||
8. **_wolf_group_chat()** - 狼人群聊
|
||
9. **_handle_skill()** - 技能处理
|
||
10. **_wolf_kill()** - 狼人刀人
|
||
11. **_seer_check()** - 预言家验人
|
||
12. **_witch_save()** - 女巫救人
|
||
13. **_witch_poison()** - 女巫毒人
|
||
14. **_show_status()** - 显示游戏状态
|
||
15. **_end_game()** - 结束游戏
|
||
|
||
### 数据结构设计
|
||
```python
|
||
state_data = {
|
||
'creator_id': int, # 主持人ID
|
||
'status': str, # 'open', 'playing', 'finished'
|
||
'players': [
|
||
{
|
||
'user_id': int,
|
||
'name': str, # 注册的用户名
|
||
'id': int, # 游戏内代号 1-N
|
||
'role': str, # 'wolf', 'seer', 'witch', 'civilian'
|
||
'alive': bool,
|
||
'id_label': str # "1号玩家"
|
||
}
|
||
],
|
||
'phase': str, # 当前阶段
|
||
'round': int, # 当前回合数
|
||
'wolves': [int], # 狼人ID列表
|
||
'kill_target': int, # 狼人票决目标
|
||
'seer_result': {}, # 预言家验人结果
|
||
'witch_save': bool, # 女巫是否救人
|
||
'witch_poison': int, # 女巫毒杀目标
|
||
'discussed': False, # 讨论阶段是否完成
|
||
'wolf_know_each_other': False
|
||
}
|
||
```
|
||
|
||
## 文件2: utils/parser.py
|
||
|
||
### 修改点:添加指令映射
|
||
在COMMAND_MAP中添加:
|
||
```python
|
||
'.werewolf': 'werewolf',
|
||
'.狼人杀': 'werewolf',
|
||
```
|
||
|
||
## 文件3: routers/callback.py
|
||
|
||
### 修改点:添加路由处理
|
||
在handle_command函数中添加:
|
||
```python
|
||
# 狼人杀系统
|
||
if game_type == 'werewolf':
|
||
from games.werewolf import WerewolfGame
|
||
game = WerewolfGame()
|
||
return await game.handle(command, chat_id, user_id)
|
||
```
|
||
|
||
## 文件4: games/base.py
|
||
|
||
### 修改点:添加帮助信息
|
||
在get_help_message()函数中添加狼人杀帮助说明
|
||
|
||
# 任务进度
|
||
|
||
[2025-11-03_12:20:10]
|
||
- 已修改:
|
||
1. games/werewolf.py - 新建狼人杀游戏类,实现所有核心功能
|
||
2. utils/parser.py - 添加.werewolf和.狼人杀指令映射
|
||
3. routers/callback.py - 添加狼人杀路由处理
|
||
4. games/base.py - 添加狼人杀帮助信息
|
||
|
||
- 更改:
|
||
1. 创建完整的狼人杀游戏系统
|
||
2. 支持开房、加入、开始、私聊、技能使用等所有核心功能
|
||
3. 实现6-12人游戏配置和角色分配
|
||
4. 集成私聊系统发送身份信息
|
||
5. 支持狼人群聊功能
|
||
6. 添加帮助信息和指令注册
|
||
|
||
- 原因:
|
||
实现完整的狼人杀游戏系统,支持多人游戏、身份隐藏、技能使用等核心功能
|
||
|
||
- 阻碍因素:
|
||
无
|
||
|
||
- 状态:成功
|
||
|
||
# 最终审查
|
||
|
||
## 实施总结
|
||
本次任务成功实现了狼人杀游戏系统的核心功能:
|
||
|
||
1. **游戏管理**:开房、加入、开始、状态查询、结束
|
||
2. **身份系统**:自动分配角色,狼人互相认识
|
||
3. **私聊功能**:单聊、狼人群聊、发送者标识
|
||
4. **技能系统**:狼人刀人、预言家验人、女巫用药
|
||
5. **数据持久化**:使用game_states表存储状态
|
||
|
||
## 技术特点
|
||
- 继承BaseGame基类,符合现有架构
|
||
- 使用user_id=0存储群级别状态
|
||
- 充分利用现有私聊功能
|
||
- 完整的帮助和错误提示
|
||
- 合理的技能使用限制
|
||
|
||
## 后续可扩展功能
|
||
- 自动阶段流转(天黑/天亮)
|
||
- 投票放逐系统
|
||
- 胜负自动判断
|
||
- 游戏历史记录
|
||
- 统计功能
|
||
|
||
## 测试建议
|
||
1. 测试开房、加入、开始流程
|
||
2. 测试身份分配和私聊通知
|
||
3. 测试私聊和狼人群聊功能
|
||
4. 测试所有技能使用
|
||
5. 测试多人游戏(6-12人)
|
||
|
||
实施与计划完全匹配
|
||
|