Trilhas
/
Python
Python
/
Exercícios
/
Estado do jogo da velha
Estado do jogo da velha

Estado do jogo da velha

Fácil

Instruções

Neste exercício, você vai implementar um programa que determina o estado de um jogo da velha tic-tac-toe. (Talvez você também conheça o jogo como "noughts and crosses" ou "Xs and Os".)

O jogo é disputado em uma grade 3×3. Os jogadores se revezam colocando Xs e Os na grade. O jogo termina quando um jogador vence ao alinhar três marcas em uma linha, uma coluna ou uma diagonal da grade, ou quando a grade inteira está preenchida.

Neste exercício, vamos supor que X começa.

Sua tarefa é determinar em que estado um determinado jogo está.

Existem 3 estados possíveis para o jogo:

  • O jogo está ongoing.
  • O jogo terminou em draw.
  • O jogo terminou em win.

Se o tabuleiro informado for inválido, lance um erro apropriado.

Um tabuleiro é inválido se atender às seguintes condições:

  • O tabuleiro informado não pode ser alcançado quando os turnos são jogados na ordem correta (lembre-se de que X começa).
  • Foram feitas jogadas depois de o jogo já ter terminado.

Exemplos

Jogo em andamento

   |   |
 X |   |
___|___|___
   |   |
   | X | O
___|___|___
   |   |
 O | X |
   |   |

Empate

   |   |
 X | O | X
___|___|___
   |   |
 X | X | O
___|___|___
   |   |
 O | X | O
   |   |

Vitória

   |   |
 X | X | X
___|___|___
   |   |
   | O | O
___|___|___
   |   |
   |   |
   |   |

Inválido

Ordem de turnos errada
   |   |
 O | O | X
___|___|___
   |   |
   |   |
___|___|___
   |   |
   |   |
   |   |
Continuação do jogo após uma vitória
   |   |
 X | X | X
___|___|___
   |   |
 O | O | O
___|___|___
   |   |
   |   |
   |   |

Mensagens de exceção

Às vezes é necessário lançar exceções. Quando você faz isso, deve sempre incluir uma mensagem de erro significativa para indicar qual é a origem do erro. Isso deixa seu código mais legível e ajuda bastante na depuração. Nas situações em que você sabe que a origem do erro é de um determinado tipo, você pode optar por lançar um dos tipos de erro embutidos, mas ainda deve incluir uma mensagem significativa.

Uma partida válida de Tic Tac Toe termina quando um dos jogadores vence. Se os dois jogadores estiverem em estado de vitória, este exercício espera que você use a instrução raise e "lance" um ValueError na sua solução. Espera-se também que seu código lance um ValueError se for identificado que um jogador jogou duas vezes seguidas, ou se jogou a primeira jogada quando deveria jogar a segunda.

Para lançar um ValueError com uma mensagem, escreva a mensagem como argumento do tipo exception:

# Example when player O goes before player X.
raise ValueError("Wrong turn order: O started")

# Example when player X goes twice.
raise ValueError("Wrong turn order: X went twice")

# Example when player X wins AND player O wins.
raise ValueError("Impossible board: game should have ended after the game was won")

Os testes vão verificar uma correspondência exata da mensagem de erro, então leia os resultados esperados com atenção.

Editar via GitHub O link abre em uma nova janela ou aba
Python Exercism

Tudo pronto para começar Estado do jogo da velha?

Crie sua conta no Exercism para aprender e dominar Python com 17 conceitos146 exercícios e mentoria humana de verdade, tudo de graça.