Este repositório contém um Jogo da Velha (Tic Tac Toe) desenvolvido em Python, projetado especificamente como um material de estudo para desenvolvedores iniciantes. O foco principal é a aplicação prática de fundamentos da programação e manipulação de matrizes no terminal.
Demonstrar a aplicação de estruturas de repetição, estruturas condicionais e Programação Orientada a Objetos (POO) em Python. É um projeto prático perfeito para estudantes que desejam consolidar o raciocínio lógico por trás da construção de sistemas.
Este exercício foi estruturado para consolidar conceitos essenciais de algoritmos:
- Estruturas de Repetição: Controle de turnos e verificação de vitória (Loops
whileefor). - Estruturas Condicionais: Validação de jogadas e regras do jogo (
if/elif/else). - Manipulação de Matrizes: Como gerenciar dados usando índices
[linha][coluna]. - POO (Orientada a Objetos): Organização de código modular, limpo e reutilizável.
- Interação Multiplataforma com o SO: Uso do módulo
subprocessem conjunto comos.namepara detectar o sistema operacional em tempo real e executar o comando de limpeza de tela correto (clsno Windows ouclearem sistemas Unix/Mac).
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:
- Abstração e Modelagem: Imagine o tabuleiro como uma matriz 3x3. No Python, usamos uma lista de listas para representar isso, permitindo acessar cada quadrado através de coordenadas como
tabuleiro[0][1]. - UX e Fluxo de Jogo: O jogo funciona em ciclos. O usuário interage via terminal, o sistema valida a jogada e utiliza o módulo
subprocesspara limpar a tela, criando a sensação de um aplicativo dinâmico e organizado. - Arquitetura com POO: Utilizamos Programação Orientada a Objetos (POO) para para organizar o código. A classe
JogoDaVelhacentraliza toda a lógica e armazena o "estado" da partida (quem venceu, de quem é a vez e como está o tabuleiro). - Inicialização: Todo início (ou reinício) de partida limpa as variáveis de controle e gera um novo tabuleiro preenchido apenas com espaços vazios (
' '). - Algoritmo de Vitória: Desenvolvemos uma lógica matemática que varre as 8 possibilidades de vitória: 3 linhas, 3 colunas e 2 diagonais. Se três símbolos iguais forem detectados em sequência, o jogo identifica o vencedor.
- O "Game Loop": O coração do projeto é um loop
while True. Ele coordena a orquestra:desenha o tabuleiro->processa jogada do usuário->verifica vitória->processa jogada aleatória da máquina->verifica vitória->repete. - Tratamento de Erros: Implementamos blocos
try/exceptpara que o programa não quebre caso o usuário digite algo inesperado (como letras em vez de números), garantindo uma experiência estável.
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.
- VS Code / PyCharm (Opcional): Recomendado para abrir e editar o arquivo
main.pycom suporte total a refatoração e depuração.
Dica: Para verificar sua versão do Python, digite
python --versionno seu terminal.
- Clone o repositório:
git clone https://github.com/ryanvmorais/python-jogo-da-velha.git
- 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 detectará automaticamente se você está no
Windows,LinuxoumacOSpara gerenciar a limpeza da tela.
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:
- 🏆 Placar Acumulado (Gerenciamento de Estado):
O desafio é criar um contador que não zere ao reiniciar uma partida.
- O Conceito: Aprenda a diferenciar variáveis que controlam a rodada das que controlam o histórico do jogador.
- A Lógica: Implemente variáveis de controle (ex:
vitorias_xevitorias_o) que persistam enquanto o programa estiver aberto. Toda vez que um vencedor for detectado, o placar deve ser atualizado e exibido no próximo turno. - O Aprendizado: Você entenderá como manter dados consistentes em aplicações que possuem múltiplos ciclos de execução.
- 🤖 Modo Single Player: Tente fazer a máquina bloquear suas jogadas em vez de apenas jogar aleatoriamente.
- 🎨 Cores no Terminal: Utilize a biblioteca
coloramapara colorir o "X" de vermelho e o "O" de azul.
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.
