diff options
-rwxr-xr-x | capturego_server.js | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/capturego_server.js b/capturego_server.js index b2b9585..ee851c4 100755 --- a/capturego_server.js +++ b/capturego_server.js @@ -47,9 +47,10 @@ function playerLeavesGame(player,game){ else game.players=newp; } -// Returns winning player (0 or 1) or -1 if none yet +// Returns winning player (0 or 1), or -1 if none yet, or 2 if both function gameBoardFinished(game){ const B=game.board,S=game.size; + const win=[false,false]; for(let i=0;i<S*S;i++){ if(B[i]==0)continue; const flags=new Array(S*S).fill(false); @@ -63,8 +64,11 @@ function gameBoardFinished(game){ if(x<S-1&&!flags[at+1]){if(B[at+1]==B[i])queue.push(at+1); else if(B[at+1]==0){nb0=true; break;}} if(y<S-1&&!flags[at+S]){if(B[at+S]==B[i])queue.push(at+S); else if(B[at+S]==0){nb0=true; break;}} } - if(!nb0)return 1-B[i]==1?1:0; + if(!nb0)win[1-B[i]==1?1:0]=true; } + if(win[0]&&win[1])return 2; + if(win[0])return 0; + if(win[1])return 1; return -1; } @@ -162,15 +166,16 @@ io.on("connection",(socket)=>{ return; } g.board[idx]=[1,-1][g.onturn]; - const win=gameBoardFinished(g) - if(win!=-1){ - for(const p of g.players){ - p.socket.emit("game_win",safeGame(g),safePlayer(g.players[win])); - } - } else { + const win=gameBoardFinished(g); + if(win==2)win=g.onturn; + if(win==-1){ g.onturn=1-g.onturn; g.players[g.onturn].socket.emit("game_turn",safeGame(g)); g.players[1-g.onturn].socket.emit("game_other_turn",safeGame(g)); + } else { + for(const p of g.players){ + p.socket.emit("game_win",safeGame(g),safePlayer(g.players[win])); + } } }); }); |