Clone 当前仓库
出于安全考虑,全站已禁用HTTPS协议对仓库进行操作、下载仓库压缩包,请开发者按要求配置SSH密钥后使用SSH协议对仓库进行操作。
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. 游戏流程
参考代码:
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);
});
}
- 警长竞选阶段
- 夜晚阶段
- 狼人杀人
- 预言家验人
- 女巫救人/毒人
- 白天阶段
- 遗言环节
- 自由讨论
- 投票放逐
- 猎人技能(死亡时可带走一名玩家)
3. 实时通信
- 基于WebSocket的实时消息系统
- 支持游戏状态同步
- 支持实时聊天
4. 用户系统
- 用户注册/登录
- JWT身份验证
- 游戏历史记录
- 胜率统计
安装部署
1. 环境要求
- Node.js >= 12
- MySQL >= 5.7
- 现代浏览器(支持WebSocket)
2. 后端部署
cd server
npm install
# 配置数据库连接
vim db.js
# 启动服务
node server.js
3. 前端部署
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接口
游戏相关
- 警长竞选:
/game/sheriff_join
- 狼人杀人:
/game/wolf_choose
- 预言家查验:
/game/seer_look
- 女巫救/毒:
/game/witch_save
,/game/witch_kill
- 猎人技能:
/game/hunter_kill
- 投票放逐:
/game/vote
房间管理
- 加入房间:
/room/join
- 退出房间:
/room/leave
- 获取房间状态:
/room/status
注意事项
- 游戏进行中断线处理
- 角色技能使用限制
- 游戏结束条件判定
- 数据库事务处理
开发计划
- 增加更多游戏模式
- 添加语音聊天功能
- 优化游戏界面
- 添加排行榜系统
- 实现观战功能
贡献指南
欢迎提交Issue和Pull Request来帮助改进项目。
许可证
MIT License
Languages
Vue
50.9%
JavaScript
48.6%
HTML
0.5%