diff --git a/server/index.js b/server/index.js index f2a42f5..0f1579f 100644 --- a/server/index.js +++ b/server/index.js @@ -293,13 +293,13 @@ io.on('connection', (socket) => { socket.on('disconnect', () => { const player = lobby.players.get(socket.id); if (player) { - console.log(`${player.name} disconnected (${lobby.players.size - 1} remaining)`); - if (lobby.gameStarted) { player.eliminated = true; + console.log(`[ELIMINATION] ${player.name} eliminated - player disconnected during game`); broadcastState(); checkGameOver(); } + console.log(`${player.name} disconnected (${lobby.players.size - 1} remaining)`); lobby.players.delete(socket.id); @@ -418,7 +418,11 @@ function lockPiece(player) { const rowsCleared = clearRows(player); - if (!spawnPiece(player)) player.eliminated = true; + const spawnResult = spawnPiece(player); + if (!spawnResult) { + player.eliminated = true; + console.log(`[ELIMINATION] ${player.name} eliminated - piece could not spawn (board full at y=${player.currentPiece?.y})`); + } // Reset canHold for the new piece player.canHold = true; @@ -452,26 +456,40 @@ function clearRows(player) { function sendGarbage(sender, rowsCleared) { // Number of garbage rows equals number of lines cleared const opponents = Array.from(lobby.players.values()).filter(p => p.id !== sender.id && !p.eliminated); - if (opponents.length === 0) return; + if (opponents.length === 0) { + console.log(`[GARBAGE] ${sender.name} cleared ${rowsCleared} row(s) but no opponents to send garbage to`); + return; + } + + const garbageLog = []; for (let i = 0; i < rowsCleared; i++) { const target = opponents[Math.floor(Math.random() * opponents.length)]; - addGarbageToPlayer(target); + garbageLog.push(target.name); + addGarbageToPlayer(target, sender.name); } + + console.log(`[GARBAGE] ${sender.name} cleared ${rowsCleared} row(s) -> sent garbage to: ${garbageLog.join(', ')}`); } -function addGarbageToPlayer(player) { +function addGarbageToPlayer(player, senderName) { // Remove top row and add garbage to bottom player.board.shift(); const garbageRow = Array(BOARD_WIDTH).fill(GARBAGE_COLOR); - garbageRow[Math.floor(Math.random() * BOARD_WIDTH)] = 0; + const gap = Math.floor(Math.random() * BOARD_WIDTH); + garbageRow[gap] = 0; player.board.push(garbageRow); // Push current piece up by 1 row if it exists (y decreases when moving up) if (player.currentPiece) { + const oldY = player.currentPiece.y; player.currentPiece.y--; // Eliminate if the piece is pushed above the board or collides - if (player.currentPiece.y < 0 || !isValidPosition(player.currentPiece, player.currentPiece.x, player.currentPiece.y, player.board)) { + if (player.currentPiece.y < 0) { player.eliminated = true; + console.log(`[ELIMINATION] ${player.name} eliminated by ${senderName} - piece pushed above board (y=${oldY} -> ${player.currentPiece.y})`); + } else if (!isValidPosition(player.currentPiece, player.currentPiece.x, player.currentPiece.y, player.board)) { + player.eliminated = true; + console.log(`[ELIMINATION] ${player.name} eliminated by ${senderName} - piece collision after garbage (piece at x=${player.currentPiece.x}, y=${player.currentPiece.y})`); } } }