Lo que empezó como un Snake minimalista se transformó en una experiencia holográfica. Aprovechamos la publicación para repensar la estética, abrazar los brillos neón y dejar que la interfaz cuente la historia de un arcade que viajó al futuro.
"La nueva meta no era solo hacer que se viera bien, sino que se sintiera como parte de un tablero flotante en un rascacielos nocturno."
Pedro aporta la visión, Gemini enciende la imaginación, Codex pule cada píxel interactivo.
El motor del juego sigue siendo el mismo: un canvas HTML que mueve la serpiente cuadro a cuadro. La diferencia está en cómo envolvemos esa mecánica. Añadimos un tagline, reorganizamos el HUD en tres columnas equilibradas y convertimos las pantallas de inicio y dificultad en tarjetas translúcidas centradas.
El marcado simplificado quedó así:
<div id="game-container">
<h1 id="game-title">Neon Snake</h1>
<p id="tagline">La serpiente clásica reinventada en neón.</p>
<div id="ui-bar">
<div><span id="score-label">Puntuación</span><span id="score">0</span></div>
<div><span id="level-label">Nivel</span><span id="level">1</span></div>
<div><span id="lives-label">Vidas</span><span id="lives">3</span></div>
</div>
<canvas id="game-canvas"></canvas>
<!-- overlays futuristas aquí -->
</div>
Partimos de la paleta que nos regaló la imagen generativa: cian brillante, rosas eléctricos y un fondo casi nocturno. El cuerpo del documento usa esa imagen como textura y la suaviza con un degradado oscuro. El contenedor del juego imita un panel de cristal con backdrop-filter, bordes finos y sombras volumétricas.
:root {
--primary-color: #00ffc6;
--accent-color: #ff2d7a;
--canvas-bg: rgba(3, 12, 26, 0.88);
}
body {
background:
radial-gradient(circle at 20% 20%, rgba(0, 255, 198, 0.08), transparent 55%),
radial-gradient(circle at 80% 0%, rgba(255, 45, 122, 0.08), transparent 50%),
url("Generated Image October 25, 2025 - 11_17AM.png") center/cover fixed;
color: #e6fdfd;
font-family: 'Rajdhani', sans-serif;
}
#game-container {
backdrop-filter: blur(18px);
border: 1px solid rgba(0, 255, 198, 0.35);
border-radius: 18px;
box-shadow: 0 18px 45px rgba(0, 0, 0, 0.45),
0 0 140px rgba(0, 255, 198, 0.12);
}
Los botones adoptan gradientes 120° y un efecto de resplandor interior que conversa con el HUD. El resultado: todo parece flotar sobre el tablero, sin perder legibilidad.
El gran salto visual está dentro del canvas: ahora la cuadrícula palpita y cada pieza emite su propio halo. Encapsulamos el render en funciones reutilizables que mezclan sombras, curvas y pequeñas figuras para el alimento, la comida especial y las vidas extra.
function drawNeonCell(x, y, fillColor, glowColor, radius = 6) {
ctx.save();
const r = Math.min(radius, box / 2 - 1);
ctx.shadowColor = glowColor;
ctx.shadowBlur = 18;
ctx.beginPath();
ctx.moveTo(x + r, y);
ctx.lineTo(x + box - r, y);
ctx.quadraticCurveTo(x + box, y, x + box, y + r);
ctx.lineTo(x + box, y + box - r);
ctx.quadraticCurveTo(x + box, y + box, x + box - r, y + box);
ctx.lineTo(x + r, y + box);
ctx.quadraticCurveTo(x, y + box, x, y + box - r);
ctx.lineTo(x, y + r);
ctx.quadraticCurveTo(x, y, x + r, y);
ctx.closePath();
ctx.fillStyle = fillColor;
ctx.fill();
ctx.strokeStyle = "rgba(255, 255, 255, 0.18)";
ctx.stroke();
ctx.restore();
}
function drawGrid() {
ctx.save();
const pulse = (Math.sin(Date.now() / 420) + 1) / 2;
const alpha = (0.06 + pulse * 0.1).toFixed(2);
const glow = (0.2 + pulse * 0.15).toFixed(2);
const gridComponents = colors.grid.match(/\d+(\.\d+)?/g) || ["0", "255", "198"];
const [r, g, b] = gridComponents;
ctx.strokeStyle = `rgba(${r}, ${g}, ${b}, ${alpha})`;
ctx.shadowColor = `rgba(${r}, ${g}, ${b}, ${glow})`;
ctx.shadowBlur = 14;
for (let x = 0; x <= canvas.width; x += box) {
ctx.beginPath();
ctx.moveTo(x + 0.5, 0);
ctx.lineTo(x + 0.5, canvas.height);
ctx.stroke();
}
for (let y = 0; y <= canvas.height; y += box) {
ctx.beginPath();
ctx.moveTo(0, y + 0.5);
ctx.lineTo(canvas.width, y + 0.5);
ctx.stroke();
}
ctx.restore();
}
Las piezas especiales añaden formas secundarias: un rombo dorado para el multiplicador y una cruz luminosa para recuperar vidas. Todo brilla, pero ningún elemento compite con la serpiente.
No todo es apariencia. Afinamos varios puntos que mejoran la sensación de juego:
El siguiente objetivo es llevar la experiencia más allá: ranking diario, desafíos por tiempo y quizá skins que conecten con diferentes ciudades. Por ahora, Neon Snake cumple su promesa: es el clásico de siempre, vestido para el 2025.