2015-04-28 21 views
5

im naprawdę przygnębiony, nie mogę tego rozwiązać, próbuję go od wielu dni, zajmuję się tworzeniem gry (tic tac toe) ma funkcję multiplayer przy użyciu nodeJS, również problem nie jest grą, problem obsługuje różne pokoje ...NodeJS Tic Tac Toe multiplayer Gra

Im przy użyciu socket.join itp., więc użytkownik może dołączyć do innego pokoju; dołączyć do różnych gier również deski mijam poprzez url nazwy gry, przykład:

localhost GameID = test

potem analizować tę nazwę i rozpocząć wysyłanie deska do tych użytkowników. Problem polega również na tym, że gdy mam więcej niż jeden więcej, gra się zawala, również informacja z pokoju 1 zwija się z pokoju 2 ... Nie mogę znaleźć błędu, wklejam tutaj kod:

Create.html jsfiddle.net/svaae1vL/

Enter.html jsfiddle.net/6qzbpbxx/

Server.js jsfiddle.net/1q0qo8xo/

jakbym sayd wcześniej, problem jest:

room1: Gracz1, player2 room2: player3, player4

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

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

również po kliknięciu w room1, wpływa room2, pomóż im zatrzymany od czasów ...

Odpowiedz

2

Wierzę, że problem jest uzywasz zmiennej emptyBoard w przypadku createRoom:

boards[data.name] = emptyBoard; 

Dlatego też, jeśli edytować jedną płytę, to będzie edytować wszystkie inne też. Spróbuj zmienić przypisanie na:

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

To powinno sklonować tablicę do innego obiektu.

Edit:

Klonowanie tablica z slice(0) nie będzie klonować obiekty w tablicy, więc być może to, co potrzebne jest głęboko klonowanie, np jak opisano here.

0

@Dygestor

Hej bardzo dziękuję, dobrze, ten wiersz:

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

nie został naprawiony, ale problemem było to, czego sayd, więc próbowałem to:

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

I to zadziałało, dziękuję bardzo!

+1

Jak już wspomniałem w edycji, użycie "plasterka" nie będzie wystarczające, ponieważ twoja tablica zawiera inne tablice, a plaster nie wykonuje głębokiego klonowania. W każdym razie, cieszę się, że to się udało. – Dygestor