Jogo da memória com 18 blocos. Crie um vetor com 18 posições, numeradas de 0 a 9 e 0 a 9 novamente. Misture estas posições. Crie um vetor de 18 posições com valores boleanos setados como False. Preencha uma numeração bem formatada de 0 a 17 no topo da tela e logo abaixo dela preencha com asteriscos, um para cada posição. O jogador então escolherá duas posições, de 0 a 17. Caso os números sejam idênticos, o a posição de valores booleanos será setada para True e a posição descoberta na próxima rodada. O jogo termina quando todas as posições forem reveladas. Forneça ao usuário o número de rodadas necessárias para completar o jogo.
Passo 1
Resumo do Enunciado e Conteúdo Necessário
Estamos criando um jogo da memória com 18 blocos. Para isso, precisamos usar vetores para armazenar os números e o estado das cartas (se estão reveladas ou não). Vamos precisar:
- Um vetor com 18 posições contendo números de 0 a 9 repetidos duas vezes.
- Um método para misturar esses números aleatoriamente.
- Um vetor de 18 posições com valores booleanos (True ou False) para indicar se a posição foi revelada.
- Exibir os números de 0 a 17 na tela, abaixo dos quais estarão asteriscos representando as cartas.
- Permitir que o jogador escolha duas posições por rodada.
- Verificar se os números escolhidos são iguais para revelar as cartas.
- Contar o número de rodadas necessárias para completar o jogo.
Passo 2
Criando o Vetor de Números
Primeiro, vamos criar um vetor com 18 posições onde os números de 0 a 9 aparecem duas vezes cada. Isso garante que cada número tenha um par para o jogo da memória.
numeros = [0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7]
Passo 3
Misturando os Números
Para deixar o jogo mais desafiador, precisamos misturar os números de forma aleatória no vetor. Assim, as posições não seguem uma ordem previsível.
import random
random.shuffle(numeros)
Passo 4
Criando o Vetor de Estados Booleanos
Vamos criar um vetor de 18 posições onde cada posição começa como
False
, indicando que nenhuma carta foi revelada no início do jogo.estado = [False] * 18
Passo 5
Exibindo o Tabuleiro Inicial
Precisamos mostrar ao jogador as posições disponíveis (de 0 a 17) e abaixo delas, asteriscos representando as cartas não reveladas.
print("Posições: " + " ".join(map(str, range(18))))
print("Cartas: " + " ".join(['*']*18))
Passo 6
Lógica do Jogo
Agora, vamos criar um loop que continuará rodando até que todas as cartas sejam reveladas. Em cada rodada, o jogador escolherá duas posições. Se os números nessas posições forem iguais, atualizamos o vetor de estados para
True
nessas posições, revelando-as.rodadas = 0
while not all(estado):
try:
escolha1 = int(input("Escolha a primeira posição (0-17): "))
escolha2 = int(input("Escolha a segunda posição (0-17): "))
if numeros[escolha1] == numeros[escolha2]:
estado[escolha1] = True
estado[escolha2] = True
print("Você encontrou um par!")
else:
print("Não é um par. Tente novamente.")
rodadas += 1
except (IndexError, ValueError):
print("Entrada inválida. Por favor, escolha números entre 0 e 17.")
Passo 7
Encerrando o Jogo
Quando todas as posições do vetor
estado
forem True
, o jogo termina. Então, informamos ao jogador o número de rodadas que ele precisou para completar o jogo.print(f"Parabéns! Você completou o jogo em {rodadas} rodadas.")
Resposta
O jogo foi completado em X rodadas, onde X representa o número de tentativas realizadas pelo jogador para revelar todas as cartas.