2015-04-28 17 views
5

sono davvero scoraggiato, non posso risolvere questo, sto provando da giorni, sto sviluppando un gioco (tic tac toe) ha funzionalità multiplayer usando nodeJS, anche il problema non è il gioco, il problema sta gestendo stanze diverse ...Gioco multiplayer NodeJS Tic Tac Toe

Im using socket.join ecc, in modo che l'utente possa accedere a un'altra stanza; per unire diversi giochi anche tavole mi passano attraverso url nome del gioco, esempio:?

localhost GameID = test

Poi ho parse questo nome e iniziare a inviare bordo per questi utenti. Anche il problema è che quando ne ho più di uno, il gioco crolla, anche le informazioni sulla board dalla stanza 1 collassano con la room 2 ... non riesco a trovare l'errore, incollo il codice qui:

Create.html jsfiddle.net/svaae1vL/

Enter.html jsfiddle.net/6qzbpbxx/

Server.js jsfiddle.net/1q0qo8xo/

Come ho sayd prima, il problema è:

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] 

anche quando scatto in room1, colpisce room2, si prega di aiuto im bloccati dal giorni ...

risposta

2

Credo che il vostro problema è che si condivide variabile emptyBoard nell'evento createRoom:

boards[data.name] = emptyBoard; 

di conseguenza, se si modifica una scheda, che verrà modificare tutti gli altri troppo. Provare a cambiare il compito di:

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

Questo dovrebbe clonare la matrice in un altro oggetto.

Edit:

Clonazione l'array con slice(0) non clonare gli oggetti nella matrice, quindi forse quello che vi serve è la clonazione profonda, per esempio come descritto here.

0

@Dygestor

Hey vi ringrazio tanto, bene, questa linea:

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

non hanno fissato, ma il problema era quello che sayd, così ho provato questo:

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

e ha funzionato, grazie mille!

+1

Come ho detto nella modifica, l'uso di "slice" non sarà sufficiente, poiché l'array contiene altri array e slice non esegue la clonazione profonda. Ad ogni modo, sono contento che abbia funzionato. – Dygestor

Problemi correlati