January 5, 2026

Juego de la serpiente en JavaScript

En menos de 70 líneas de código tienes aquí el juego de la serpiente realizado en JavaScript, con la ayuda de un <canvas>. No está acabado, ya que puede faltar puntuación, fin de juego… pero lo importante que es la dinámica de juego, está hecho. Ahora está en manos de cada uno acabarlo.

https://github.com/jagode67/juegosJS/blob/main/Serpiente.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Snake</title>
</head>

<body>
    <canvas id="canv" width="400" height="400"></canvas>
    <script>
        posX=posY=10; //posición de la serpiente en celdas
        tamCel=20; //tamaño de cada recuadro
        canCel=20; //cantidad de celdas en el fondo tamCel*canCel=400
        xPre=yPre=15; //posición del premio
        velX=velY=0; //velocidad serpiente
        serp=[]; //posición de todos los elementos de la serpiente
        longS=5; //longitud de la serpiente
        window.onload = function(){
            fondo=window.canv;
            ctx=fondo.getContext("2d")
            document.addEventListener("keydown",teclas)
            setInterval(jugar,1000/15); //15 veces por segundo
        }
        function teclas(tecla){
            switch(tecla.keyCode){
                case 37: //izquerda
                    velX=-1;velY=0; break;
                case 38: //arriba
                    velX=0;velY=-1; break;
                case 39: //derecha
                    velX=1;velY=0; break;
                case 40: //abajo
                    velX=0;velY=1; break;
            }
        }
        function jugar(){
            ctx.fillStyle="black"; //pinta el fondo
            ctx.fillRect(0,0,fondo.width, fondo.height);
            posX+=velX; posY+=velY; //mueve la serpiente
            if (posX<0) posX=canCel-1; //si se va por la izq
            if (posX>canCel-1) posX=0; //si se va por la der
            if (posY<0) posY=canCel-1; //se va por arriba
            if (posY>canCel-1) posY=0; //se va por arriba
            ctx.fillStyle="lime"; //pinta la serpiente
            for (seg of serp){ //saca cada segmento
                ctx.fillRect(seg.x*tamCel,seg.y*tamCel,tamCel-2,tamCel-2);  //pinta el segmento  
                if (seg.x==posX && seg.y==posY) //Detectar si la serpiente se toca a si misma
                    longS=5;
            }
            serp.push({x:posX, y:posY}) //añade el nuevo segmento
            while (serp.length>longS) //quita el último segmento
                serp.shift();
//            ctx.fillRect(posX*tamCel,posY*tamCel,tamCel-2,tamCel-2);
            ctx.fillStyle="red";
            ctx.fillRect(xPre*tamCel,yPre*tamCel,tamCel-2,tamCel-2);
            if (xPre==posX && yPre==posY){ //Si la serpiente está en el premio
                longS++; //aumenta la longitud de la serpiente
                xPre=Math.floor(Math.random()*canCel); //genera la posición del nuevo premio
                yPre=Math.floor(Math.random()*canCel);
            }
        }
    </script>
</body>
</html>

Leave a Reply

Your email address will not be published. Required fields are marked *