Você está na página 1de 6

MAC2166 - Introdução à Computação

Escola Politécnica - Turmas Python - Primeiro Semestre de 2023

Primeiro Exercício-Programa

Jogo da Velha Rejuvenescido

Neste exercício-programa (EP), treinaremos os conhecimentos vistos em sada de


aula até o momento, como a utilização de operações aritméticas e comparações,
condicionais (if-else), comando de repetição (while), leitura da entrada (input)
e impressão de mensagens para o usuário (print).
Neste primeiro projeto você deverá escrever um programa que permite que dois
humanos joguem o jogo da velha "rejuvenescido" com uma nova e inusitada regra
para ser usada em caso de empate.
Como no jogo da velha tradicional, dois jogadores se alternam na marcação de
uma casa de um tabuleiro de tamanho 3-por-3. Vence quem conseguir completar uma
linha, coluna ou diagonal com marcações do seu tipo. Empata (e neste caso costuma-
se dizer que o jogo "deu velha"), quando todas as casas estiverem preenchidas sem
termos um vencedor. Com a nova regra de desempate escolhemos 2 casas marcadas
para serem limpas e assim permitir um novo par de jogadas.

Tabuleiro

No jogo original, cada casa do tabuleiro pode ser marcada por ×, ⃝ ou vazio. Neste
EP1, vamos representar uma casa marcada com × pelo número 1, uma casa mar-
cada com ⃝ pelo número 2, e uma casa vazia pelo número 0 (zero). Desta maneira,
podemos representar qualquer configuração do tabuleiro do jogo da velha como um
número inteiro na base 3 (sistema de numeração ternário ou trinário), usando o equi-
valente à representação posicional de números, com o dígito representando o menor
número ocupando a posição à esquerda superior e o dígito representando o maior
número ocupando a posição à direita inferior. Isto é, os dígitos da representação
inteira ihgfedcba são organizados da seguinte forma:

a b c
d e f
g h i

1
O número ternário representando um tabuleiro do jogo da velha pode ser con-
vertido para base 10, um inteiro pertencente ao intervalo entre 0 e (39 − 1 = 19682).
Por exemplo, a configuração do tabuleiro

× × ⃝ 1 1 2
× ⃝ ⇔ 1 2 0
⃝ × 2 1 0

é representada pelo inteiro 012021211 na base 3 (na ordem ihgfedcba), denotado por
0120212113 , que quando convertido para a base 10 resulta no inteiro 385610 (inteiro
na base 10), isto é:

1 × 30 + 1 × 31 + 2 × 32 + 1 × 33 + 2 × 34 + 0 × 35 + 2 × 36 + 1 × 37 + 0 × 38 = 3856

Também podemos converter um inteiro na base 10 para um inteiro na base 3,


efetuando a divisão sucessiva por 3 (base do sistema ternário). O resultado da
conversão será dado pelo último quociente e a composição dos restos de divisão, isto
é:

Note que a leitura do resultado 0120212113 é feita do último quociente para o


primeiro resto. Sendo assim, o resultado da conversão do número 3856 para ternário
é: 012021211.

Regras do Jogo

No modo oficial do jogo, participam duas pessoas, que jogam alternadamente, pre-
enchendo cada uma das casas vazias. Cada participante pode usar uma marcação

2
(× ou ⃝). Vence o jogador que conseguir formar primeiro uma linha com três
símbolos iguais, seja ela na horizontal, vertical ou diagonal.
Quando todas as casas do tabuleiro estiverem preenchidas e nenhum dos dois
jogadores conseguiu a vitória, dizemos que houve um empate, mais comumente
descrito como VELHA. Para rejuvenescer esta velha, propomos a regra do desempate
descrita a seguir.

Regra do Desempate

Nesta versão do jogo da velha daremos 4 chances de desempate. Em cada chance,


serão eliminadas:

• a casa central e ;

• uma das casas do canto do tabuleiro, a, c, g, i — nesta ordem.

Se ao final de 4 rodadas de desempate não houver nenhum vitorioso, o seu programa


deve imprimir VELHA DEFINITIVA e encerrar.

Programas em Python

Parte A [data de entrega 23/04/2023] A primeira tarefa deste EP é fazer


um programa em Python, ep1_parteA.py, que lê um inteiro na base 3 e imprime o
inteiro convertido para a base 10.

Parte B [data de entrega 23/04/2023] A segunda tarefa deste EP é fazer um


programa em Python, ep1_parteB.py, que lê um inteiro na base 10 e imprime o
inteiro convertido para a base 3.
Exemplo de entrada e saída para a parte B

Digite um inteiro na base 10: 83


Inteiro convertido para base 3: 10002

Digite um inteiro na base 10: 7910


Inteiro convertido para base 3: 101211222

3
Parte C [data de entrega 30/04/2023] Finalmente, a terceira e última tarefa
é fazer um programa em Python, ep1_parteC.py, que implemente todas as regras
do jogo da velha (incluindo a nova regra do desempate), bem como a interface que
controla o jogo com os dois usuários humanos. O seu programa deve, a cada turno,
perguntar por uma jogada para o usuário da vez, que deve digitar um dígito de 1 a
9 correspondente às casas de a a i do tabuleiro. Em seguida o seu programa deve
exibir o inteiro na base 10 representando a configuração do tabuleiro após a marcação
correspondente. Se a marcação terminar o jogo, seu programa deve também exibir o
texto VELHA, caso o jogo termine empatado, VENCEU JX caso o jogo tenha sido
vencido pelo primeiro jogador ×, e VENCEU JO caso o jogo tenha sido vencido
pelo segundo jogador ⃝. Por exemplo, uma possível execução do seu programa
poderia gerar a seguinte sequência de tabuleiros ser:

Jogada do JX: 1
Tabuleiro: 1
Jogada do JO: 5
Tabuleiro: 163
Jogada do JX: 2
Tabuleiro: 166
Jogada do JO: 3
Tabuleiro: 184
Jogada do JX: 4
Tabuleiro: 211
Jogada do JO: 7
Tabuleiro: 1669
Resultado: VENCEU JO

Note que as configurações de tabuleiros para essa sequência foram:

X X X X X X 0 X X 0 X X 0
⇒ 0 ⇒ 0 ⇒ 0 ⇒ X 0 ⇒ X 0
0

o que resultou na vitória do segundo jogador, JO.


Um exemplo de execução do seu programa em que acontece o empate (VELHA)
seria:

Jogada do JX: 1
Tabuleiro: 1

4
Jogada do JO: 5
Tabuleiro: 163
Jogada do JX: 3
Tabuleiro: 172
Jogada do JO: 2
Tabuleiro: 178
Jogada do JX: 8
Tabuleiro: 2365
Jogada do JO: 9
Tabuleiro: 15487
Jogada do JX: 7
Tabuleiro: 16216
Jogada do JO: 4
Tabuleiro: 16270
Jogada do JX: 6
Tabuleiro: 16513
VELHA
Casas apagadas: 5 e 1
Jogada do JO: 1
Tabuleiro: 16352
Jogada do JX: 5
Tabuleiro: 16433
VENCEU JX

Neste EP, assumimos que o jogador nunca digite uma jogada inválida
(por exemplo, uma posição já marcada ou inexistente), e portanto seu programa
não precisa considerar que uma jogada deste tipo ocorra.
Importante: Todas as saídas impressas pelos programas devem ser exatamente
iguais às mostradas nos exemplos deste enunciado.

Entrega

Leia a página de "Instruções para entrega de EPs". Você deverá entregar no


e-Disciplinas os arquivos contendo os códigos fonte em Python, para cada parte do
EP1, chamados: ep1_parteA.py, ep1_parteB.py e ep1_parteC.py.
Você pode usar algum ambiente instalado no seu computador para escrever seu
programa e depois enviar o arquivo dele para o e-Disciplinas. Ou então pode di-

5
gitar o seu programa diretamente no editor disponível no e-Disciplinas, no próprio
navegador. Veja o vídeo que mostra como fazer o envio e a edição de um EP no
e-Disciplinas.

Avaliação

A nota do EP1 será calculada como a soma ponderada das notas de cada parte:
NotaEP1 = 0.15*ParteA + 0.15*ParteB + 0.7*ParteC

Observações
1. O exercício-programa é estritamente individual. Exercícios copiados (com ou
sem eventuais disfarces) receberão nota ZERO.

2. Exercícios atrasados não serão aceitos.

3. Exercícios com erros de sintaxe (ou seja, o compilador detecta erros, e portanto
não compila nem roda) recebem nota ZERO.

4. Neste EP1, é permitido o operador aritmético " ** ". No entanto, não é


permitido o uso de funções, strings, listas, matrizes, ou o comando for, uma
vez que estes conceitos ainda não foram introduzidos em aula.

Você também pode gostar