Criando o jogo da cobrinha (Snake) em Python

Publicado em: 10/02/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

    Fundamentos
    Foto do Leandro Hirt

    Como resolver erros de codificação UTF‑8 no Python

    Resolver erros de codificação UTF-8 no Python pode parecer um desafio intimidador para quem está começando, mas é um dos

    Ler mais

    Tempo de leitura: 11 minutos
    21/02/2026
    Fundamentos
    Foto do Leandro Hirt

    FileNotFoundError – Resolva esse erro de caminhos no Python

    Você acabou de escrever um script incrível, configurou toda a lógica de programação e, na hora de executar, o terminal

    Ler mais

    Tempo de leitura: 10 minutos
    20/02/2026
    Fundamentos
    Foto do Leandro Hirt

    Como criar e usar dataclasses em Python facilmente

    No vasto ecossistema da programação, gerenciar dados em classes pode, muitas vezes, parecer uma tarefa repetitiva e cansativa. Se você

    Ler mais

    Tempo de leitura: 9 minutos
    18/02/2026
    Fundamentos
    Foto do Leandro Hirt

    Entendendo o operador walrus (:=) no Python

    O ecossistema do Python é conhecido por sua simplicidade e legibilidade, mas isso não significa que a linguagem pare de

    Ler mais

    Tempo de leitura: 9 minutos
    18/02/2026
    Fundamentos
    Foto do Leandro Hirt

    Entendendo o módulo collections em Python

    O módulo collections é uma das ferramentas mais poderosas e subutilizadas da biblioteca padrão do Python. Embora os tipos de

    Ler mais

    Tempo de leitura: 10 minutos
    17/02/2026
    Fundamentos
    Foto do Leandro Hirt

    Hash de senhas em Python: Crie hashes seguros em minutos

    Garantir a segurança dos dados dos usuários é uma das responsabilidades mais críticas de qualquer desenvolvedor de software. Quando falamos

    Ler mais

    Tempo de leitura: 10 minutos
    16/02/2026