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.
Exercícios relacionados
Considere alguma sequência de elementos (difere de um mero conjunto de elementos por definir uma ordem entre os seus membros). Enumere, então, todas as subsequências não contínuas de uma dada sequência.
Dicas:
Dicas:
- Uma subsequência sempre contém algum subconjunto de elementos da sequência, na mesma ordem.
- Uma subsequência contínua é aquela em que nenhum elemento está faltando, entre o primeiro e o último elemento da subsequência.
Exemplo:
Escreva um programa para converter números escritos em algarismos romanos (menores que 4000) para arábicos.
Ler um vetor de números inteiros de 30 posições. Depois, ler um número inteiro
, imprimir quantas vezes o número X aparece no vetor.
Cálculo aproximado de
(Pi) pelo Método de Monte Carlo.
Dada a função
Dada a função
calcule o valor aproximado de
com
interações. Dicas: use random.random() * 2 para gerar valores entre 0 e 2 para as variáveis x e y e conte o número de pontos
que satisfazem a equação dada e divida o resultado por
. Cuidado com o tipo de dados.