Criando o jogo da cobrinha (Snake) em Python

Atualizado em: 10/03/2026
Tempo de leitura: 11 minutos
Ilustração de uma cobra com o logo do Python centralizado

Desenvolver o seu próprio jogo da cobrinha (Snake) em Python é um dos marcos mais importantes na jornada de qualquer programador. Este projeto clássico não é apenas divertido, mas serve como um excelente exercício para consolidar conceitos fundamentais da ciência da computação. Ao criar este jogo, você aprenderá sobre lógica de programação, manipulação de coordenadas, loops de repetição e detecção de colisões. Python se destaca como a linguagem ideal para esse desafio devido à sua sintaxe limpa e legível, permitindo que você foque no funcionamento do jogo em vez de se perder em complexidades estruturais, o que explica em parte o que é Python e por que ele é tão popular mundialmente.

Por que Aprender Programação com o Jogo da Cobrinha?

O jogo da cobrinha surgiu originalmente nos fliperamas no final dos anos 70, mas ganhou o mundo rodando nos celulares Nokia nos anos 90. Para um iniciante, replicar essa mecânica ajuda a entender o ciclo de vida de uma aplicação. Diferente de um script simples que executa uma tarefa e para, um jogo precisa rodar continuamente, verificando as entradas do usuário a cada milissegundo. Além disso, este projeto é um ótimo ponto de partida em um roadmap Python bem estruturado, pois une conceitos básicos a resultados visuais imediatos.

Ao trabalhar neste projeto, você vai praticar o uso de bibliotecas externas e internas, o que é essencial para o desenvolvimento de software moderno. Se você ainda está dando seus primeiros passos e quer entender como a escrita de código se transforma em uma interface funcional, recomendo conferir nosso guia sobre como programar para reforçar os fundamentos antes de mergulharmos no código.

Preparando o Ambiente para o Desenvolvimento

Para construir o nosso jogo, utilizaremos a biblioteca Turtle. Ela é um módulo padrão do Python, o que significa que você não precisa instalar nada extra para começar. A biblioteca Turtle foi criada originalmente para ensinar programação para crianças, permitindo desenhar formas em uma tela através de comandos simples.

Antes de começar a digitar, certifique-se de que você tem o Python instalado em sua máquina. Você pode usar qualquer editor de texto, mas recomendamos o uso do VS Code devido às suas poderosas ferramentas de auxílio. Caso encontre problemas durante a execução do seu script, aprender a fazer o debug Python no VSCode pode poupar horas de frustração. Vamos preparar o terreno importando as bibliotecas necessárias e configurando a janela principal do jogo.

Configurando a Tela do Jogo

O primeiro passo é definir o espaço onde a ação vai acontecer. Precisamos de uma janela que responda aos nossos comandos e que tenha um tamanho definido para que possamos controlar os limites da cobra.

Python
import turtle
import time
import random

# Configuração da janela
janela = turtle.Screen()
janela.title("Jogo da Cobrinha - Academify")
janela.bgcolor("black")
janela.setup(width=600, height=600)
janela.tracer(0) # Desliga as atualizações automáticas da tela

Aqui, usamos o tracer(0) para que as animações fiquem mais suaves. Sem isso, a Turtle tentaria desenhar cada movimento individualmente, o que deixaria o jogo lento. É um exemplo prático de como a lógica de programação com Python exige que pensemos não apenas no “quê”, mas no “como” os recursos do sistema são utilizados.

Criando a Cobrinha e a Comida

A cobrinha será representada por um objeto quadrado, e a comida por outro objeto que aparecerá em locais aleatórios da tela. Para que a comida mude de lugar sempre que for devorada, usaremos recursos matemáticos específicos.

Definindo o Personagem Principal

A “cabeça” da cobra é o elemento que o jogador controla. Ela precisa ter uma direção inicial e uma velocidade de movimento constante.

Python
# Cabeça da cobra
cabeca = turtle.Turtle()
cabeca.speed(0)
cabeca.shape("square")
cabeca.color("green")
cabeca.penup()
cabeca.goto(0,0)
cabeca.direction = "stop"

Gerando a Comida Aleatoriamente

Para que o jogo seja desafiador, a comida deve surgir em locais imprevisíveis. Para isso, utilizamos o módulo random. Se você quer se aprofundar em como gerar valores randômicos em outros contextos, veja como usar o módulo random em Python de forma eficaz.

Python
# Comida da cobra
comida = turtle.Turtle()
comida.speed(0)
comida.shape("circle")
comida.color("red")
comida.penup()
comida.goto(0,100)

Implementando a Lógica de Movimento

O movimento em jogos 2D é baseado em um sistema de coordenadas X e Y. Quando a cobra vai para o norte, aumentamos o valor de Y. Quando vai para o sul, diminuímos. No entanto, precisamos garantir que o jogador não consiga virar a cobra diretamente para trás (por exemplo, de cima para baixo), o que causaria uma colisão imediata consigo mesma.

Funções de Controle

Precisamos criar funções que alterem a direção da cabeça e vinculá-las ao teclado do computador. Cada função verifica se a direção oposta não está ativa antes de executar a mudança.

Python
def subir():
    if cabeca.direction != "down":
        cabeca.direction = "up"

def descer():
    if cabeca.direction != "up":
        cabeca.direction = "down"

def esquerda():
    if cabeca.direction != "right":
        cabeca.direction = "left"

def direita():
    if cabeca.direction != "left":
        cabeca.direction = "right"

# Mapeamento do teclado
janela.listen()
janela.onkeypress(subir, "w")
janela.onkeypress(descer, "s")
janela.onkeypress(esquerda, "a")
janela.onkeypress(direita, "d")

Essas funções utilizam condicionais if para validar o movimento. Para entender melhor como essas estruturas funcionam na prática, você pode ler sobre if, elif e else no Python.

O Ciclo Principal do Jogo (Game Loop)

O coração de qualquer jogo é o Game Loop. Trata-se de um loop while True que executa as seguintes tarefas repetidamente:

  • Atualizar a posição da cabeça da cobra.
  • Verificar colisões com as bordas da tela.
  • Verificar se a cobra comeu a comida.
  • Atualizar a posição do corpo da cobra.
  • Checar se a cobra colidiu com o próprio corpo.

De acordo com a documentação oficial da biblioteca Turtle, a manipulação de objetos gráficos em tempo real exige uma gestão cuidadosa da memória para evitar travamentos. Em Python, embora alguns digam que a linguagem é lenta para jogos pesados, para projetos simples como este, o desempenho é excelente. Se você tem curiosidade sobre esse tema técnico, entenda por que o Python é lento em cenários de alta computação.

Colisões e Crescimento do Corpo

Quando a cabeça atinge a mesma coordenada da comida, adicionamos um novo segmento ao corpo da cobra. Armazenamos esses segmentos em uma lista simples. Para aprender como manipular essas coleções de dados, visite nosso artigo sobre listas em Python.

Python
segmentos = []

# Dentro do loop principal:
if cabeca.distance(comida) < 20:
    # Mover a comida para um lugar aleatório
    x = random.randint(-290, 290)
    y = random.randint(-290, 290)
    comida.goto(x, y)

    # Adicionar um novo segmento ao corpo
    novo_segmento = turtle.Turtle()
    novo_segmento.speed(0)
    novo_segmento.shape("square")
    novo_segmento.color("grey")
    novo_segmento.penup()
    segmentos.append(novo_segmento)

Gerenciando o Placar e Dificuldade

Um bom jogo precisa de um sistema de pontuação. Podemos usar um objeto Turtle extra para escrever texto na tela. Além disso, conforme a cobra cresce, podemos aumentar sutilmente a velocidade ou simplesmente manter o desafio constante através do time.sleep() para controlar o FPS (quadros por segundo).

“A simplicidade é o último grau de sofisticação.” – Leonardo da Vinci. Este jogo prova que com poucas linhas de código é possível criar entretenimento funcional.

Código Completo do Projeto

Abaixo está o código unificado do jogo da cobrinha em Python. Você pode copiar este código, salvar em um arquivo chamado snake.py e executá-lo em seu computador.

Python
import turtle
import time
import random

posicao_atraso = 0.1
pontuacao = 0
maior_pontuacao = 0

# Configuração da janela
janela = turtle.Screen()
janela.title("Snake Game - Academify")
janela.bgcolor("black")
janela.setup(width=600, height=600)
janela.tracer(0)

# Cabeça da cobra
cabeca = turtle.Turtle()
cabeca.speed(0)
cabeca.shape("square")
cabeca.color("green")
cabeca.penup()
cabeca.goto(0, 0)
cabeca.direction = "stop"

# Comida
comida = turtle.Turtle()
comida.speed(0)
comida.shape("circle")
comida.color("red")
comida.penup()
comida.goto(0, 100)

segmentos = []

# Placar
texto = turtle.Turtle()
texto.speed(0)
texto.color("white")
texto.penup()
texto.hideturtle()
texto.goto(0, 260)
texto.write("Score: 0  High Score: 0", align="center", font=("Courier", 24, "normal"))

# Funções
def subir():
    if cabeca.direction != "down":
        cabeca.direction = "up"

def descer():
    if cabeca.direction != "up":
        cabeca.direction = "down"

def esquerda():
    if cabeca.direction != "right":
        cabeca.direction = "left"

def direita():
    if cabeca.direction != "left":
        cabeca.direction = "right"

def mover():
    if cabeca.direction == "up":
        y = cabeca.ycor()
        cabeca.sety(y + 20)
    if cabeca.direction == "down":
        y = cabeca.ycor()
        cabeca.sety(y - 20)
    if cabeca.direction == "left":
        x = cabeca.xcor()
        cabeca.setx(x - 20)
    if cabeca.direction == "right":
        x = cabeca.xcor()
        cabeca.setx(x + 20)

# Teclado
janela.listen()
janela.onkeypress(subir, "w")
janela.onkeypress(descer, "s")
janela.onkeypress(esquerda, "a")
janela.onkeypress(direita, "d")

# Loop Principal
while True:
    janela.update()

    # Colisão com as bordas
    if cabeca.xcor() > 290 or cabeca.xcor() < -290 or cabeca.ycor() > 290 or cabeca.ycor() < -290:
        time.sleep(1)
        cabeca.goto(0, 0)
        cabeca.direction = "stop"
        for s in segmentos:
            s.goto(1000, 1000)
        segmentos.clear()
        pontuacao = 0
        texto.clear()
        texto.write(f"Score: {pontuacao}  High Score: {maior_pontuacao}", align="center", font=("Courier", 24, "normal"))

    # Colisão com a comida
    if cabeca.distance(comida) < 20:
        x = random.randint(-280, 280)
        y = random.randint(-280, 280)
        comida.goto(x, y)

        novo_segmento = turtle.Turtle()
        novo_segmento.speed(0)
        novo_segmento.shape("square")
        novo_segmento.color("grey")
        novo_segmento.penup()
        segmentos.append(novo_segmento)
        
        pontuacao += 10
        if pontuacao > maior_pontuacao:
            maior_pontuacao = pontuacao
        texto.clear()
        texto.write(f"Score: {pontuacao}  High Score: {maior_pontuacao}", align="center", font=("Courier", 24, "normal"))

    # Mover o corpo
    for index in range(len(segmentos) - 1, 0, -1):
        x = segmentos[index-1].xcor()
        y = segmentos[index-1].ycor()
        segmentos[index].goto(x, y)

    if len(segmentos) > 0:
        x = cabeca.xcor()
        y = cabeca.ycor()
        segmentos[0].goto(x, y)

    mover()

    # Colisão com o próprio corpo
    for s in segmentos:
        if s.distance(cabeca) < 20:
            time.sleep(1)
            cabeca.goto(0, 0)
            cabeca.direction = "stop"
            for seg in segmentos:
                seg.goto(1000, 1000)
            segmentos.clear()
            pontuacao = 0
            texto.clear()
            texto.write(f"Score: {pontuacao}  High Score: {maior_pontuacao}", align="center", font=("Courier", 24, "normal"))

    time.sleep(posicao_atraso)

janela.mainloop()

Dicas para Expandir o Projeto

Agora que você tem a estrutura básica funcionando, o céu é o limite para a personalização. Você pode adicionar sons quando a cobra comer, criar obstáculos fixos na tela ou até mesmo implementar diferentes níveis de dificuldade onde a velocidade aumenta gradualmente. Se você quer levar suas habilidades para o próximo nível, tente converter este jogo para uma interface web usando o PyScript para rodar Python no navegador.

Além disso, o aprendizado de jogos abre portas para entender como funcionam as interfaces gráficas modernas. Para quem gosta de criar ferramentas úteis, dominar a biblioteca Tkinter para interfaces gráficas é o próximo passo natural após concluir este tutorial com a Turtle.

Perguntas Frequentes

Como eu instalo a biblioteca Turtle?

Você não precisa instalar! A biblioteca turtle já vem integrada na instalação padrão do Python como um módulo nativo.

Por que a minha janela fecha logo depois de abrir?

Isso geralmente acontece porque o script chegou ao fim. Certifique-se de que o loop while True está ativo ou que a função janela.mainloop() está presente no final do código.

Como posso mudar as cores do jogo?

Basta alterar as strings de cores em comandos como cabeca.color("green") ou janela.bgcolor("black"). Você pode usar nomes de cores em inglês ou códigos hexadecimais.

É possível jogar usando as setas do teclado?

Sim! No código de mapeamento, substitua as letras “w”, “a”, “s”, “d” por “Up”, “Left”, “Down”, “Right” (com a primeira letra maiúscula).

Como faço para aumentar a velocidade da cobra?

Diminua o valor da variável posicao_atraso. Quanto menor o número, mais rápido o loop será executado e mais veloz a cobra se moverá.

O jogo funciona no Mac ou Linux?

Sim, o Python e a biblioteca Turtle são multiplataforma. O código funcionará de forma idêntica em qualquer sistema operacional que tenha o Python instalado.

A cobra está atravessando o próprio corpo sem morrer, por quê?

Verifique se o seu loop de checagem de colisão com os segmentos está dentro do while True principal e se a distância de detecção está correta (geralmente menor que 20 pixels).

Posso adicionar uma imagem de fundo?

Sim, a Turtle permite usar o método janela.bgpic("nome_da_imagem.gif"). Note que ele aceita apenas o formato GIF nativamente.

Criar este jogo é apenas o começo. Python é uma linguagem vasta que permite desde automação simples até inteligência artificial complexa. Continue praticando, modificando o código e explorando novas possibilidades para se tornar um desenvolvedor completo.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Conteúdo do artigo

    Artigos relacionados

    Landing page simples criada com Python e Tailwind CSS
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Como criar uma landing page simples com Python e Tailwind CSS

    Você já sentiu a necessidade de colocar uma ideia no ar rapidamente, mas se viu travado na complexidade do desenvolvimento

    Ler mais

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

    Como criar um sistema de tradução automática com Python

    Criar um sistema de tradução automática com Python é uma das formas mais fascinantes de entrar no mundo da Inteligência

    Ler mais

    Tempo de leitura: 10 minutos
    17/04/2026
    Sistema de lembretes e alarmes desenvolvido com Python
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Como criar um sistema de lembretes com alarme em Python

    Criar um sistema de lembretes com alarme em Python é um dos projetos mais gratificantes para quem está dando os

    Ler mais

    Tempo de leitura: 10 minutos
    10/04/2026
    Extração de dados de tabelas de sites usando Python e pandas
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Como extrair dados de tabelas em sites com Python e Pandas

    Você já se deparou com um site repleto de informações úteis organizadas em tabelas, mas sentiu que copiar e colar

    Ler mais

    Tempo de leitura: 10 minutos
    09/04/2026
    Conversão de áudio para texto usando Python gratuitamente
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Como converter áudio em texto com Python de forma gratuita

    Transformar arquivos de áudio em texto é uma das tarefas mais úteis e requisitadas na era da inteligência artificial e

    Ler mais

    Tempo de leitura: 10 minutos
    08/04/2026
    Sistema de login simples desenvolvido com Python
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Como criar um sistema de login simples com Python e TXT

    Aprender a manipular informações externas é um dos grandes marcos na jornada de qualquer programador. Se você está dando seus

    Ler mais

    Tempo de leitura: 10 minutos
    07/04/2026