# 8人标准局狼人杀在线游戏 ## 简介 基于 Node.js、MySQL 和 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