确保后端服务器正在运行:
cd tractor-game-simulator/server
npm start服务器应该显示:
🚀 拖拉机纸牌游戏服务器已启动
📡 端口: 5001
🌐 客户端URL: http://localhost:3000
在新的终端窗口中:
cd tractor-game-simulator/client
npm run dev前端将运行在 http://localhost:3000
- 打开浏览器访问
http://localhost:3000 - 点击"创建房间"按钮
- 填写以下信息:
- 房间名称:例如"测试房间"
- 你的昵称:例如"玩家1"
- 底牌数量:8(默认)
- 发牌间隔:500毫秒(默认)
- 点击"创建"
- 应该看到房间等待界面,显示房间ID和配置
由于当前版本还没有实现房间列表和加入房间UI,需要使用以下方法测试多人游戏:
方法1:使用浏览器的隐私/无痕模式
- 在同一台电脑上打开3个隐私/无痕浏览器窗口
- 每个窗口访问
http://localhost:3000 - 每个窗口创建一个新房间(目前只能这样测试单人流程)
方法2:使用浏览器控制台手动加入
- 打开浏览器开发者工具(F12)
- 在Console中执行:
// 获取房间ID(从第一个客户端复制)
const roomId = "房间ID粘贴在这里";
// 发送加入房间请求
window.socketService = await import('./src/services/socket');
socketService.default.socket.emit('join_room', {
roomId: roomId,
playerName: '玩家2'
});方法3:使用不同的浏览器或设备
- Chrome:
http://localhost:3000 - Firefox:
http://localhost:3000 - Safari:
http://localhost:3000 - 另一台电脑:
http://<服务器IP>:3000
- 确认所有玩家都显示在玩家列表中
- 确认房主标识正确
- 房主点击"开始游戏"按钮
- 确认系统自动发牌
- 观察手牌逐渐增加
- 测试"展示选中的牌"功能:
- 点击手牌选择
- 点击"展示选中的牌"
- 其他玩家应该看到通知消息
- 房主点击"指定埋底玩家(结束摸牌)"
- 在弹窗中选择一个玩家
- 点击"确认"
- 埋底玩家应该看到提示
- 埋底玩家选择8张牌(或配置的底牌数量)
- 点击"确认埋底"
- 系统自动进入出牌阶段
- 房主点击"设置首发玩家"
- 在弹窗中选择首发玩家
- 点击"确认"
- 轮到的玩家可以出牌:
- 选择要出的牌(点击手牌)
- 点击"出牌"按钮
- 或者点击"跳过"按钮
- 观察出牌模式:
- 有序出牌:按顺序轮流出牌
- 自由抢先:任何人都可以出牌
- 继续出牌直到所有玩家手牌打完
- 游戏结束后自动显示底牌
- 所有玩家点击"确认"按钮
- 所有人确认后进入结束阶段
- 房主可以:
- 调整分数:选择玩家和新分数
- 调整等级:选择玩家和新等级
- 点击"重新开始"
- 重新开始后返回等待阶段
- 房间创建成功
- 玩家列表正确显示
- 房主标识显示
- 手牌正确显示
- 卡牌样式正确(花色、点数)
- 选中卡牌有高亮效果
- 出牌区域显示正确
- 当前回合玩家高亮显示
- 创建房间
- 加入房间(多个玩家)
- 开始游戏
- 自动发牌
- 展示手牌
- 指定埋底玩家
- 埋底操作
- 设置首发玩家
- 出牌操作
- 跳过回合
- 回合切换(有序模式)
- 自由抢先(自由模式)
- 展示底牌
- 确认底牌
- 调整分数
- 调整等级
- 重新开始游戏
- 玩家加入时所有客户端更新
- 游戏开始时所有客户端切换界面
- 手牌发送到正确的玩家
- 出牌后所有客户端看到
- 回合切换后所有客户端更新
- 分数/等级调整后所有客户端更新
- 非房主无法开始游戏
- 非房主无法指定埋底玩家
- 非房主无法设置首发玩家
- 非当前玩家无法出牌(有序模式)
- 埋底牌数不正确时提示错误
- 非房主无法调整分数/等级
- 玩家断线时游戏终止
当前版本的限制:
- 没有加入房间UI(需要手动通过console加入)
- 没有房间列表
- 没有牌型验证(可以出任意牌)
- 没有胜负判定逻辑
- 手牌排序是自动的,不支持手动拖拽排序
后端服务器会输出详细的日志,包括:
- 玩家连接/断开
- 房间创建/销毁
- 游戏状态变化
- 错误信息
打开浏览器开发者工具(F12)查看:
- Socket连接状态
- 收到的事件
- 房间状态更新
- 错误消息
在开发者工具的Network标签中:
- 筛选"WS"(WebSocket)
- 查看Socket.IO消息
- 确认事件正确发送和接收
# 检查端口占用
lsof -i :5001
# 如果被占用,杀死进程或更改端口- 确认后端服务器在运行
- 检查浏览器控制台错误
- 确认URL正确(http://localhost:3000)
- 检查CORS设置
- 检查浏览器控制台是否有CSS错误
- 确认组件正确导入
- 检查卡牌数据格式是否正确
- 检查room_updated事件是否正确接收
- 查看后端日志确认事件已发送
- 确认所有客户端都在同一个Socket.IO房间