190 lines
4.2 KiB
Markdown
190 lines
4.2 KiB
Markdown
# 8人标准局狼人杀在线游戏
|
||
|
||
## 简介
|
||
|
||
基于 Node.js、MySQL 和 Vue.js 开发的在线狼人杀游戏系统。支持8人标准局,包含预言家、女巫、猎人等角色,实现了完整的游戏流程和实时通信。
|
||
|
||
### 游戏截图
|
||
|
||

|
||

|
||

|
||

|
||

|
||

|
||
|
||
## 技术栈
|
||
|
||
### 后端
|
||
- 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
|