O jogo da velha é um dos projetos mais clássicos para quem está aprendendo Python. Ele é simples, divertido e ideal para treinar lógica de programação, estruturas condicionais e laços de repetição.
Neste artigo, você vai aprender passo a passo como criar o jogo da velha no Python, entender o código e ver o resultado funcionando. Mesmo que você nunca tenha programado antes, vai conseguir acompanhar.
🧩 O que é o Jogo da Velha?
O jogo da velha (ou tic-tac-toe, em inglês) é um jogo de tabuleiro simples, jogado por duas pessoas. Ele é composto por uma grade 3×3, e o objetivo é alinhar três símbolos iguais (X ou O) na horizontal, vertical ou diagonal.
Veja um exemplo:
X | O | X
---------
O | X | O
---------
_ | _ | X
Quem conseguir completar três em linha vence.
Se o tabuleiro for preenchido e ninguém fizer três em linha, o jogo termina em empate.
🎯 Por que criar um jogo da velha em Python?
Construir o jogo da velha é um ótimo exercício para quem está aprendendo programação porque ele envolve:
- Entrada de dados: o jogador digita onde quer jogar.
- Estruturas de repetição: o jogo roda até acabar.
- Estruturas condicionais: o programa precisa verificar se alguém ganhou.
- Listas e matrizes: o tabuleiro é armazenado na memória.
Além disso, é um projeto divertido e fácil de expandir (por exemplo, para jogar contra o computador).
⚙️ Estruturando o projeto
Antes de começar a codar, vamos planejar o que o programa precisa fazer:
- Mostrar o tabuleiro na tela.
- Pedir a jogada de cada jogador.
- Atualizar o tabuleiro com o símbolo (X ou O).
- Verificar se alguém venceu ou se deu empate.
- Alternar os jogadores até o jogo terminar.
Vamos começar criando o tabuleiro.
🧱 Criando o tabuleiro
O tabuleiro será uma lista de listas, representando as 3 linhas e 3 colunas.
tabuleiro = [
[" ", " ", " "],
[" ", " ", " "],
[" ", " ", " "]
]
Agora precisamos de uma função para mostrar o tabuleiro na tela:
def mostrar_tabuleiro(tabuleiro):
for linha in tabuleiro:
print(" | ".join(linha))
print("-" * 9)
mostrar_tabuleiro(tabuleiro)
🖨️ Resultado:
| |
---------
| |
---------
| |
---------
Perfeito! Agora o jogador consegue visualizar o jogo.
👥 Alternando entre jogadores
Vamos criar uma variável para controlar de quem é a vez.
jogador_atual = "X"
Depois de cada jogada, trocamos o jogador:
if jogador_atual == "X":
jogador_atual = "O"
else:
jogador_atual = "X"
Simples, mas eficiente.
🎮 Recebendo as jogadas dos jogadores
Agora precisamos permitir que o jogador escolha onde jogar.
Cada posição do tabuleiro pode ser representada por linha e coluna (de 0 a 2).
linha = int(input("Escolha a linha (0, 1 ou 2): "))
coluna = int(input("Escolha a coluna (0, 1 ou 2): "))
Depois, colocamos o símbolo no tabuleiro:
if tabuleiro[linha][coluna] == " ":
tabuleiro[linha][coluna] = jogador_atual
else:
print("Essa posição já está ocupada! Tente novamente.")
E mostramos o tabuleiro atualizado:
mostrar_tabuleiro(tabuleiro)
🧠 Verificando se alguém venceu
Para o jogo funcionar, precisamos verificar se algum jogador ganhou.
Existem 8 formas de vencer:
- 3 linhas
- 3 colunas
- 2 diagonais
Podemos verificar todas com uma função:
def verificar_vitoria(tabuleiro, jogador):
# Linhas
for linha in tabuleiro:
if linha.count(jogador) == 3:
return True
# Colunas
for c in range(3):
if tabuleiro[0][c] == tabuleiro[1][c] == tabuleiro[2][c] == jogador:
return True
# Diagonais
if tabuleiro[0][0] == tabuleiro[1][1] == tabuleiro[2][2] == jogador:
return True
if tabuleiro[0][2] == tabuleiro[1][1] == tabuleiro[2][0] == jogador:
return True
return False
🧾 Verificando empate
Se o tabuleiro estiver cheio e ninguém venceu, é empate.
def verificar_empate(tabuleiro):
for linha in tabuleiro:
if " " in linha:
return False
return True
🔁 Criando o loop principal do jogo
Agora que temos todas as partes, podemos montar o loop principal:
tabuleiro = [[" " for _ in range(3)] for _ in range(3)]
jogador_atual = "X"
while True:
mostrar_tabuleiro(tabuleiro)
print(f"Vez do jogador {jogador_atual}")
linha = int(input("Escolha a linha (0, 1 ou 2): "))
coluna = int(input("Escolha a coluna (0, 1 ou 2): "))
if tabuleiro[linha][coluna] != " ":
print("Essa posição já está ocupada! Tente outra.")
continue
tabuleiro[linha][coluna] = jogador_atual
if verificar_vitoria(tabuleiro, jogador_atual):
mostrar_tabuleiro(tabuleiro)
print(f"Jogador {jogador_atual} venceu!")
break
if verificar_empate(tabuleiro):
mostrar_tabuleiro(tabuleiro)
print("Empate!")
break
jogador_atual = "O" if jogador_atual == "X" else "X"
🧾 Resultado completo:
Exemplo de uma partida:
| |
---------
| |
---------
| |
---------
Vez do jogador X
Escolha a linha (0, 1 ou 2): 0
Escolha a coluna (0, 1 ou 2): 0
X | |
---------
| |
---------
| |
---------
Vez do jogador O
Escolha a linha (0, 1 ou 2): 1
Escolha a coluna (0, 1 ou 2): 1
...
Jogador X venceu!
💡 Dicas para melhorar o jogo
Depois que o jogo básico estiver funcionando, você pode deixá-lo mais interessante com algumas melhorias:
1. Validar entradas
Evite erros se o jogador digitar números fora do intervalo:
if linha not in [0, 1, 2] or coluna not in [0, 1, 2]:
print("Posição inválida! Use apenas 0, 1 ou 2.")
continue
2. Jogar contra o computador
Você pode criar uma jogada aleatória com o módulo random
:
import random
linha = random.randint(0, 2)
coluna = random.randint(0, 2)
3. Interface gráfica
Use o módulo tkinter para criar janelas com botões, transformando o jogo em algo mais visual.
4. Jogar no terminal com emojis
Troque “X” e “O” por emojis:
jogador_X = "❌"
jogador_O = "⭕"
Fica muito mais divertido!
🧭 O que você aprendeu até aqui
Neste projeto, você praticou:
- Listas e índices
- Loops e condicionais
- Funções
- Entrada de dados
- Verificação de vitória e empate
Esses são conceitos fundamentais em qualquer linguagem de programação.
O jogo da velha é um excelente ponto de partida para evoluir para projetos mais complexos, como jogos de adivinhação, batalha naval ou até inteligência artificial simples.
🚀 Próximos passos
Se quiser evoluir ainda mais, experimente:
- Implementar um sistema de placar que conte vitórias.
- Criar uma função de reiniciar o jogo sem precisar rodar o código novamente.
- Fazer um modo IA inteligente usando o algoritmo minimax.
Essas melhorias vão fortalecer seu raciocínio lógico e te deixar mais confortável com estruturas de código maiores.
✅ Conclusão
Criar um jogo da velha em Python é um dos melhores exercícios para quem está aprendendo programação.
Ele combina conceitos essenciais como listas, loops, condições e funções de uma forma prática e divertida.
Mais do que um simples jogo, esse projeto te ensina a pensar como programador — dividindo um problema em partes pequenas e resolvendo uma de cada vez.
Com pequenas melhorias, você pode transformar esse jogo básico em algo bem mais avançado.
Agora que você aprendeu o essencial, abra o editor de código e coloque a mão na massa!
Perguntas Frequentes (FAQ)
1. O que é o jogo da velha no Python?
É uma versão digital do jogo da velha feita com código Python.
2. Preciso saber programar para criar o jogo?
Não. O artigo ensina passo a passo desde o zero.
3. Posso jogar sozinho contra o computador?
Sim, basta adicionar uma jogada aleatória com random
.
4. O jogo funciona no celular?
Somente em apps que executam Python, como Pydroid ou Replit.
5. Posso mudar o tamanho do tabuleiro?
Sim, mas será preciso adaptar o código de verificação.
6. Como faço para reiniciar o jogo?
Coloque o loop principal dentro de uma função e chame novamente.
7. Qual editor devo usar?
PyCharm, VS Code ou o IDLE que vem com o Python já servem.
8. O que significa join()
no código?
É uma função que junta os itens de uma lista em uma string.
9. O que acontece se eu digitar fora de 0 a 2?
O código pode dar erro — adicione uma validação para evitar.
10. Dá para usar emojis no lugar do X e O?
Sim! Use “❌” e “⭕” para deixar o jogo mais bonito.
11. Como sei se deu empate?
O programa verifica se não há mais espaços vazios no tabuleiro.
12. É possível criar uma interface gráfica?
Sim, usando o módulo tkinter
do Python.