Snake Game Using Phaser Framework

Snake Game Using Phaser Framework

Modern implementation of the classic Snake game, built for the browser using a lightweight game-engine style loop instead of traditional DOM based rendering.

Implementación moderna del clásico juego Snake, construida para el navegador usando un loop de tipo game-engine en lugar de un renderizado basado en el DOM.

Demo scoreboard

Tablero de puntajes demo

When you play while logged in to the demo account system, your best Snake score will be stored and reused across sessions.

Cuando juegas estando conectado al sistema de cuentas de demo, tu mejor puntaje de Snake se almacena y se reutiliza entre sesiones.

Metric Métrica Value
Current demo user Usuario de demo actual
Best score (demo backend) Mejor puntaje (backend demo)
Last game score (this session) Último puntaje (esta sesión)

Top 5 Global Scores

Top 5 Puntajes Globales

Rank Rango User Usuario Score Puntaje
Loading...

How the scoreboard works

Cómo funciona el tablero

  • The game still keeps a local high score in your browser so it works offline.
  • El juego sigue manteniendo un puntaje alto local en tu navegador para funcionar sin conexión.
  • When you are logged in to the account demo, the game also sends your best score to a Cloudflare Worker backend.
  • Cuando inicias sesión en el demo de cuentas, el juego también envía tu mejor puntaje a un backend en Cloudflare Workers.
  • Each new game over event compares your latest score and updates the backend if you set a new personal best.
  • Cada fin de partida compara tu puntaje más reciente y actualiza el backend si superas tu mejor marca personal.

Project Overview

Project Overview

This demo focuses on grid based movement, collision detection and a clear separation between game state, rendering and input handling. The goal is to keep the UI shell minimal while showing how a small custom game loop can integrate cleanly with the rest of the site.

Este demo se enfoca en movimiento basado en grilla, detección de colisiones y una separación clara entre el estado del juego, el renderizado y el manejo de inputs. El objetivo es mantener una capa de UI mínima mientras se muestra cómo un loop de juego pequeño puede integrarse de forma limpia con el resto del sitio.

Tools

Herramientas

Custom JavaScript game logic Lógica de juego en JavaScript Visual Studio Code Visual Studio Code para edición de código Git Git para control de versiones GitHub Pages GitHub Pages para hosting del demo

Challenges and how they were solved

Retos y cómo se resolvieron

  • Keeping the game loop lightweight
    The game needed smooth movement without overcomplicating the engine. The solution was to use a simple fixed-timestep loop with a grid based coordinate system that keeps updates predictable and easy to debug.
  • Mantener un loop de juego liviano
    El juego debía tener movimiento fluido sin sobrecomplicar el engine. La solución fue usar un loop de timestep fijo con un sistema de coordenadas en grilla que mantiene las actualizaciones predecibles y fáciles de depurar.
  • Separating rendering from game state
    Mixing DOM changes with game logic makes debugging harder. The implementation keeps state updates and collision checks in pure JavaScript structures, and uses the canvas solely for drawing the current frame.
  • Separar el renderizado del estado del juego
    Mezclar cambios en el DOM con la lógica del juego complica la depuración. La implementación mantiene las actualizaciones de estado y las colisiones en estructuras de JavaScript puras, y usa el canvas solo para dibujar cada frame.
  • Handling input without ghosting
    Rapid key presses can cause conflicting direction changes. The input manager debounces direction updates so the snake never reverses into itself within a single tick.
  • Manejar el input sin movimientos fantasma
    Los cambios rápidos de teclas pueden generar direcciones en conflicto. El manejador de input limita las actualizaciones de dirección para que la serpiente nunca se invierta sobre sí misma en un solo tick.
  • Persisting the high score cleanly
    The game needs a simple way to remember the best run. The solution was to use browser storage guarded by basic checks so the game still works in environments where storage is limited.
  • Persistir el puntaje más alto de forma sencilla
    El juego necesita una forma simple de recordar la mejor partida. La solución fue usar almacenamiento del navegador con validaciones básicas para que el juego siga funcionando incluso donde el storage es limitado.

Contact

Contacto

If you want to explore game-like interactions, canvas mechanics or custom web demos similar to this Snake project, feel free to get in touch.

Si quieres explorar interacciones tipo juego, mecánicas en canvas o demos web a medida similares a este proyecto de Snake, puedes contactarme directamente.

More ways to contact me Más formas de contacto