werewolf_nodejs/README.md
2025-02-01 13:09:28 +08:00

190 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 8人标准局狼人杀在线游戏
## 简介
基于 Node.js 和 Vue.js 开发的在线狼人杀游戏系统。支持8人标准局包含预言家、女巫、猎人等角色实现了完整的游戏流程和实时通信。
### 游戏截图
![图1](https://neusite.oss-cn-beijing.aliyuncs.com/gitsrc/werewolf/image-20250109035406019.png)
![图2](https://neusite.oss-cn-beijing.aliyuncs.com/gitsrc/werewolf/image-20250109035921100.png)
![图3](https://neusite.oss-cn-beijing.aliyuncs.com/gitsrc/werewolf/image-20250109035929758.png)
![图4](https://neusite.oss-cn-beijing.aliyuncs.com/gitsrc/werewolf/image-20250109043028056.png)
![图5](https://neusite.oss-cn-beijing.aliyuncs.com/gitsrc/werewolf/image-20250109043155425.png)
![图6](https://neusite.oss-cn-beijing.aliyuncs.com/gitsrc/werewolf/image-20250109044324484.png)
## 技术栈
### 后端
- Node.js + Express
- WebSocket
- MySQL
- JWT认证
### 前端
- Vue.js
- WebSocket客户端
- CSS Grid布局
## 功能特点
### 1. 游戏规则
- 8人标准局
- 角色配置:
- 狼人 × 3
- 预言家 × 1
- 女巫 × 1
- 猎人 × 1
- 平民 × 2
### 2. 游戏流程
参考代码:
```js
function startGame(room) {
if (room.status !== 'locked') {
console.warn('房间未锁定,无法开始游戏');
return;
}
// 初始化 gameData
gameData.isGameStarted = true;
gameData.createTime = new Date();
gameData.chats = [];
gameData.rolesMap = {};
gameData.sheriffCandidates = [];
gameData.sheriffVotes = {};
gameData.isSheriffElected = false;
gameData.dayCount = 1;
gameData.isNight = false;
gameData.wolfVotes = {};
gameData.seerChoice = null;
gameData.witchSaveAvailable = true;
gameData.witchKillAvailable = true;
gameData.witchSaveTarget = null;
gameData.witchKillTarget = null;
gameData.hunterKillTarget = null;
gameData.dayVotes = {};
gameData.reSheriffVoteNeeded = false;
gameData.reSheriffCandidates = [];
// 1. 分配角色
assignRoles(room);
// 2. 广播 5秒 准备时间后进入警长竞选
broadcastMessage('系统', {
type: 'game_start',
message: '游戏开始5秒后进入警长竞选...',
});
broadcastCountdown(5, '警长竞选准备', () => {
// === 新增让前端有一丝缓冲3秒再进下一个环节 ===
setTimeout(() => {
// 进入警长竞选
enterSheriffElection(room);
}, 3000);
});
}
```
1. 警长竞选阶段
2. 夜晚阶段
- 狼人杀人
- 预言家验人
- 女巫救人/毒人
3. 白天阶段
- 遗言环节
- 自由讨论
- 投票放逐
4. 猎人技能(死亡时可带走一名玩家)
### 3. 实时通信
- 基于WebSocket的实时消息系统
- 支持游戏状态同步
- 支持实时聊天
### 4. 用户系统
- 用户注册/登录
- JWT身份验证
- 游戏历史记录
- 胜率统计
## 安装部署
### 1. 环境要求
- Node.js >= 12
- MySQL >= 5.7
- 现代浏览器支持WebSocket
### 2. 后端部署
```bash
cd server
npm install
# 配置数据库连接
vim db.js
# 启动服务
node server.js
```
### 3. 前端部署
```bash
cd front
npm install
npm run serve # 开发环境
npm run build # 生产环境
```
## 项目结构
### 后端核心文件
- `server.js`: 主服务器入口
- `game.js`: 游戏核心逻辑
- `websocket.js`: WebSocket服务
- `room.js`: 房间状态管理
- `auth.js`: 用户认证
- `db.js`: 数据库连接
### 前端核心组件
- `GameBoard.vue`: 游戏主界面
- `WaitingRoom.vue`: 等待大厅
- `App.vue`: 应用入口
## API接口
### 游戏相关
1. 警长竞选: `/game/sheriff_join`
2. 狼人杀人: `/game/wolf_choose`
3. 预言家查验: `/game/seer_look`
4. 女巫救/毒: `/game/witch_save`, `/game/witch_kill`
5. 猎人技能: `/game/hunter_kill`
6. 投票放逐: `/game/vote`
### 房间管理
1. 加入房间: `/room/join`
2. 退出房间: `/room/leave`
3. 获取房间状态: `/room/status`
## 注意事项
1. 游戏进行中断线处理
2. 角色技能使用限制
3. 游戏结束条件判定
4. 数据库事务处理
## 开发计划
- [ ] 增加更多游戏模式
- [ ] 添加语音聊天功能
- [ ] 优化游戏界面
- [ ] 添加排行榜系统
- [ ] 实现观战功能
## 贡献指南
欢迎提交Issue和Pull Request来帮助改进项目。
## 许可证
MIT License