2015-04-28 7 views
5

Ich bin wirklich downhearted, kann ich nicht lösen, ich versuche es seit Tagen, im Entwickeln eines Spiels (Tic Tac Toe) hat Multiplayer-Funktion mit NodeJS, auch das Problem ist nicht das Spiel, das Problem behandelt unterschiedliche Räume ...NodeJS Tic Tac Toe Multiplayer Spiel

Im using socket.join usw., also Benutzer kann unterschiedlichen Raum beitreten; beitreten verschiedene Spiele auch Boards i durch url Spielnamen übergeben, Beispiel:

localhost GameID = test

Dann analysiere ich diesen Namen und starte Board für diese Benutzer zu senden. Auch das Problem ist, wenn ich mehr als eine mehr habe, das Spiel zusammenbricht, auch die Bordinformationen von Raum 1 kollabieren mit Raum 2 ... ich kann den Fehler nicht finden, ich füge den Code hier ein:

Create.html jsfiddle.net/svaae1vL/

Enter.html jsfiddle.net/6qzbpbxx/

Server.js jsfiddle.net/1q0qo8xo/

Wie ich vor sayd, das Problem ist:

room1: Spieler1, player2 room2: Auch Spieler3, Spieler4

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

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

, wenn ich in room1 klicken, wirkt room2, bitte helfen Sie im seit Tagen stecken ...

Antwort

2

Ich glaube, Ihr Problem ist, dass Sie teilen Variable emptyBoard in createRoom Veranstaltung:

boards[data.name] = emptyBoard; 

Deshalb, wenn Sie ein Brett bearbeiten, es auch alle anderen bearbeiten wird. Versuchen Sie, die Zuweisung zu ändern:

Das sollte das Array in ein anderes Objekt klonen.

Edit:

Klonen das Array mit slice(0) nicht Objekte im Array klonen, so vielleicht das, was Sie brauchen, ist tief Klonen, z.B. wie beschrieben here.

0

@Dygestor

Hey danke Ihnen so sehr, na ja, diese Zeile:

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

Haben sie nicht festgelegt, aber das Problem war, was Sie sayd, so habe ich versucht, dies:

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

Und es hat funktioniert, vielen Dank!

+1

Wie bereits erwähnt, ist die Verwendung von 'slice' nicht ausreichend, da Ihr Array andere Arrays enthält und slice kein tiefes Klonen durchführt. Wie auch immer, ich bin froh, dass es geklappt hat. – Dygestor

Verwandte Themen