segunda-feira, 7 de dezembro de 2009

Problema 8.11

A tudo o que já foi feito anteriormente junta-se agora a introdução do conceito de nível. O nível de um jogador (iniciado, normal e perito, vai determinar a complexidade da palavra a adivinhar e o número de tentativas a que tem direito. No nosso caso, escolhemos o seguinte:

(1) iniciado: palavras até 4 caracteres, tentativas igual à soma de 6 com o comprimento da palavra;
(2) normal: palavras até 8 caracteres, tentativas igual à soma de 6 com o número de caracteres diferentes na palavra;
(3) perito: palavra com mais do que 8 caracteres, tentativas igual à soma de 6 com 0.8 * número de letras diferentes.

Posto isto apresentemos as definições que tratam da escolha da palavra (do ficheiro onde estão as palavra do nível escolhido), e do número de tentativas permitido.


def escolhe_nivel():
""" Escolhe o nível. Implicações para as palavras e o número de tentativas."""
print
print "Níveis possíveis: Iniciado, Normal, Perito."
nivel = raw_input('Que nível [I/N/P]? ')
if nivel == 'I':
return '/tempo/data/pal_iniciado.txt', 'I'
elif nivel == 'N':
return '/tempo/data/pal_normal.txt', 'N'
else:
return '/tempo/data/pal_perito.txt', 'P'

def define_tentativas(dicio_pal, nivel):
diferentes = len(dicio_pal)
comprimento = sum([ len(indices) for indices in dicio_pal.values()])
if nivel == 'I':
return 6 + comprimento
elif nivel == 'N':
return 6 + diferentes
else:
return int(6 + 0.8 * diferentes)

No programa que joga precisamos introduzir a parte em que se define o nome do ficheiro onde vamos buscar a palavra, e o número de tentativas. O resto é mais do mesmo. O leitor deve consultar as soluções aos problemas anteriores.

def hang811():
while True:
# Definição do nível
ficheiro,nivel= escolhe_nivel()
# --- palavra secreta
palavras = open(ficheiro).read().split()
secreta = list(random.choice(palavras))
dicio = seq_to_dict(secreta)
# --- parâmetros
tentativas = define_tentativas(dicio,nivel)
acertou = False
estado = cria_estado(list('_'* len(secreta)), [],tentativas)
# resto igual
.......

Sem comentários:

Enviar um comentário