Como Criar um Jogo da Velha no Python (Passo a Passo)

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:

  1. Mostrar o tabuleiro na tela.
  2. Pedir a jogada de cada jogador.
  3. Atualizar o tabuleiro com o símbolo (X ou O).
  4. Verificar se alguém venceu ou se deu empate.
  5. 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.

Python
tabuleiro = [
    [" ", " ", " "],
    [" ", " ", " "],
    [" ", " ", " "]
]

Agora precisamos de uma função para mostrar o tabuleiro na tela:

Python
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.

Python
jogador_atual = "X"

Depois de cada jogada, trocamos o jogador:

Python
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).

Python
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:

Python
if tabuleiro[linha][coluna] == " ":
    tabuleiro[linha][coluna] = jogador_atual
else:
    print("Essa posição já está ocupada! Tente novamente.")

E mostramos o tabuleiro atualizado:

Python
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:

Python
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.

Python
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:

Python
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:

Python
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:

Python
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:

Python
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.

Compartilhe:

Artigos recentes

Conteúdo do artigo

    Comece a Aprender Python Hoje!

    © Academify 2020-2025. Todos os direitos reservados.

    Conheça o Nosso Curso

    de

    logo do Python
    logo do Python

    Completo!

    Aprenda Python de forma prática e comece a criar seus próprios projetos desde as primeiras aulas. Um curso completo, do básico ao avançado