2022.1 Prova 1 - Questão 1: Jogo da Velha#
Faça um programa em Python que implemente o jogo da velha de acordo com o padrão apresentado abaixo.
- Os jogadores são representados pelos caracteres
'X'e'O'(letra "o" maiúscula). - O tabuleiro é representado da seguinte maneira (observação: você pode passar em quase todos os testes sem precisar imprimir o tabuleiro formatado dessa forma):
- O jogador define onde quer colocar a peça indicando a linha (letra A, B ou C) seguida pela coluna (1, 2 ou 3), sem nenhum espaço. Por exemplo:
'C2'é a coluna do meio da última linha,'B3'é a última coluna da linha do meio,'A1'é a primeira coluna da primeira linha. - O jogo sempre começa com o jogador
'X'. - O programa começa com a mensagem
'Jogo da Velha'e termina com uma das 3 mensagens abaixo, dependendo do resultado:'Vencedor: X''Vencedor: O''Empate'
- O jogo termina quando algum dos jogadores vence ou quando todas as posições do tabuleiro estiverem preenchidas.
Importante
As mensagens devem ser exatamente iguais às dos exemplos. Tome cuidado com letras maiúsculas, acentos e sinais de pontuação.
Abaixo apresentamos a descrição e um exemplo de cada nível de proficiência.
Importante
Faça o download do exercício pelo link no final desta página!
Nível básico: funções#
Para atingir o nível básico você deve implementar no arquivo funcoes.py as funções:
extrai_linha: recebe uma string de posição e deve devolver o índice da linha correspondente (um número entre 0 e 2). Exemplo: para a entrada'B1'sua função deve devolver1;extrai_coluna: recebe uma string de posição e deve devolver o índice da coluna correspondente (um número entre 0 e 2). Exemplo: para a entrada'B1'sua função deve devolver0;verifica_vencedor: escolha uma das duas opções para implementar:- A função recebe 9 strings, uma para cada posição do tabuleiro, e retorna
'X'se o jogador X tiver vencido,'O'se o jogador O tiver vencido,'E'se tiver ocorrido empate,'N'se o tabuleiro não tiver vencedor e ainda houver espaços em branco. Para cada posição, os valores possíveis são'X','O'ou' '(string com um espaço). Os argumentos (a,b,c,d,e,f,g,h,i) serão enviados na ordem abaixo: - A função recebe uma lista representando o tabuleiro e retorna o vencedor, da mesma maneira que a opção (a). A lista de entrada possui uma lista para cada linha, como no exemplo abaixo: Você deve implementar esta versão com listas se quiser atingir o nível avançado.
- A função recebe 9 strings, uma para cada posição do tabuleiro, e retorna
Nível proficiente: mostra estado do tabuleiro#
Para o nível proficiente, você deve implementar a versão básica do jogo no arquivo programa.py. No nível proficiente serão testadas apenas entradas válidas, sempre com a letra maiúscula, e sem nenhum espaço em branco adicional.
Seu programa deve imprimir o tabuleiro vazio logo no começo do jogo e o estado do tabuleiro após cada entrada válida. Neste nível as entradas ainda são sempre válidas e sem espaços adicionais.
Importante
Preste atenção na forma como o tabuleiro é impresso. Isto faz diferença na hora dos testes.
Consulte o exemplo de interação com o programa (nível proficiente).
Nível avançado: validação de entrada#
Para passar nos testes avançados, o programa deve implementar validação de entrada. Uma entrada é considerada válida se a linha e coluna forem posições possíveis no tabuleiro e a posição não estiver ocupada. Você pode supor que além da letra (que pode ser maiúscula ou minúscula) e do número, a entrada poderá conter espaços em branco e nenhum outro caractere (ex: ' C 1 ', 'a3', ' D9 '). Seu programa deve funcionar mesmo com os espaços em branco.
Caso a entrada do usuário seja inválida, seu programa deve imprimir o texto 'Posição inválida'.
Você também deve validar se a posição escolhida pelo jogador está disponível. Caso a posição não esteja disponível o jogo deve imprimir a mensagem 'Posição ocupada'.
Caso a entrada seja inválida ou ocupada, o jogo deve solicitar novamente que o jogador escolha uma posição até que digite uma entrada válida e disponível.
Consulte os exemplos de interação com o programa (nível avançado).