2015-04-28 91 views
5

我真的心灰意冷,我不能解決這個問題,我嘗試它,因爲天,即時通訊開發遊戲(井字),它有多人遊戲使用的NodeJS,也是這個問題是不是遊戲,問題是處理不同的房間......的NodeJS井字多人遊戲

進出口使用socket.join等,因此用戶可以加入不同的房間;加入不同的遊戲也板我通過URL遊戲名稱,例如:

本地主機與遊戲ID =測試

然後我分析這個名字並開始發送板給這些用戶。還有問題是,當我有更多的一個,遊戲崩潰,也從板房信息1崩潰房間2 ...我無法找到錯誤,我粘貼代碼在這裏:

Create.html jsfiddle.net/svaae1vL/

Enter.html jsfiddle.net/6qzbpbxx/

Server.js jsfiddle.net/1q0qo8xo/

就像我之前sayd,問題是:

房間1:PLAYER1,player2 房間2:player3,player4

room1: 
[x,o,x] 
[0, 0, 0] 
[x,x,x] 

room2: 
[x,o,x] 
[0, 0, 0] 
[x,x,x] 

而且當我在房間1點擊,它會影響房間2,請大家幫忙IM卡,因爲天...

回答

2

我相信你的問題是,您在createRoom事件共享可變emptyBoard

boards[data.name] = emptyBoard; 

因此,如果您編輯一個板,它會修改所有其他人了。試着改變分配:

boards[data.name] = emptyBoard.slice(0); 

這應該克隆陣列到另一個對象。

編輯:

克隆與slice(0)數組不會克隆對象數組中,所以也許你需要的是深刻的克隆,例如如here所述。

0

@Dygestor

嘿謝謝你了,那麼,這一行:

板[data.name] = emptyBoard.slice(0);

還沒有固定它,但問題是你sayd什麼,所以我想這:

// Initalize board. 
    boards[data.name] = [ 
       ['', '', ''], 
       ['', '', ''], 
       ['', '', ''] 
      ]; 

和它的工作,非常感謝你!

+1

正如我在編輯中提到,使用「片」是不夠的,因爲你的數組包含其他數組和切片不進行深度克隆。無論如何,我很高興它解決了。 – Dygestor