From 5ae33defd3fa70f2bbb5fea78cd4867096d66df8 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Sat, 27 Dec 2025 03:28:30 +0100 Subject: [PATCH] Fix snake velocity: render cells as 2 chars wide for square aspect Terminal cells are ~2:1 aspect ratio, so movement appeared faster vertically. Now each game cell is 2 characters wide. --- packages/coding-agent/examples/hooks/snake.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/coding-agent/examples/hooks/snake.ts b/packages/coding-agent/examples/hooks/snake.ts index ea8bd3a5..7eb861da 100644 --- a/packages/coding-agent/examples/hooks/snake.ts +++ b/packages/coding-agent/examples/hooks/snake.ts @@ -168,8 +168,9 @@ class SnakeComponent { const lines: string[] = []; - // Clamp game width to available terminal width (leaving space for border) - const effectiveWidth = Math.min(GAME_WIDTH, width - 4); + // Each game cell is 2 chars wide to appear square (terminal cells are ~2:1 aspect) + const cellWidth = 2; + const effectiveWidth = Math.min(GAME_WIDTH, Math.floor((width - 4) / cellWidth)); const effectiveHeight = GAME_HEIGHT; // Colors @@ -186,7 +187,7 @@ class SnakeComponent { lines.push(this.padLine(` ${title}`, width)); // Top border with rounded corners - lines.push(this.padLine(dim(` ╭${"─".repeat(effectiveWidth)}╮`), width)); + lines.push(this.padLine(dim(` ╭${"─".repeat(effectiveWidth * cellWidth)}╮`), width)); // Game grid for (let y = 0; y < effectiveHeight; y++) { @@ -197,13 +198,13 @@ class SnakeComponent { const isFood = this.state.food.x === x && this.state.food.y === y; if (isHead) { - row += green("●"); // Snake head + row += green("██"); // Snake head (2 chars) } else if (isBody) { - row += green("○"); // Snake body + row += green("▓▓"); // Snake body (2 chars) } else if (isFood) { - row += red("◆"); // Food + row += red("◆ "); // Food (2 chars) } else { - row += dim("·"); // Empty cell + row += " "; // Empty cell (2 spaces) } } row += dim("│"); @@ -211,7 +212,7 @@ class SnakeComponent { } // Bottom border with rounded corners - lines.push(this.padLine(dim(` ╰${"─".repeat(effectiveWidth)}╯`), width)); + lines.push(this.padLine(dim(` ╰${"─".repeat(effectiveWidth * cellWidth)}╯`), width)); // Footer if (this.state.gameOver) {