Socket.io和多维数组

Socket.io and multi dimensional arrays?

本文关键字:数组 io Socket      更新时间:2023-09-26

我目前正在玩一个简单的游戏,用户首先连接并输入用户名,然后将其存储起来。

所以问题是我有一个多维数组。但是,当第二个玩家连接时,它怎么会知道呢?我需要创建其中两个吗?如果是这样,它怎么知道该往哪里推?

由于我需要找到长度,所以我可以看到有两个用户。

    var socketStorage = {};
// ===============================================
// GAME LOGIC
// ===============================================
    socketStorage[socket.id] = {};
    socketStorage[socket.id] = {
        username : "username",     
        socket : socket,      
        currQuestion : {   
            answered : false,
            answer : false 
        },
        allQuestionsAnswers : [] 
    }; 
    socket.on("setusername", function(msg){
      socketStorage[socket.id].username = msg.username;
      console.log(socketStorage[socket.id].username);
    });

您的示例中没有多维数组。你也没有在游戏中解释——是每个人都在同一时间一起玩,还是有不同的游戏可以各自包含自己的玩家,彼此隔离?

这里有一个处理此问题的示例方法:我已经有一段时间没有使用套接字了,所以我正在使用您的代码和我对如何处理它的粗略记忆——根据需要更正任何错误。

var games = []
var socketStorage = {};
// ===============================================
// GAME LOGIC
// ===============================================
// socketStorage[socket.id] = {}; // <- this line is unnecessary.
socketStorage[socket.id] = {
    username : "username",     
    socket : socket,      
    currQuestion : {   
        answered : false,
        answer : false 
    },
    allQuestionsAnswers : [] 
}; 
socket.on("setusername", function(msg){
  socketStorage[socket.id].username = msg.username;
  console.log(socketStorage[socket.id].username);
});
socket.on("newgame", function(msg){
  newGameId = games.length;
  games.push([]);
  games[gameId].push(socketStorage[socket.id]);
  socket.emit("newgamecreated", { gameId: newGameId });
});
socket.on("joingame", function(msg){
  var gameId = msg.gameNumber;
  games[gameId].push(socketStorage[socket.id]);
});
socket.on("getgames", function(msg){
  gamesToUsers = {};
  games.forEach(function(game, index) {
    gamesToUsers[index] = game.map(function(socket) {
      return socket.username
    });
  });
  socket.emit("currentgames", gamesToUsers);
});

这是不完整的,而且非常基本,可能有几个错误,但应该让你足够了解如何进行这项工作的概念。每当有人在游戏中做某事时,你只想使用一个循环将新信息socket.emit发送给同一游戏中的每个人。所以,

socket.on("somethinghappenedingame", function(msg){
  game = msg.gameNumber;
  update = msg.update;
  games[game].forEach(function(socketObj){
    socketObj.socket.emit("gameUpdate", update);
  });
});

希望能有所帮助。