@@ -224,10 +224,36 @@ export function executeMove(
|
|||||||
if (!player) return gameState;
|
if (!player) return gameState;
|
||||||
|
|
||||||
if (move.pass) {
|
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 {
|
return {
|
||||||
...gameState,
|
...gameState,
|
||||||
currentPlayerIndex: (gameState.currentPlayerIndex + 1) % gameState.players.length,
|
currentPlayerIndex: (gameState.currentPlayerIndex + 1) % gameState.players.length,
|
||||||
turnsPassed: gameState.turnsPassed + 1,
|
turnsPassed: newTurnsPassed,
|
||||||
|
isGameOver: true,
|
||||||
|
winner: winnerId,
|
||||||
|
gameMode: 'finished',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
...gameState,
|
||||||
|
currentPlayerIndex: (gameState.currentPlayerIndex + 1) % gameState.players.length,
|
||||||
|
turnsPassed: newTurnsPassed,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
19
server.mjs
19
server.mjs
@@ -228,6 +228,25 @@ app.prepare().then(() => {
|
|||||||
if (move.pass) {
|
if (move.pass) {
|
||||||
gameState.currentPlayerIndex = (gameState.currentPlayerIndex + 1) % gameState.players.length;
|
gameState.currentPlayerIndex = (gameState.currentPlayerIndex + 1) % gameState.players.length;
|
||||||
gameState.turnsPassed++;
|
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 {
|
} else {
|
||||||
const tileIndex = player.tiles.findIndex(t => t.id === move.tile.id);
|
const tileIndex = player.tiles.findIndex(t => t.id === move.tile.id);
|
||||||
if (tileIndex === -1) {
|
if (tileIndex === -1) {
|
||||||
|
|||||||
Referencia en una nueva incidencia
Block a user