Este repositório contém o clássico Jogo da Cobrinha (Snake Game) desenvolvido em Python, projetado especificamente como um material de estudo para desenvolvedores iniciantes. O foco principal é a aplicação de lógica de movimento, manipulação de listas dinâmicas e o uso da biblioteca curses para interfaces de terminal.
Demonstrar a aplicação de estruturas de dados (listas), controle de eventos em tempo real e modularização de funções. É um projeto prático ideal para estudantes que desejam entender como jogos baseados em coordenadas e ciclos de atualização (game loops) funcionam.
Este exercício foi estruturado para consolidar conceitos essenciais de algoritmos:
- Manipulação de Listas: Uso de
insertepoppara simular o movimento e o crescimento do corpo da cobra. - Controle de Fluxo e Tempo: Gerenciamento da velocidade do jogo e captura de teclas sem interromper a execução (
timeout). - Lógica de Coordenadas: Como gerenciar posições
[y, x]dentro de um plano cartesiano delimitado por bordas. - Biblioteca Curses: Manipulação avançada do terminal para criar janelas, bordas e desenhar caracteres em posições específicas.
- Modularização: Organização do código em funções com responsabilidades únicas (S.O.L.I.D. para iniciantes).
Para quem está começando, o maior desafio não é a sintaxe, mas a montagem do raciocínio. Confira o passo a passo da construção deste jogo:
- Modelagem Dinâmica do Corpo: A cobra não é um objeto único, mas uma lista de coordenadas
[[y, x], [y, x]]. A "cabeça" é sempre o primeiro item (índice0), e o restante da lista forma o rastro que chamamos de corpo. - A Matemática do Movimento: Em vez de "empurrar" cada gomo da cobra, usamos um truque lógico: em cada turno, calculamos e inserimos uma nova cabeça na direção escolhida. Se a cobra não comer nada, removemos o último item da lista (a cauda). Essa troca constante cria a ilusão de movimento.
- Detecção de Colisões: O sistema monitora a coordenada da cabeça em tempo real. Se ela for igual aos limites da borda (
y <= 0oux >= largura) ou se coincidir com qualquer coordenada que já exista na lista do corpo, o jogo identifica o impacto e encerra a partida. - Ecossistema e Alimentação: Utilizamos a biblioteca
randompara sortear posições para a fruta. Quando a cabeça ocupa a mesma posição da fruta, o sistema incrementa a pontuação e não remove a cauda naquele turno, resultando no crescimento natural da cobra. - Prevenção de Movimento Oposto: Para evitar o "suicídio lógico", implementamos uma trava que impede a cobra de virar 180° instantaneamente (ex: tentar ir para cima quando já está indo para baixo). O comando só é aceito se for uma curva lateral.
- O Coração do Jogo (Game Loop): Um loop
while Truecoordena o tempo do jogo. Ele limpa a tela, desenha os atores (caracteresASCII), processa a entrada do teclado e aguarda alguns milissegundos antes de repetir tudo, garantindo que o jogo não rode rápido demais para o olho humano. - Abstração com Funções: O código é dividido em funções especialistas (como
mover_cobraeverificar_colisao), facilitando a manutenção e permitindo que você entenda o papel de cada peça no funcionamento global do sistema.
Para garantir a melhor experiência de aprendizado e a execução correta de todos os recursos (como a limpeza de tela automática), o projeto utiliza as seguintes tecnologias:
Para garantir que o jogo funcione corretamente, certifique-se de ter os seguintes itens instalados:
- Python 3.10 ou superior: O código utiliza recursos modernos da linguagem.
- Suporte a Curses: No Windows, é necessário instalar o pacote windows-curses (incluído no
requirements.txt). - VS Code / PyCharm (Opcional): Recomendado para abrir e editar o arquivo
main.pycom suporte total a refatoração e depuração.
Dica: Para uma melhor experiência visual, execute o jogo diretamente no terminal do seu sistema (
Prompt de ComandoouPowerShell).
- Clone o repositório:
git clone https://github.com/ryanvmorais/python-jogo-da-cobrinha.git
- Instale as dependências:
- Navegue até a pasta do projeto e utilize o comando abaixo no seu terminal (CMD, PowerShell ou Terminal do VS Code/PyCharm):
pip install -r requirements.txt
- Execute o script:
- Navegue até a pasta do projeto e utilize o comando abaixo no seu terminal (CMD, PowerShell ou Terminal do VS Code/PyCharm):
python main.py
Nota: O jogo utiliza a biblioteca
cursespara gerenciar a interface do terminal de forma nativa e eficiente.
Para facilitar o acesso de quem está começando, adicionei scripts de inicialização automática. Basta baixar o projeto e:
- No Windows: Dê dois cliques no arquivo
iniciar_jogo.bat. - No Linux/macOS: Execute o arquivo
iniciar_jogo.shno terminal.
Esses scripts verificam automaticamente se você tem o Python instalado antes de iniciar a partida.
Para exercitar o que aprendeu, tente modificar o código e implementar estas novas funcionalidades:
- 🏆 Sistema de Recorde (Persistência de Dados):
Atualmente, a pontuação é reiniciada toda vez que o programa fecha. O desafio é criar uma "memória permanente" para o jogo:
- O Conceito: Utilize as funções de manipulação de arquivos do Python (
open,read,write). - A Lógica: Ao iniciar o jogo, o programa lê um arquivo chamado
recorde.txt. Se a pontuação atual ultrapassar o valor lido, o jogo deve sobrescrever o arquivo com o novo recorde antes de encerrar. - O Aprendizado: Você aprenderá a salvar dados fisicamente no computador (
HD/SSD), garantindo que o recorde persista mesmo após desligar a máquina.
- 🍎 Frutas Especiais: Crie uma fruta "dourada" que aparece raramente e dá 5 pontos de uma vez.
- 🔳 Atravesar Paredes: Altere a lógica de colisão para que, ao bater na borda direita, a cobra reapareça na borda esquerda.
Aprender algo novo tem seus desafios, mas estou aqui para caminharmos juntos! Se você encontrou algum erro, teve dificuldade em rodar o jogo ou pensou em uma funcionalidade incrível para adicionar:
- Abra uma Issue: Clique no link e descreva sua dúvida ou sugestão. É a melhor forma de trocarmos conhecimento e ajudarmos outras pessoas que tenham a mesma dúvida!
- Me mande um E-mail: Se preferir algo mais privado, pode me escrever em contato@ryanmorais.com.br.
Ficarei muito feliz em ver seu progresso e receber seu feedback para melhorar cada vez mais nossos materiais de estudo! 🤝
Este projeto está sob a Licença MIT. Isso significa que você pode usar, copiar e modificar o código à vontade, inclusive para seus próprios projetos, desde que mantenha os créditos originais. Para mais detalhes, consulte o arquivo LICENSE.
