Cómo crear el juego Snake en Python con Turtle

Actualizado el: 11/07/2026
Tempo de leitura: 4 minutos
Ilustração de uma cobra com o logo do Python centralizado

Crear el juego Snake en Python es un proyecto excelente para practicar movimiento, coordenadas, eventos del teclado, listas, colisiones, puntuación y organización con funciones. En esta versión utilizaremos el módulo Turtle, incluido con Python, por lo que no necesitas instalar una biblioteca externa.

La serpiente estará formada por segmentos cuadrados. El jugador la moverá con las flechas, recogerá comida y perderá cuando choque contra una pared o contra su propio cuerpo.

Preparar el proyecto

Crea una carpeta y guarda un archivo llamado snake.py. Ejecuta el programa con:

python snake.py

Turtle utiliza una ventana gráfica basada en Tk. En la mayoría de las instalaciones oficiales de Python para escritorio ya está disponible. La documentación oficial de Turtle explica movimientos, eventos y configuración de pantalla.

Crear la ventana

from turtle import Screen, Turtle

WIDTH = 600
HEIGHT = 600

screen = Screen()
screen.setup(WIDTH, HEIGHT)
screen.bgcolor("#111827")
screen.title("Snake en Python")
screen.tracer(0)

screen.tracer(0) desactiva la actualización automática. Después actualizaremos la pantalla una vez por fotograma, lo que evita parpadeos y permite controlar el ritmo.

La guía de Turtle para principiantes presenta coordenadas, colores, formas y eventos.

Crear el primer segmento

def create_segment(position):
    segment = Turtle("square")
    segment.color("#22c55e")
    segment.penup()
    segment.goto(position)
    return segment


snake = [
    create_segment((0, 0)),
    create_segment((-20, 0)),
    create_segment((-40, 0)),
]

Cada segmento es un objeto Turtle cuadrado. penup() evita dibujar líneas al moverse.

Mover el cuerpo correctamente

Los segmentos deben seguir al anterior. El movimiento comienza desde la cola:

MOVE_DISTANCE = 20


def move_snake():
    for index in range(len(snake) - 1, 0, -1):
        new_x = snake[index - 1].xcor()
        new_y = snake[index - 1].ycor()
        snake[index].goto(new_x, new_y)

    snake[0].forward(MOVE_DISTANCE)

Recorrer en orden inverso evita que varios segmentos copien una posición que ya fue modificada. La guía de bucles for en Python explica range(), pasos negativos e índices.

Controlar la dirección

UP = 90
DOWN = 270
LEFT = 180
RIGHT = 0


def go_up():
    if snake[0].heading() != DOWN:
        snake[0].setheading(UP)


def go_down():
    if snake[0].heading() != UP:
        snake[0].setheading(DOWN)


def go_left():
    if snake[0].heading() != RIGHT:
        snake[0].setheading(LEFT)


def go_right():
    if snake[0].heading() != LEFT:
        snake[0].setheading(RIGHT)

Impedir el giro de 180 grados evita que la cabeza choque inmediatamente contra el segundo segmento.

screen.listen()
screen.onkey(go_up, "Up")
screen.onkey(go_down, "Down")
screen.onkey(go_left, "Left")
screen.onkey(go_right, "Right")

Crear la comida

from random import randint

food = Turtle("circle")
food.color("#ef4444")
food.penup()
food.shapesize(0.6, 0.6)


def move_food():
    x = randint(-280, 280)
    y = randint(-280, 280)
    food.goto(x, y)


move_food()

La guía del módulo random explica randint(), elecciones y semillas. La documentación oficial de random detalla sus funciones y limitaciones.

Detectar la comida

score = 0


def add_segment():
    snake.append(create_segment(snake[-1].position()))


if snake[0].distance(food) < 15:
    move_food()
    add_segment()
    score += 1

distance() calcula la distancia entre dos objetos Turtle. Al comer, añadimos un segmento en la posición de la cola antes del siguiente movimiento.

Crear el marcador

scoreboard = Turtle()
scoreboard.hideturtle()
scoreboard.color("white")
scoreboard.penup()
scoreboard.goto(0, 260)


def update_score():
    scoreboard.clear()
    scoreboard.write(
        f"Puntuación: {score}",
        align="center",
        font=("Arial", 18, "bold"),
    )

La guía de f-strings en Python explica formato, alineación y expresiones.

Detectar las paredes

La ventana mide 600 por 600 y la cabeza ocupa aproximadamente 20 píxeles. Utiliza un límite ligeramente inferior a 300:

LIMIT = 285
head = snake[0]

hit_wall = (
    head.xcor() > LIMIT
    or head.xcor() < -LIMIT
    or head.ycor() > LIMIT
    or head.ycor() < -LIMIT
)

La condición debe revisar los cuatro lados. Si cualquiera es verdadera, termina la partida.

Detectar el choque con el cuerpo

hit_body = any(
    snake[0].distance(segment) < 10
    for segment in snake[1:]
)

Excluimos la cabeza con snake[1:]. La guía de slicing en Python explica cómo seleccionar rangos de una lista.

Mostrar Game Over

def show_game_over():
    message = Turtle()
    message.hideturtle()
    message.color("white")
    message.write(
        "GAME OVER",
        align="center",
        font=("Arial", 28, "bold"),
    )

Bucle principal completo

import time

DELAY = 0.12
running = True
update_score()

while running:
    screen.update()
    time.sleep(DELAY)
    move_snake()

    if snake[0].distance(food) < 15:
        move_food()
        add_segment()
        score += 1
        update_score()

    head = snake[0]
    hit_wall = (
        head.xcor() > 285
        or head.xcor() < -285
        or head.ycor() > 285
        or head.ycor() < -285
    )

    hit_body = any(
        head.distance(segment) < 10
        for segment in snake[1:]
    )

    if hit_wall or hit_body:
        running = False
        show_game_over()

screen.exitonclick()

screen.update() dibuja el estado actual y time.sleep() controla la velocidad. Para un proyecto más avanzado, puedes utilizar ontimer() y evitar bloquear el bucle de eventos.

Aumentar la dificultad

Reduce gradualmente el retraso:

DELAY = max(0.05, DELAY - 0.005)

Hazlo después de cada comida. Mantén un límite mínimo para que el juego siga siendo controlable.

Organizar el proyecto en clases

Cuando el código crece, puedes crear clases Snake, Food y Scoreboard. Cada una administra su estado y sus acciones. La guía de programación orientada a objetos en Python explica clases, métodos y encapsulación.

Mejoras posibles

  • Guardar la mejor puntuación en un archivo.
  • Añadir una pantalla de inicio y reinicio.
  • Crear obstáculos.
  • Cambiar colores y tamaño del tablero.
  • Aumentar la velocidad progresivamente.
  • Separar cada clase en un módulo.
  • Añadir sonidos con una biblioteca de juegos.

Errores frecuentes

  • Mover la cabeza antes de reposicionar el cuerpo.
  • Permitir un giro directo hacia la dirección opuesta.
  • Incluir la cabeza al comprobar colisiones con el cuerpo.
  • Actualizar la pantalla automáticamente y también de forma manual.
  • Crear comida fuera de los límites visibles.
  • Añadir el segmento en una posición incorrecta.
  • Olvidar llamar a screen.listen().

Conclusión

El juego Snake combina varios fundamentos en un proyecto visual: listas, bucles, funciones, objetos, eventos y colisiones. Empieza con tres segmentos, movimiento y comida. Después añade puntuación, paredes, choque con el cuerpo y dificultad progresiva. Completar estas etapas proporciona una base sólida para juegos más complejos.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Integração de bots Discord com Python para automação
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Cómo crear un bot de Discord con Python

    Crea un bot de Discord con Python y discord.py: comandos, slash commands, permisos, intents, Cogs, tareas, logs y seguridad del

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Conversão de áudio para texto usando Python gratuitamente
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Cómo convertir audio a texto con Python gratis

    Convierte audio a texto con Python usando Whisper y SpeechRecognition, genera TXT y SRT, procesa carpetas y mejora privacidad y

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Sistema de tradução automática desenvolvido com Python
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Cómo crear un sistema de traducción automática con Python

    Crea un sistema de traducción automática con Python, APIs oficiales, variables de entorno, lotes, caché, reintentos y protección de marcadores.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Gerenciador de senhas simples desenvolvido com Python
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Cómo crear un gestor de contraseñas sencillo con Python

    Crea un gestor de contraseñas con Python, Fernet, secrets, JSON, getpass, derivación de claves, copias de seguridad y prácticas seguras.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Geração automática de QR Code usando Python
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Cómo generar códigos QR con Python paso a paso

    Genera códigos QR con Python y qrcode: tamaños, corrección de errores, colores, logotipos, lotes CSV, rutas seguras y validación.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Sistema de login simples desenvolvido com Python
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Sistema de login en Python con archivos TXT

    Crea un sistema de login en Python con archivos TXT, getpass, hashes, PBKDF2, validación y advertencias de seguridad.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026