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

Atualizado em: 26/04/2026
Tempo de leitura: 8 minutos
Projeto de jogo da velha desenvolvido em Python como exercício de lógica de programação

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:

Facebook
WhatsApp
Twitter
LinkedIn

Conteúdo do artigo

    Artigos relacionados

    Landing page simples criada com Python e Tailwind CSS
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Como criar uma landing page simples com Python e Tailwind CSS

    Você já sentiu a necessidade de colocar uma ideia no ar rapidamente, mas se viu travado na complexidade do desenvolvimento

    Ler mais

    Tempo de leitura: 11 minutos
    19/04/2026
    Sistema de tradução automática desenvolvido com Python
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Como criar um sistema de tradução automática com Python

    Criar um sistema de tradução automática com Python é uma das formas mais fascinantes de entrar no mundo da Inteligência

    Ler mais

    Tempo de leitura: 10 minutos
    17/04/2026
    Sistema de lembretes e alarmes desenvolvido com Python
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Como criar um sistema de lembretes com alarme em Python

    Criar um sistema de lembretes com alarme em Python é um dos projetos mais gratificantes para quem está dando os

    Ler mais

    Tempo de leitura: 10 minutos
    10/04/2026
    Extração de dados de tabelas de sites usando Python e pandas
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Como extrair dados de tabelas em sites com Python e Pandas

    Você já se deparou com um site repleto de informações úteis organizadas em tabelas, mas sentiu que copiar e colar

    Ler mais

    Tempo de leitura: 10 minutos
    09/04/2026
    Conversão de áudio para texto usando Python gratuitamente
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Como converter áudio em texto com Python de forma gratuita

    Transformar arquivos de áudio em texto é uma das tarefas mais úteis e requisitadas na era da inteligência artificial e

    Ler mais

    Tempo de leitura: 10 minutos
    08/04/2026
    Sistema de login simples desenvolvido com Python
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Como criar um sistema de login simples com Python e TXT

    Aprender a manipular informações externas é um dos grandes marcos na jornada de qualquer programador. Se você está dando seus

    Ler mais

    Tempo de leitura: 10 minutos
    07/04/2026