我正在使用Socket.io和Node.js,我希望将用户配对并将它们发送到新房间。
当用户连接时,在io.on('connection')
内我确定它们与等待在数组中配对的用户的兼容性。
如果已加入的用户与等待用户兼容,我想将它们移动到新房间。
这是我目前的做法。注意:[1029387,1983934,9243802]
是一组用户ID。
var pendingPlayers = {
"spelling": {
"level1":[1029387,1983934,9243802],
"level2":[]
}
}
io.on('connection', function(socket) {
// check compatibility
// move current player and other queued player to new room
});
我唯一的想法就是从服务器到客户端socket.emit('room', 'new room name');
,让排队的播放器将此ID发送回服务器,然后使用:
io.on('connection', function(socket) {
socket.on('room', function(room) {
socket.join(room);
});
});
然而,将房间名称发送到客户端,然后将其发送回服务器似乎非常牵强。我希望有一种更简单的方法。
感谢您的建议。
答案 0 :(得分:1)
根据你的评论
如果在pendingPlayers对象中已经没有玩家 各个级别,加入游戏的用户被添加到 pendingPlayers对象。
不是转移到对象,而是只为此级别的玩家创建一个新房间。现在当新玩家根据你的评论来时
然后,下一个请求加入相应级别的玩家将会 与来自阵列的.push()编辑的玩家ID配对 对应那个级别。
让下一位玩家加入上述房间。
答案 1 :(得分:1)
也许你需要像战舰游戏那样的逻辑。它被用于临时的“候诊室”。我在这里找到了: https://github.com/inf123/NodeBattleship/blob/master/server.js
io.on('connection', function (socket) {
//firstly add player to room until opponent aren't come
socket.join('waiting room');
joinWaitingPlayers();
});
function joinWaitingPlayers () {
var clients = [];
for (var id in io.sockets.adapter.rooms['waiting room']) {
clients.push(io.sockets.adapter.nsp.connected[id]);
}
if (clients.length >= 2) {
//if we have a couple, then start the game
var game = new Game();
// live "waiting room"
clients[0].leave('waiting room');
clients[1].leave('waiting room');
// and then join both to another room
clients[0].join('game' + game.id);
clients[1].join('game' + game.id);
}
}