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.

01.def escolhe_nivel():   
02.    """ Escolhe o nível. Implicações para as palavras e o número de tentativas."""
03.    print
04.    print "Níveis possíveis: Iniciado, Normal, Perito."
05.    nivel = raw_input('Que nível [I/N/P]? ')
06.    if nivel == 'I':
07.        return '/tempo/data/pal_iniciado.txt', 'I'
08.    elif nivel == 'N':
09.        return '/tempo/data/pal_normal.txt', 'N'
10.    else:
11.        return '/tempo/data/pal_perito.txt', 'P'
12.     
13.def define_tentativas(dicio_pal, nivel):
14.    diferentes = len(dicio_pal)
15.    comprimento = sum([ len(indices) for indices in dicio_pal.values()])
16.    if nivel == 'I':
17.        return 6 + comprimento
18.    elif nivel == 'N':
19.        return 6 + diferentes
20.    else:
21.        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.
01.def hang811():
02.    while True:       
03.        # Definição do nível
04.        ficheiro,nivel= escolhe_nivel()
05.        # --- palavra secreta
06.        palavras = open(ficheiro).read().split()
07.        secreta = list(random.choice(palavras))
08.        dicio = seq_to_dict(secreta)
09.        # --- parâmetros
10.        tentativas = define_tentativas(dicio,nivel)
11.        acertou = False
12.        estado = cria_estado(list('_'* len(secreta)), [],tentativas)
13.        # resto igual
14.        .......

Sem comentários:

Enviar um comentário