2016-07-03 15 views
0

私は現在、ユーザーが最初に接続してユーザー名を入力してから離れて保存される単純なゲームを作成しています。Socket.ioと多次元配列?

私は1つの多次元配列を持っています。しかし、セカンドプレーヤーが接続するときは、どのようにそれを知ることができますか?私はそれらの2つを作成する必要がありますか?そしてもしそうなら、どこにそれを押し込むべきかをどのように知っていますか?

私はそこに2人のユーザーがいることがわかるように.lengthを見つける必要があります。

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); 
    }); 

答えて

1

例には多次元配列はありません。あなたはまた、ゲームで説明していない - 誰もが同時に一緒に遊ぶか、お互いに隔離された自分の選手を含むことができる別のゲームがありますか?

私はしばらくソケットを使用していないので、あなたのコードとそれがどのように処理されたかの大雑把な記憶を使用しています。必要に応じて間違いを修正してください。

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のループに渡したいだけです。 so、

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

+0

成功してユーザー名を入力したプレーヤーの数を取得することはできますか?私がそれを得ることができるなら、私は残りの論理を実行することができます。新しいゲームが始まる前に何人の人が接続しているのかを確認する必要があるので、 –

+0

このコードを再利用するには、全員を1つのゲームに追加するだけです。または、範囲外のカウンタを増やすだけです。または、ゲームの配列を長さにマップし、それを減らすだけです。 'games.map(game => game.length).reduce((cumulative、gameLen)=> gameLen + cumulative)'などです。 –

+0

可能であれば、カウンターの例を教えていただけますか?この種のデータを利用するのは非常に新しい –