diff --git a/lib/gameLogic.ts b/lib/gameLogic.ts index b8dffc5..1ffad2c 100644 --- a/lib/gameLogic.ts +++ b/lib/gameLogic.ts @@ -224,10 +224,36 @@ export function executeMove( if (!player) return gameState; if (move.pass) { + const newTurnsPassed = gameState.turnsPassed + 1; + + // Check if game is blocked (all players have passed consecutively) + if (newTurnsPassed >= gameState.players.length) { + // Game is blocked - determine winner by lowest score + let lowestScore = Infinity; + let winnerId = ''; + + gameState.players.forEach(p => { + const score = calculateScore(p.tiles); + if (score < lowestScore) { + lowestScore = score; + winnerId = p.id; + } + }); + + return { + ...gameState, + currentPlayerIndex: (gameState.currentPlayerIndex + 1) % gameState.players.length, + turnsPassed: newTurnsPassed, + isGameOver: true, + winner: winnerId, + gameMode: 'finished', + }; + } + return { ...gameState, currentPlayerIndex: (gameState.currentPlayerIndex + 1) % gameState.players.length, - turnsPassed: gameState.turnsPassed + 1, + turnsPassed: newTurnsPassed, }; } diff --git a/server.mjs b/server.mjs index 2716668..7b244d4 100644 --- a/server.mjs +++ b/server.mjs @@ -228,6 +228,25 @@ app.prepare().then(() => { if (move.pass) { gameState.currentPlayerIndex = (gameState.currentPlayerIndex + 1) % gameState.players.length; gameState.turnsPassed++; + + // Check if game is blocked (all players have passed consecutively) + if (gameState.turnsPassed >= gameState.players.length) { + // Game is blocked - determine winner by lowest score + let lowestScore = Infinity; + let winnerId = ''; + + gameState.players.forEach(p => { + const score = p.tiles.reduce((sum, tile) => sum + tile.left + tile.right, 0); + if (score < lowestScore) { + lowestScore = score; + winnerId = p.id; + } + }); + + gameState.isGameOver = true; + gameState.winner = winnerId; + gameState.gameMode = 'finished'; + } } else { const tileIndex = player.tiles.findIndex(t => t.id === move.tile.id); if (tileIndex === -1) {