Add server logging for eliminations and garbage transfers

- Log elimination reason: board full, garbage collision, garbage overflow, disconnect
- Log garbage transfers: who cleared rows, how many, and recipients
- Log when no opponents available to send garbage

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-21 01:49:52 +00:00
parent 372a340024
commit a1cbd27a71
+29 -11
View File
@@ -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;
for (let i = 0; i < rowsCleared; i++) {
const target = opponents[Math.floor(Math.random() * opponents.length)];
addGarbageToPlayer(target);
}
if (opponents.length === 0) {
console.log(`[GARBAGE] ${sender.name} cleared ${rowsCleared} row(s) but no opponents to send garbage to`);
return;
}
function addGarbageToPlayer(player) {
const garbageLog = [];
for (let i = 0; i < rowsCleared; i++) {
const target = opponents[Math.floor(Math.random() * opponents.length)];
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, 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})`);
}
}
}