NodeJS Tic Tac Toe多人游戏

时间:2015-04-28 13:33:03

标签: javascript html node.js

我真的很心灰意冷,我无法解决这个问题,我尝试了几天,即时开发游戏(tic tac toe)它有使用nodeJS的多人游戏功能,问题不在于游戏,问题在于处理不同的房间..

我使用socket.join等,所以用户可以加入不同的房间;加入不同的游戏也是我通过网址游戏名称的板子,例如:

本地主机?游戏ID =测试

然后我解析这个名字并开始向这些用户发送电路板。问题是,当我有一个以上,游戏崩溃,房间1的董事会信息崩溃与房间2 ...我无法找到错误,我在这里粘贴代码:

create.html上 jsfiddle.net/svaae1vL/

Enter.html jsfiddle.net/6qzbpbxx/

Server.js jsfiddle.net/1q0qo8xo/

就像我之前说过的那样,问题是:

room1:player1,player2 room2:player3,player4

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

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

此外,当我在room1中点击时,它会影响room2,请帮助我坚持到几天......

2 个答案:

答案 0 :(得分:2)

我相信您的问题是您在createRoom事件中共享变量emptyBoard

boards[data.name] = emptyBoard;

因此,如果您编辑一块电路板,它也会编辑所有其他电路板。尝试将作业更改为:

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

那应该将数组克隆到另一个对象中。

修改

使用slice(0)克隆数组不会克隆数组中的对象,因此您可能需要深度克隆,例如:正如here所述。

答案 1 :(得分:0)

@Dygestor

嘿,非常感谢你,好吧,这一行:

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

没有修复它,但问题就是你说的,所以我尝试了这个:

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

它有效,非常感谢你!