summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortomsmeding <tom.smeding@gmail.com>2018-02-19 23:15:05 +0100
committertomsmeding <tom.smeding@gmail.com>2018-02-19 23:15:05 +0100
commit11bd10fbe41971f0f0d7b1eda9c16c8c8f2f401f (patch)
tree5ceea2295104578860b99241640e47f183cc80b9
parent7afa74b85c2a5d83b8b84b65b6e37f82a1aff789 (diff)
Fix simultaneous win counting
-rwxr-xr-xcapturego_server.js21
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]));
+ }
}
});
});